{"id":3481,"date":"2020-02-16T13:49:01","date_gmt":"2020-02-16T04:49:01","guid":{"rendered":"https:\/\/now0930.pe.kr\/wordpress\/?p=3481"},"modified":"2020-02-16T13:54:46","modified_gmt":"2020-02-16T04:54:46","slug":"gps-%ed%83%9c%ea%b7%b8-%ec%95%a8%eb%b2%94-%ec%a0%9c%ec%9e%915-4","status":"publish","type":"post","link":"https:\/\/now0930.pe.kr\/wordpress\/gps-%ed%83%9c%ea%b7%b8-%ec%95%a8%eb%b2%94-%ec%a0%9c%ec%9e%915-4\/","title":{"rendered":"gps \ud0dc\uadf8 \uc568\ubc94 \uc81c\uc791(5\/4)"},"content":{"rendered":"\n<p>\uad6c\uae00 \uc9c0\ub3c4\uac00 \uc9c0\uc6d0\ud558\ub294 clusterer\ub97c \uc0ac\uc6a9\ud558\uace0 \uc2f6\ub2e4. <a href=\"https:\/\/ko.perlmaven.com\/how-to-create-a-perl-module-for-code-reuse\">cpan\uc73c\ub85c \uc124\uce58\ud55c HTML:GoogleMap:V3 \ub0b4\ubd80\ub97c \uc190\ubd10\uc57c \ud588\ub2e4.<\/a> perl\uc774 \uc0ac\uc6a9\ud558\ub294 perl module @INC(\uacbd\ub85c \ube44\uc2b7\ud55c?)\ub97c \ucc3e\uc558\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">root@gen8# perl -V\nSummary of my perl5 (revision 5 version 30 subversion 1) configuration:\n   \n  Platform:\n    osname=linux\n...\n  @INC:\n    \/usr\/local\/lib\/perl5\/site_perl\/5.30.1\/x86_64-linux-gnu\n    \/usr\/local\/lib\/perl5\/site_perl\/5.30.1\n    \/usr\/local\/lib\/perl5\/vendor_perl\/5.30.1\/x86_64-linux-gnu\n    \/usr\/local\/lib\/perl5\/vendor_perl\/5.30.1\n    \/usr\/local\/lib\/perl5\/5.30.1\/x86_64-linux-gnu\n    \/usr\/local\/lib\/perl5\/5.30.1<\/pre>\n\n\n\n<p>usr\/local\/lib \uacbd\ub85c \uc544\ub798 V3.pm\uc744 \ucc3e\uc544 \uc9c0\uc6e0\ub354\ub2c8 \uc5d0\ub7ec\ub97c \ubc1b\uc558\ub2e4. \uc57c\ud638! perl\uc744 \uc798 \ubaa8\ub974\uc9c0\ub9cc \ub0b4\ubd80\ub97c \uc870\uae08 \uc218\uc815\ud558\uba74 \ub0b4\uac00 \uc6d0\ud558\ub294 \ucf54\ub4dc\ub97c \ub9cc\ub4e4 \uc218 \uc788\ub2e4. <a href=\"https:\/\/metacpan.org\/release\/HTML-GoogleMaps-V3\/source\/lib\/HTML\/GoogleMaps\/V3.pm\">\uc5ec\uae30<\/a>\uc5d0\uc11c add marker \ubd80\ubd84\ub9cc \uc870\uae08 \uc218\uc815\ud588\ub2e4. template\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc27d\uac8c \uc218\uc815\ud588\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">...V3.pm \uc218\uc815.\n...\n   my $template =&lt;&lt;\"EndOfTemplate\";\nfunction html_googlemaps_initialize() {\n\n    [% # Github issue 22 %]\n    [% IF center %]\n\tmyCenterLatLng = new google.maps.LatLng({lat: [% center.0 %], lng: [% center.1 %]});\n    [% END %]\n\n\n\t\/\/2020.2.16 \ucd94\uac00\n\tvar markers = [];\n\n    \/\/ key map controls\n    var map = new google.maps.Map(document.getElementById('[% id %]'), {\n        mapTypeId: google.maps.MapTypeId.[% type %],\n        [% IF center %]center: myCenterLatLng,[% END %]\n        scrollwheel: false,\n        zoom: [% zoom %],\n        draggable: [% dragging ? 'true' : 'false' %]\n    });\n\n    [% FOREACH point IN points %]\n\n    \/\/ marker\n    myMarker[% loop.count %]LatLng = new google.maps.LatLng({lat: [% point.point.0 %], lng: [% point.point.1 %]});\n    var marker[% loop.count %] = new google.maps.Marker({\n        map: map,\n        position: myMarker[% loop.count %]LatLng,\n    });\n\n    \/\/ marker infoWindow\n    [% IF info_window AND point.html %]\n    var contentString[% loop.count %] = '[% point.html %]';\n    var infowindow[% loop.count %] = new google.maps.InfoWindow({\n        content: contentString[% loop.count %]\n    });\n\n    marker[% loop.count %].addListener('click', function() {\n        infowindow[% loop.count %].open(map, marker[% loop.count %]);\n    });\n\n\t\/\/2020.2.16 \ucd94\uac00\n\tmarkers.push(marker[% loop.count %]);\n\n    [% END %]\n\n    [% END -%]\n\n    [% FOREACH route IN poly_lines %]\n\n    \/\/ polylines\n    var route[% loop.count %]Coordinates = [\n        [% FOREACH point IN route.points %]{lat: [% point.0 %], lng: [% point.1 %]}[% loop.last ? '' : ',' %]\n        [% END %]\n    ];\n\n    var route[% loop.count %] = new google.maps.Polyline({\n        path: route[% loop.count %]Coordinates,\n        geodesic: true,\n        strokeColor: '[% route.color %]',\n        strokeOpacity: [% route.opacity %],\n        strokeWeight: [% route.weight %]\n    });\n\n    route[% loop.count %].setMap(map);\n    [% END %]\n\t\/\/20.2.16 \ucd94\uac00\n\tvar markerCluster = new MarkerClusterer(map, markers);\n}\ngoogle.maps.event.addDomListener(window, 'load', html_googlemaps_initialize);\n\nEndOfTemplate\n}\n...\uc0dd\ub7b5\nsub onload_render {\n    my ( $self ) = @_;\n\n    # Add in all the defaults\n    $self->{id}         ||= 'map';\n    $self->{height}     ||= '400px';\n    $self->{width}      ||= '600px';\n    $self->{type}       ||= \"NORMAL\";\n    $self->{zoom}       ||= 13;\n    $self->{center}     ||= $self->_find_center;\n    $self->{dragging}     = 1 unless defined $self->{dragging};\n    $self->{info_window}  = 1 unless defined $self->{info_window};\n\n    $self->{width}  .= 'px' if $self->{width} =~ m\/^\\d+$\/;\n    $self->{height} .= 'px' if $self->{height} =~ m\/^\\d+$\/;\n\n\t#\t    my $header = '&lt;script src=\"https:\/\/maps.googleapis.com\/maps\/api\/js__KEY__\"'\n\t#        . ' async defer type=\"text\/javascript\">&lt;\/script>'\n\t#    ;\n\t# 20.2.16 \ucd94\uac00\n\t#  \ud544\uc694\uc5d0 \ub530\ub77c \uacbd\ub85c \uc218\uc815\n\n\t    my $header = '&lt;script src=\"..\/map\/marker\/src\/markerclusterer.js\">&lt;\/script>\n&lt;script src=\"https:\/\/maps.googleapis.com\/maps\/api\/js__KEY__\"'\n\t        . ' async defer type=\"text\/javascript\">&lt;\/script>'\n\t    ;\n\n    my $key = $self->{api_key}\n        ? \"?key=@{[ $self->{api_key} ]}\" : \"\";\n\n    $header =~ s\/__KEY__\/$key\/;\n\n    my $map = sprintf(\n        '&lt;div id=\"%s\" style=\"width: %s; height: %s%s\">&lt;\/div>',\n        @{$self}{qw\/ id width height \/ },\n        exists($self->{'z_index'})\n            ? '; z-index: ' . $self->{'z_index'} : ''\n    );\n\n    my $out;\n    Template->new->process( \\$self->_js_template,$self,\\$out );\n\n    $header .= \"&lt;script>$out&lt;\/script>\";\n\n    return ( $header,$map );\n}\n...\uc0dd\ub7b5<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"900\" src=\"https:\/\/i0.wp.com\/now0930.pe.kr\/wordpress\/wp-content\/uploads\/2020\/02\/\uc2a4\ud06c\ub9b0\uc0f7-2020-02-16-13-52-28.png?fit=525%2C295&amp;ssl=1\" alt=\"\" class=\"wp-image-3485\" srcset=\"https:\/\/now0930.pe.kr\/wordpress\/wp-content\/uploads\/2020\/02\/\uc2a4\ud06c\ub9b0\uc0f7-2020-02-16-13-52-28.png 1600w, https:\/\/now0930.pe.kr\/wordpress\/wp-content\/uploads\/2020\/02\/\uc2a4\ud06c\ub9b0\uc0f7-2020-02-16-13-52-28-300x169.png 300w, https:\/\/now0930.pe.kr\/wordpress\/wp-content\/uploads\/2020\/02\/\uc2a4\ud06c\ub9b0\uc0f7-2020-02-16-13-52-28-1024x576.png 1024w, https:\/\/now0930.pe.kr\/wordpress\/wp-content\/uploads\/2020\/02\/\uc2a4\ud06c\ub9b0\uc0f7-2020-02-16-13-52-28-768x432.png 768w, https:\/\/now0930.pe.kr\/wordpress\/wp-content\/uploads\/2020\/02\/\uc2a4\ud06c\ub9b0\uc0f7-2020-02-16-13-52-28-1536x864.png 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><\/figure>\n\n\n\n<p>\ub300\ucda9 \uc6d0\ud558\ub294\ub300\ub85c \ub098\uc628\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uad6c\uae00 \uc9c0\ub3c4\uac00 \uc9c0\uc6d0\ud558\ub294 clusterer\ub97c \uc0ac\uc6a9\ud558\uace0 \uc2f6\ub2e4. cpan\uc73c\ub85c \uc124\uce58\ud55c HTML:GoogleMap:V3 \ub0b4\ubd80\ub97c \uc190\ubd10\uc57c \ud588\ub2e4. perl\uc774 \uc0ac\uc6a9\ud558\ub294 perl module @INC(\uacbd\ub85c \ube44\uc2b7\ud55c?)\ub97c \ucc3e\uc558\ub2e4. usr\/local\/lib [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[12],"tags":[126,730,728,729],"class_list":["post-3481","post","type-post","status-publish","format-standard","hentry","category-12","tag-gps","tag-perl","tag-728","tag-729"],"_links":{"self":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/3481","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/comments?post=3481"}],"version-history":[{"count":5,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/3481\/revisions"}],"predecessor-version":[{"id":3487,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/3481\/revisions\/3487"}],"wp:attachment":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/media?parent=3481"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/categories?post=3481"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/tags?post=3481"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}