Google Maps API v3 : 모든 마커를 제거하는 방법? 표시를 제거하려면 간단히 다음을

Google Maps API v2에서 모든지도 표시를 제거하려면 간단히 다음을 수행 할 수 있습니다.

map.clearOverlays();

Google Maps API v3 에서 어떻게해야 합니까?

상기 찾고 참조 API , 그것은 나에게 불분명하다.



답변

간단히 다음을 수행하십시오.

I. 전역 변수를 선언하십시오.

var markersArray = [];

II. 함수를 정의하십시오.

function clearOverlays() {
  for (var i = 0; i < markersArray.length; i++ ) {
    markersArray[i].setMap(null);
  }
  markersArray.length = 0;
}

또는

google.maps.Map.prototype.clearOverlays = function() {
  for (var i = 0; i < markersArray.length; i++ ) {
    markersArray[i].setMap(null);
  }
  markersArray.length = 0;
}

III. 다음을 호출하기 전에 ‘markerArray’에서 마커를 푸시하십시오.

markersArray.push(marker);
google.maps.event.addListener(marker,"click",function(){});

IV. 필요한 경우 clearOverlays();또는 map.clearOverlays();기능을 호출하십시오 .

그게 다야 !!


답변

같은 문제입니다. 이 코드는 더 이상 작동하지 않습니다.

수정했습니다 .clearMarkers 메소드를 다음과 같이 변경하십시오.

set_map (null) —> setMap (null)

google.maps.Map.prototype.clearMarkers = function() {
    for(var i=0; i < this.markers.length; i++){
        this.markers[i].setMap(null);
    }
    this.markers = new Array();
};

https://developers.google.com/maps/documentation/javascript/markers#remove 주제에 대한 세부 사항을 포함하도록 설명서가 업데이트되었습니다.


답변

V3에는 아직 그러한 기능이없는 것 같습니다.

사람들은지도에있는 모든 마커를 배열로 유지하는 것이 좋습니다. 그런 다음 em을 모두 삭제하려면 배열을 루프하여 각 참조에서 .setMap (null) 메서드를 호출하십시오.

자세한 정보 / 코드는이 질문을 참조하십시오.

내 버전 :

google.maps.Map.prototype.markers = new Array();

google.maps.Map.prototype.getMarkers = function() {
    return this.markers
};

google.maps.Map.prototype.clearMarkers = function() {
    for(var i=0; i<this.markers.length; i++){
        this.markers[i].setMap(null);
    }
    this.markers = new Array();
};

google.maps.Marker.prototype._setMap = google.maps.Marker.prototype.setMap;

google.maps.Marker.prototype.setMap = function(map) {
    if (map) {
        map.markers[map.markers.length] = this;
    }
    this._setMap(map);
}

코드는이 코드의 편집 된 버전입니다. http://www.lootogo.com/googlemapsapi3/markerPlugin.html addMarker를 수동으로 호출 할 필요가 없습니다.

찬성

  • 이 방법을 사용하면 코드를 간결하고 한 곳에 보관할 수 있습니다 (네임 스페이스를 오염시키지 않음).
  • 더 이상 마커를 직접 추적 할 필요는 없습니다. map.getMarkers ()를 호출하여지도에서 항상 모든 마커를 찾을 수 있습니다.

단점

  • 내가했던 것처럼 프로토 타입과 래퍼를 사용하면 코드가 Google 코드에 의존하게됩니다. 소스에서 시장을 변경하면 중단됩니다.
  • 당신이 그것을 이해하지 못하면 깨지면 고칠 수 없습니다. 그들이 이것을 깨뜨릴 수있는 것을 바꿀 가능성은 낮지 만 여전히 ..
  • 하나의 마커를 수동으로 제거해도 참조는 여전히 마커 배열에 있습니다. (setMap 메소드를 수정하여 수정할 수는 있지만 여물통 마커 배열을 루핑하고 참조를 제거하는 비용)

답변

이것은 원래 질문에 대한 원래의 응답으로 YingYang Mar 11 ’14에 15 : 049 에 게시 한 모든 솔루션 중 가장 간단 했습니다.

2.5 년 후 Google지도 v3.18과 동일한 솔루션을 사용하고 있으며 매력처럼 작동합니다.

markersArray.push(newMarker) ;
while(markersArray.length) { markersArray.pop().setMap(null); }

// No need to clear the array after that.


답변

google.maps.Map.prototype.markers = new Array();

google.maps.Map.prototype.addMarker = function(marker) {
    this.markers[this.markers.length] = marker;
};

google.maps.Map.prototype.getMarkers = function() {
    return this.markers
};

google.maps.Map.prototype.clearMarkers = function() {
    for(var i=0; i<this.markers.length; i++){
        this.markers[i].setMap(null);
    }
    this.markers = new Array();
};

V3에 하나가 없다고 생각하므로 위의 사용자 정의 구현을 사용했습니다.

면책 조항 : 나는이 코드를 작성하지 않았지만 코드베이스에 병합 할 때 참조를 유지하는 것을 잊어 버렸습니다.


답변

새 버전 v3에서는 배열을 유지하는 것이 좋습니다. 다음과 같이.

오버레이 개요의 샘플을 참조하십시오 .

var map;
var markersArray = [];

function initialize() {
  var haightAshbury = new google.maps.LatLng(37.7699298, -122.4469157);
  var mapOptions = {
    zoom: 12,
    center: haightAshbury,
    mapTypeId: google.maps.MapTypeId.TERRAIN
  };
  map =  new google.maps.Map(document.getElementById("map_canvas"), mapOptions);

  google.maps.event.addListener(map, 'click', function(event) {
    addMarker(event.latLng);
  });
}

function addMarker(location) {
  marker = new google.maps.Marker({
    position: location,
    map: map
  });
  markersArray.push(marker);
}

// Removes the overlays from the map, but keeps them in the array
function clearOverlays() {
  if (markersArray) {
    for (i in markersArray) {
      markersArray[i].setMap(null);
    }
  }
}

// Shows any overlays currently in the array
function showOverlays() {
  if (markersArray) {
    for (i in markersArray) {
      markersArray[i].setMap(map);
    }
  }
}

// Deletes all markers in the array by removing references to them
function deleteOverlays() {
  if (markersArray) {
    for (i in markersArray) {
      markersArray[i].setMap(null);
    }
    markersArray.length = 0;
  }
}


답변

Google의 데모 갤러리에는 다음과 같은 방법으로 데모가 있습니다.

http://code.google.com/apis/maps/documentation/javascript/examples/overlay-remove.html

소스 코드를보고 마커를 추가하는 방법을 볼 수 있습니다.

간단히 말해서 마커를 전역 배열로 유지합니다. 그것들을 지우거나 삭제할 때, 그들은 배열을 반복하고 주어진 마커 객체에서 “.setMap (null)”을 호출합니다.

그러나이 예는 하나의 ‘트릭’을 보여줍니다. 이 예에서 “지우기”는지도에서 해당 항목을 제거하고 배열에 유지하여 애플리케이션이 신속하게지도에 다시 추가 할 수 있도록합니다. 어떤 의미에서 이것은 “숨김”처럼 작동합니다.

“삭제”도 배열을 지 웁니다.