Google지도 API V3-정확히 동일한 지점에 여러 마커


115

이것에 비트가 붙어 있습니다. JSON을 통해 지리적 좌표 목록을 검색하고 Google지도에 표시합니다. 정확히 같은 지점에 두 개 이상의 마커가있는 경우를 제외하고는 모두 잘 작동합니다. API는 맨 위의 마커 1 개만 표시합니다. 이것은 내가 생각하기에 충분히 공평하지만 어떻게 든 그들을 모두 표시하는 방법을 찾고 싶습니다.

Google을 검색하고 몇 가지 솔루션을 찾았지만 대부분 API의 V2 용이거나 그다지 좋지 않은 것 같습니다. 이상적으로는 일종의 그룹 마커를 클릭 한 다음 마커가 모두있는 지점 주변에 클러스터 된 마커를 표시하는 솔루션을 원합니다.

누구든지이 문제가 있거나 비슷한 문제가 있었고 해결책을 공유하고 싶습니까?

답변:


116

OverlappingMarkerSpiderfier를 살펴보십시오 .
데모 페이지가 있지만 정확히 같은 지점에있는 마커는 표시되지 않고 서로 매우 가까운 마커 만 표시됩니다.

그러나 똑같은 지점에 마커가있는 실제 사례는 http://www.ejw.de/ejw-vor-ort/에서 볼 수 있습니다 (지도를 아래로 스크롤하고 몇 개의 마커를 클릭하여 거미 효과를 볼 수 있습니다. ).

그것은 당신의 문제에 대한 완벽한 해결책 인 것 같습니다.


이것은 굉장하며 동일한 위도 / 경도를 가진 마커를 처리하지 않는 클러스터 라이브러리에서 남은 요구를 완벽하게 충족합니다.
Justin

MarkerClustererOverlappingMarkerSpiderfier 와 함께 사용 하는 경우 좋은 옵션은 클러스터 생성자 에서 옵션 을 설정하는 것입니다. 이렇게하면 지정된 확대 / 축소 수준 이후의 마커가 "클러스터 해제"됩니다. maxZoom
Diederik

@Tad 당신이 그 웹 사이트의 개발자인지는 모르겠지만, ejw.de의지도가 깨 졌다는 것을 알려 드리고 싶었습니다. JS 오류가 발생합니다.
Alex

제안 된 데모를 확인했지만 죽은 것처럼 보입니다. 추가 연구 끝에 마커 클러스터와 Spiderifier를 통합하는 방법에 대한이 예제를 찾았습니다. 라이브 데모는 없지만 readme를 복제하고 따르십시오. github.com/yagoferrer/markerclusterer-plus-spiderfier-example
Sax

34

마커가 같은 건물에있는 경우 마커 오프셋은 실제 솔루션이 아닙니다. 원하는 것은 markerclusterer.js를 다음과 같이 수정하는 것입니다.

  1. MarkerClusterer 클래스에 프로토 타입 클릭 메소드를 다음과 같이 추가합니다. 나중에 map initialize () 함수에서이를 재정의합니다.

    MarkerClusterer.prototype.onClick = function() { 
        return true; 
    };
  2. ClusterIcon 클래스에서 clusterclick 트리거 후에 다음 코드를 추가합니다.

    // Trigger the clusterclick event.
    google.maps.event.trigger(markerClusterer, 'clusterclick', this.cluster_);
    
    var zoom = this.map_.getZoom();
    var maxZoom = markerClusterer.getMaxZoom();
    // if we have reached the maxZoom and there is more than 1 marker in this cluster
    // use our onClick method to popup a list of options
    if (zoom >= maxZoom && this.cluster_.markers_.length > 1) {
       return markerClusterer.onClickZoom(this);
    }
  3. 그런 다음지도를 초기화하고 MarkerClusterer 객체를 선언하는 initialize () 함수에서 다음을 수행합니다.

    markerCluster = new MarkerClusterer(map, markers);
    // onClickZoom OVERRIDE
    markerCluster.onClickZoom = function() { return multiChoice(markerCluster); }

    multiChoice ()는 선택할 수있는 옵션 목록이있는 InfoWindow를 팝업하는 (아직 작성되지 않은) 함수입니다. markerClusterer 객체는 해당 클러스터에있는 마커 수를 확인하는 데 필요하므로 함수에 전달됩니다. 예를 들면 :

    function multiChoice(mc) {
         var cluster = mc.clusters_;
         // if more than 1 point shares the same lat/long
         // the size of the cluster array will be 1 AND
         // the number of markers in the cluster will be > 1
         // REMEMBER: maxZoom was already reached and we can't zoom in anymore
         if (cluster.length == 1 && cluster[0].markers_.length > 1)
         {
              var markers = cluster[0].markers_;
              for (var i=0; i < markers.length; i++)
              {
                  // you'll probably want to generate your list of options here...
              }
    
              return false;
         }
    
         return true;
    }

17

나는 이것을 jQuery와 함께 사용했으며 작업을 수행합니다.

var map;
var markers = [];
var infoWindow;

function initialize() {
    var center = new google.maps.LatLng(-29.6833300, 152.9333300);

    var mapOptions = {
        zoom: 5,
        center: center,
        panControl: false,
        zoomControl: false,
        mapTypeControl: false,
        scaleControl: false,
        streetViewControl: false,
        overviewMapControl: false,
        mapTypeId: google.maps.MapTypeId.ROADMAP
      }


    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);

    $.getJSON('jsonbackend.php', function(data) {
        infoWindow = new google.maps.InfoWindow();

        $.each(data, function(key, val) {
            if(val['LATITUDE']!='' && val['LONGITUDE']!='')
            {                
                // Set the coordonates of the new point
                var latLng = new google.maps.LatLng(val['LATITUDE'],val['LONGITUDE']);

                //Check Markers array for duplicate position and offset a little
                if(markers.length != 0) {
                    for (i=0; i < markers.length; i++) {
                        var existingMarker = markers[i];
                        var pos = existingMarker.getPosition();
                        if (latLng.equals(pos)) {
                            var a = 360.0 / markers.length;
                            var newLat = pos.lat() + -.00004 * Math.cos((+a*i) / 180 * Math.PI);  //x
                            var newLng = pos.lng() + -.00004 * Math.sin((+a*i) / 180 * Math.PI);  //Y
                            var latLng = new google.maps.LatLng(newLat,newLng);
                        }
                    }
                }

                // Initialize the new marker
                var marker = new google.maps.Marker({map: map, position: latLng, title: val['TITLE']});

                // The HTML that is shown in the window of each item (when the icon it's clicked)
                var html = "<div id='iwcontent'><h3>"+val['TITLE']+"</h3>"+
                "<strong>Address: </strong>"+val['ADDRESS']+", "+val['SUBURB']+", "+val['STATE']+", "+val['POSTCODE']+"<br>"+
                "</div>";

                // Binds the infoWindow to the point
                bindInfoWindow(marker, map, infoWindow, html);

                // Add the marker to the array
                markers.push(marker);
            }
        });

        // Make a cluster with the markers from the array
        var markerCluster = new MarkerClusterer(map, markers, { zoomOnClick: true, maxZoom: 15, gridSize: 20 });
    });
}

function markerOpen(markerid) {
    map.setZoom(22);
    map.panTo(markers[markerid].getPosition());
    google.maps.event.trigger(markers[markerid],'click');
    switchView('map');
}

google.maps.event.addDomListener(window, 'load', initialize);

Thx는 나를 위해 완벽하게 작동합니다 :) 내가 몇 시간 이후로 검색했던 것 : p
Jicao

아름답고 우아한 솔루션. 감사합니다!
Concept211

조금만 상쇄하는 완벽한 솔루션! 그것이 가능, 우리는 마커에 마우스를 가져가 여러 개의 마커를 표시보다
Intekhab 칸

14

Chaoley의 답변을 확장하여 좌표가 정확히 동일한 위치 ( lnglat속성이있는 객체) 목록이 주어지면 원래 위치에서 약간 이동 (객체를 제자리에서 수정)하는 기능을 구현했습니다. 그런 다음 중심점 주위에 멋진 원을 형성합니다.

위도 (북위 52도)의 경우 0.0003 도의 원 반경이 가장 적합하며 킬로미터로 변환 할 때 위도와 경도의 차이를 보상해야한다는 것을 알았습니다. 여기에서 위도에 대한 대략적인 변환을 찾을 수 있습니다 .

var correctLocList = function (loclist) {
    var lng_radius = 0.0003,         // degrees of longitude separation
        lat_to_lng = 111.23 / 71.7,  // lat to long proportion in Warsaw
        angle = 0.5,                 // starting angle, in radians
        loclen = loclist.length,
        step = 2 * Math.PI / loclen,
        i,
        loc,
        lat_radius = lng_radius / lat_to_lng;
    for (i = 0; i < loclen; ++i) {
        loc = loclist[i];
        loc.lng = loc.lng + (Math.cos(angle) * lng_radius);
        loc.lat = loc.lat + (Math.sin(angle) * lat_radius);
        angle += step;
    }
};

1
DzinX, 저는 지난 4 시간 동안 아무 소용없이 코드를 내 코드에 구현할 수있는 방법을 알아 내려고 노력했습니다. 나는 이것을 짜증나게하고 당신의 도움에 정말로 감사 할 것이라는 결론에 이르렀다. 여기에 코드를 꽂으려는 곳 이 있습니다 . pastebin.com/5qYbvybm- 모든 도움을 주시면 감사하겠습니다! 감사!
WebMW

WebMW : XML에서 마커를 추출한 후 각 목록에 정확히 동일한 위치를 가리키는 마커가 포함되도록 먼저 마커를 목록으로 그룹화해야합니다. 그런 다음 둘 이상의 요소가 포함 된 각 목록에서 correctLocList ()를 실행하십시오. 그 후에 만 ​​google.maps.Marker 객체를 만드세요.
DzinX 2013

그 그것은 단지에서 내 위도 갈망을 변경합니다 .... 작동하지 않습니다 37.68625400000000000,-75.71669800000000000에 대한 37.686254,-75.716698모든 값에 대해 동일 함도 ... M은 같은 ... 뭔가를 기대 37.68625400000000000,-75.71669800000000000하는 37.6862540000001234,-75.7166980000001234 37.6862540000005678,-75.7166980000005678나는 또한 나의 각도를 변경 시도 .. .. 등.
Premshankar Tiwari 2013 년

Hummm, 조금 파고 @DzinX가 여전히 그 지역에 있기를 바랍니다. 짝 (또는 다른 사람)이이 모든 숫자를 얻는 방법을 설명 할 수 있습니까? Lng_radius 등? 정말 고마워. :)
Vae jul.

1
@Vae : 반경은 원이 원하는 크기입니다. 원이 픽셀 단위로 둥글게 보이기를 원하므로 위도 1도 대 경도 1 도의 비율 (지도의 픽셀 단위)이 무엇인지 알아야합니다. 일부 웹 사이트에서이를 찾거나 숫자가 정확해질 때까지 실험 할 수 있습니다. 각도는 첫 번째 핀이 상단에서 오른쪽에있는 정도입니다.
DzinX

11

@Ignatius 가장 우수한 답변, MarkerClustererPlus v2.0.7에서 작동하도록 업데이트되었습니다.

  1. MarkerClusterer 클래스에 프로토 타입 클릭 메소드를 다음과 같이 추가합니다. 나중에 map initialize () 함수에서이를 재정의합니다.

    // BEGIN MODIFICATION (around line 715)
    MarkerClusterer.prototype.onClick = function() { 
        return true; 
    };
    // END MODIFICATION
  2. ClusterIcon 클래스에서 click / clusterclick 트리거 후에 다음 코드를 추가합니다.

    // EXISTING CODE (around line 143)
    google.maps.event.trigger(mc, "click", cClusterIcon.cluster_);
    google.maps.event.trigger(mc, "clusterclick", cClusterIcon.cluster_); // deprecated name
    
    // BEGIN MODIFICATION
    var zoom = mc.getMap().getZoom();
    // Trying to pull this dynamically made the more zoomed in clusters not render
    // when then kind of made this useless. -NNC @ BNB
    // var maxZoom = mc.getMaxZoom();
    var maxZoom = 15;
    // if we have reached the maxZoom and there is more than 1 marker in this cluster
    // use our onClick method to popup a list of options
    if (zoom >= maxZoom && cClusterIcon.cluster_.markers_.length > 1) {
        return mc.onClick(cClusterIcon);
    }
    // END MODIFICATION
  3. 그런 다음지도를 초기화하고 MarkerClusterer 객체를 선언하는 initialize () 함수에서 다음을 수행합니다.

    markerCluster = new MarkerClusterer(map, markers);
    // onClick OVERRIDE
    markerCluster.onClick = function(clickedClusterIcon) { 
      return multiChoice(clickedClusterIcon.cluster_); 
    }

    multiChoice ()는 선택할 수있는 옵션 목록이있는 InfoWindow를 팝업하는 (아직 작성되지 않은) 함수입니다. markerClusterer 객체는 해당 클러스터에있는 마커 수를 확인하는 데 필요하므로 함수에 전달됩니다. 예를 들면 :

    function multiChoice(clickedCluster) {
      if (clickedCluster.getMarkers().length > 1)
      {
        // var markers = clickedCluster.getMarkers();
        // do something creative!
        return false;
      }
      return true;
    };

1
감사합니다. 완벽하게 작동합니다! 귀하의 maxZoom문제는 maxZoom이 설정되어 있지 않거나 클러스터의 maxZoom이 맵의 확대 / 축소보다 큰 경우에만 문제라고 생각합니다. 하드 코딩 된 코드를이 스 니펫으로 대체했는데 잘 작동하는 것 같습니다.var maxZoom = mc.getMaxZoom(); if (null === maxZoom || maxZoom > mc.getMap().maxZoom) { maxZoom = mc.getMap().maxZoom; if (null === maxZoom) { maxZoom = 15; } }
Pascal

나는 이것이 정말 오래되었다는 것을 알고 있지만이 솔루션을 사용하려고합니다. 작동하고 있지만 클러스터 데이터가있는 정보창을 표시하는 경우 ... 처음에 클릭 한 클러스터의 마커 위치를 가져 와서 정보창을 표시하려면 어떻게해야합니까? markers는 데이터의 배열입니다 ...하지만 클러스터 아이콘 / 마커에 정보창을 어떻게 표시 할 수 있습니까?
user756659 2014 년

@ user756659 multiChoice에서 당신의 get 위도 / LNG를 통해 : clickedCluster.center_.lat()/clickedCluster.center_.lng()
옌스 콜

1
@Pascal과 약간의 난독 화로 결국 작동 할 수 있지만 Python의 tao가 말했듯이 이것으로 끝납니다. "가독성이 중요합니다". var maxZoom = Math.min (mc.getMaxZoom () || 15, mc.getMap (). maxZoom || 15);
Nande 2016.05.21

6

위의 답변은 더 우아하지만 실제로 정말 믿을 수 없을 정도로 잘 작동하는 빠르고 더러운 방법을 찾았습니다. www.buildinglit.com 에서 실제로 확인할 수 있습니다.

내가 한 것은 위도와 경도에 임의의 오프셋을 내 genxml.php 페이지에 추가하여지도가 마커로 생성 될 때마다 오프셋과 함께 매번 약간 다른 결과를 반환합니다. 이것은 해킹처럼 들리지만 실제로는 마커가 겹치는 경우지도에서 클릭 할 수 있도록 임의의 방향으로 약간 이동하려면 마커 만 필요합니다. 그것은 실제로 정말 잘 작동합니다. 누가 그 복잡성을 다루고 모든 곳에서 봄을 원하기 때문에 거미 방법보다 더 잘 말할 것입니다. 마커를 선택할 수 있기를 원합니다. 무작위로 Nudging 완벽하게 작동합니다.

다음은 내 php_genxml.php에서 while 문 반복 노드 생성의 예입니다.

while ($row = @mysql_fetch_assoc($result)){ $offset = rand(0,1000)/10000000;
$offset2 = rand(0, 1000)/10000000;
$node = $dom->createElement("marker");
$newnode = $parnode->appendChild($node);
$newnode->setAttribute("name", $row['name']);
$newnode->setAttribute("address", $row['address']);
$newnode->setAttribute("lat", $row['lat'] + $offset);
$newnode->setAttribute("lng", $row['lng'] + $offset2);
$newnode->setAttribute("distance", $row['distance']);
$newnode->setAttribute("type", $row['type']);
$newnode->setAttribute("date", $row['date']);
$newnode->setAttribute("service", $row['service']);
$newnode->setAttribute("cost", $row['cost']);
$newnode->setAttribute("company", $company);

위도 및 경도 아래에 + offset이 있습니다. 위의 두 변수에서. 나는 마커를 간신히 움직일 수있을 정도로 무작위로 작은 소수를 얻기 위해 random을 0,1000으로 10000000으로 나누어야했다. 필요에 더 정확한 변수를 얻으려면 해당 변수를 자유롭게 수정하십시오.


멋있는! 이것이 내가 매우 유용하다고하는 더러운 해킹, 구글지도 API 코드로 장난 할 필요가 없습니다
CuongDC

3

같은 건물에 여러 서비스가있는 상황에서는 실제 지점에서 반경 내에서 마커를 약간 (예 : .001도) 오프셋 할 수 있습니다. 이것은 또한 멋진 시각 효과를 생성합니다.


3

이것은 Matthew Fox가 제안한 것과 유사한 임시 방편의 '빠르고 더러운'솔루션에 가깝습니다. 이번에는 JavaScript를 사용합니다.

JavaScript에서는 예를 들어 작은 임의 오프셋을 추가하여 모든 위치의 위도와 경도를 오프셋 할 수 있습니다.

myLocation[i].Latitude+ = (Math.random() / 25000)

( 25000으로 나누면 충분한 분리가 제공되지만 마커가 정확한 위치 (예 : 특정 주소)에서 크게 이동하지 않음)

이것은 그것들을 서로 상쇄시키는 합리적으로 좋은 일을 만듭니다. 축소해도 위치에 대한 여러 옵션이 있다는 것이 여전히 명확하지 않습니다.


1
나는 이것을 좋아한다. 정확한 대표 마커가 필요하지 않은 경우 25000에서 250 또는 25로 낮추십시오. 간단하고 빠른 솔루션입니다.
Fid

2

V3 용 Marker Clusterer 를 확인하세요. 이 라이브러리는 주변 지점을 그룹 마커로 클러스터링 합니다. 클러스터를 클릭하면지도가 확대됩니다. 바로 확대했을 때 같은 지점의 마커에 대해 동일한 문제가 있다고 생각합니다.


네, 그 편리한 작은 라이브러리를 살펴 보았지만 여전히 문제를 극복하지 못하는 것 같습니다. 나는 때때로 동일한 사무실 블록에 둘 이상의 서비스를 가지고 있으므로 정확히 동일한 지리적 좌표를 갖는 회사의 서비스 로케이터를 만들고 있습니다. ... 나는 하나 개의 정보 창에서 다른 서비스를 표시 할 수 있지만 이것은 단지 가장 우아한 해결책이 될 것 같지 않습니다
Louzoid

@Louzoid Marker Clusterer는 방금 발견 한 문제를 극복하지 못합니다. 나는 같은 문제가 있는데, 한 건물 내에 여러 회사가 있으므로 하나의 마커 만 표시됩니다.
Rob

1

MarkerClustererPlus와 함께 작동하도록 업데이트되었습니다.

  google.maps.event.trigger(mc, "click", cClusterIcon.cluster_);
  google.maps.event.trigger(mc, "clusterclick", cClusterIcon.cluster_); // deprecated name

  // BEGIN MODIFICATION
  var zoom = mc.getMap().getZoom();
  // Trying to pull this dynamically made the more zoomed in clusters not render
  // when then kind of made this useless. -NNC @ BNB
  // var maxZoom = mc.getMaxZoom();
  var maxZoom = 15;
  // if we have reached the maxZoom and there is more than 1 marker in this cluster
  // use our onClick method to popup a list of options
  if (zoom >= maxZoom && cClusterIcon.cluster_.markers_.length > 1) {
    var markers = cClusterIcon.cluster_.markers_;
    var a = 360.0 / markers.length;
    for (var i=0; i < markers.length; i++)
    {
        var pos = markers[i].getPosition();
        var newLat = pos.lat() + -.00004 * Math.cos((+a*i) / 180 * Math.PI);  // x
        var newLng = pos.lng() + -.00004 * Math.sin((+a*i) / 180 * Math.PI);  // Y
        var finalLatLng = new google.maps.LatLng(newLat,newLng);
        markers[i].setPosition(finalLatLng);
        markers[i].setMap(cClusterIcon.cluster_.map_);
    }
    cClusterIcon.hide();
    return ;
  }
  // END MODIFICATION

이 접근 방식을 사용하려면 사용자가 클러스터 아이콘을 클릭해야하며 확대 / 축소 슬라이더 또는 마우스 스크롤로 탐색이 수행되는 사용 사례는 다루지 않습니다. 이러한 문제를 해결하는 방법에 대한 아이디어가 있습니까?
Remi Sture

1

나는 간단한 해결책을 좋아하므로 여기에 내 것이 있습니다. lib를 수정하는 대신 관리하기가 더 어려워집니다. 이렇게 이벤트를 간단히 볼 수 있습니다

google.maps.event.addListener(mc, "clusterclick", onClusterClick);

그런 다음 관리 할 수 ​​있습니다.

function onClusterClick(cluster){
    var ms = cluster.getMarkers();

즉, 목록이있는 패널을 표시하기 위해 부트 스트랩을 사용했습니다. 나는 "붐비는"장소에서 스파이더하는 것보다 훨씬 더 편하고 유용하다고 생각한다. (클러스터를 사용하는 경우 스파이더 화하면 충돌이 발생할 가능성이 있습니다). 거기에서도 줌을 확인할 수 있습니다.

btw. 방금 전단지를 찾았고 훨씬 더 잘 작동하는 것 같습니다. 클러스터와 spiderfy는 http://leaflet.github.io/Leaflet.markercluster/example/marker-clustering-realworld.10000.html 매우 유동적으로 작동하며 오픈 소스입니다.



0

위에 주어진 답변을 확장하여지도 객체를 초기화 할 때 maxZoom 옵션을 설정했는지 확인하십시오.


0

오프셋을 제공하면 사용자가 최대로 확대 할 때 마커가 멀어집니다. 그래서 나는 그것을 달성하는 방법을 찾았습니다. 이것은 적절한 방법은 아니지만 매우 잘 작동했습니다.

// This code is in swift
for loop markers
{
//create marker
let mapMarker = GMSMarker()
mapMarker.groundAnchor = CGPosition(0.5, 0.5)
mapMarker.position = //set the CLLocation
//instead of setting marker.icon set the iconView
let image:UIIMage = UIIMage:init(named:"filename")
let imageView:UIImageView = UIImageView.init(frame:rect(0,0, ((image.width/2 * markerIndex) + image.width), image.height))
imageView.contentMode = .Right
imageView.image = image
mapMarker.iconView = imageView
mapMarker.map = mapView
}

마커의 zIndex를 설정하여 상단에 표시하려는 마커 아이콘이 표시되도록합니다. 그렇지 않으면 자동 스와핑과 같은 마커에 애니메이션이 적용됩니다. 사용자가 마커를 탭하면 zIndex를 처리하여 zIndex Swap을 사용하여 마커를 맨 위로 가져옵니다.


0

그것으로부터 벗어나는 방법 .. [Swift]

    var clusterArray = [String]()
    var pinOffSet : Double = 0
    var pinLat = yourLat
    var pinLong = yourLong
    var location = pinLat + pinLong

새 마커를 만들려고합니까? clusterArray오프셋 확인 및 조작

 if(!clusterArray.contains(location)){
        clusterArray.append(location)
    } else {

        pinOffSet += 1
        let offWithIt = 0.00025 // reasonable offset with zoomLvl(14-16)
        switch pinOffSet {
        case 1 : pinLong = pinLong + offWithIt ; pinLat = pinLat + offWithIt
        case 2 : pinLong = pinLong + offWithIt ; pinLat = pinLat - offWithIt
        case 3 : pinLong = pinLong - offWithIt ; pinLat = pinLat - offWithIt
        case 4 : pinLong = pinLong - offWithIt ; pinLat = pinLat + offWithIt
        default : print(1)
        }


    }

결과

여기에 이미지 설명 입력


0

Matthew Fox의 교활한 천재 답변에 추가하여 마커 개체를 설정할 때 각 lat 및 lng에 작은 임의 오프셋을 추가했습니다. 예를 들면 :

new LatLng(getLat()+getMarkerOffset(), getLng()+getMarkerOffset()),

private static double getMarkerOffset(){
    //add tiny random offset to keep markers from dropping on top of themselves
    double offset =Math.random()/4000;
    boolean isEven = ((int)(offset *400000)) %2 ==0;
    if (isEven) return  offset;
    else        return -offset;
}

-2

위의 답변을 확장하면 더하거나 빼지 않은 위치 (예 : "37.12340-0.00069")가 아닌 결합 된 문자열이있을 때 parseFloat ()를 사용하여 원래 위도 / 경도를 부동으로 변환 한 다음 수정을 더하거나 빼십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.