Google Maps API v3: Làm cách nào để xóa tất cả các điểm đánh dấu?


429

Trong Google Maps API v2, nếu tôi muốn xóa tất cả các điểm đánh dấu trên bản đồ, tôi chỉ có thể thực hiện:

map.clearOverlays();

Làm cách nào để làm điều này trong Google Maps API v3 ?

Nhìn vào API tham chiếu , tôi không rõ lắm.


3
Tôi đã tìm thấy một số mã ở liên kết bên dưới, nhưng con bò thần thánh - đó là rất nhiều mã để mô phỏng 1 dòng mã trước đó trong v2 của API. lo photoo.com/googlemapsapi3/markerPlugin.html
mp_

2
hãy nhớ rằng bản đồ 3.0 có nghĩa là RẤT ánh sáng để các thiết bị di động sử dụng nó với độ trễ càng ít càng tốt ...
Petrogad

1
Các giải pháp được đề xuất ở đây dường như bị phá vỡ kể từ 2010/07/29. Tôi muốn tôi có một phiên bản làm việc để đề nghị thay thế.
Jonathan Hanson

9
Câu trả lời được đánh giá cao nhất là sai. Xem nguồn trên ví dụ này để xem cách thực hiện: google-developers.appspot.com/maps/documentation/javascript/iêu
Seb Ashton

Vui lòng xem trang này gmaps
Junaid

Câu trả lời:


487

Đơn giản chỉ cần làm như sau:

I. Khai báo một biến toàn cục:

var markersArray = [];

II. Xác định hàm:

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

HOẶC LÀ

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

III. Điểm đánh dấu trong 'MarkerArray' trước khi gọi như sau:

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

IV. Gọi clearOverlays();hoặc map.clearOverlays();chức năng bất cứ nơi nào cần thiết.

Đó là nó!!


32
cho..trong vòng lặp với một mảng? Điều này không thể tốt được chắc chắn ..? ..see: stackoverflow.com/questions/500504/
Mạnh

4
Ngoài ra, bạn có thể ẩn các điểm đánh dấu bằng cách sử dụng Marker.setVisible (false)
NBK

12
Các điểm đánh dấu vẫn được giữ trong mảng mặc dù vậy nó sẽ ngày càng lớn hơn. Cũng đề nghị xóa mảng sau vòng lặp
Ami

5
bạn luôn có thể đặt markersArraythành một mảng trống thay vì đặt độ dài của nó, điều mà tôi thấy kỳ lạ:markersArray = [];
hellatan

11
Tôi sẽ sử dụng một whilecách tiếp cận để xử lý mảng : while(markersArray.length) { markersArray.pop().setMap(null); }. Không cần phải xóa mảng sau đó.
YingYang

84

Vấn đề tương tự. Mã này không hoạt động nữa.

Tôi đã sửa nó, thay đổi phương thức ClearMarkers theo cách này:

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();
};

Tài liệu đã được cập nhật để bao gồm các chi tiết về chủ đề: https://developers.google.com/maps/documentation/javascript/markers#remove


1
Cách cuối cùng tôi đã làm cho nó hoạt động là lặp đi lặp lại qua bộ sưu tập đánh dấu nơi tôi đã lưu trữ chúng và sử dụng setMap (null)
Sebastian

4
Nhưng điều này có xóa các điểm đánh dấu từ bộ nhớ? Tôi nhận thấy JavaScript có bộ sưu tập rác tự động, nhưng làm cách nào để biết API của Google không giữ tham chiếu đến điểm đánh dấu khi setMap (null) được gọi? Trong ứng dụng của mình, tôi thêm và "xóa" một tấn các điểm đánh dấu và tôi sẽ ghét tất cả những điểm đánh dấu "đã xóa" đó để chiếm lấy bộ nhớ.
Nick

@Nick: thêm 'xóa this.markers [i];' sau bit setMap (null).
DaveS

4
Câu hỏi này được trả lời trong tài liệu bây giờ. code.google.com/apis/maps/documentation/javascript/ từ
lashleigh

1
Ai thậm chí sử dụng new Array();?
Rihards

47

Có vẻ như chưa có chức năng nào như vậy trong V3.

Mọi người đề nghị giữ các tham chiếu đến tất cả các điểm đánh dấu bạn có trên bản đồ trong một mảng. Và sau đó khi bạn muốn xóa tất cả em, chỉ cần lặp qua máng và gọi phương thức .setMap (null) trên mỗi tham chiếu.

Xem câu hỏi này để biết thêm thông tin / mã.

Phiên bản của tôi:

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);
}

Mã được chỉnh sửa phiên bản của mã này http: //www.lo photoo.com/googlemapsapi3/markerPlugin.html Tôi đã loại bỏ nhu cầu gọi addMarker theo cách thủ công.

Ưu

  • Làm theo cách này bạn giữ mã nhỏ gọn và ở một nơi (không gây ô nhiễm không gian tên).
  • Bạn không phải tự mình theo dõi các điểm đánh dấu nữa, bạn luôn có thể tìm thấy tất cả các điểm đánh dấu trên bản đồ bằng cách gọi map.getMarkers ()

Nhược điểm

  • Việc sử dụng các nguyên mẫu và trình bao bọc như tôi đã làm bây giờ làm cho mã của tôi phụ thuộc vào mã Google, nếu chúng làm thay đổi thị trưởng trong nguồn của chúng, điều này sẽ bị hỏng.
  • Nếu bạn không hiểu thì bạn sẽ không thể sửa nó nếu bị hỏng. Cơ hội thấp là họ sẽ thay đổi bất cứ điều gì sẽ phá vỡ điều này, nhưng vẫn ..
  • Nếu bạn xóa một điểm đánh dấu bằng tay, tham chiếu của nó sẽ vẫn nằm trong mảng đánh dấu. (Bạn có thể chỉnh sửa phương thức setMap của tôi để sửa nó, nhưng với chi phí lặp lại mảng đánh dấu máng và xóa tham chiếu)

1
+1 từ tôi. Nhưng câu trả lời của bạn sẽ tốt hơn nếu bạn bao gồm trình bao bọc để gọi addMarker tự động!
Andrew

Tôi giả sử bạn đang đề cập đến câu trả lời của Andrew thực sự. Bạn sẽ hiển thị với mã những gì bạn làm khác nhau và tại sao. Cảm ơn
mp_

Meh xin lỗi vì sự chậm trễ, tôi đã giữ lại từ việc đăng mã vì tôi không có cách nào để nhanh chóng kiểm tra nó.
Maiku Mori

Cảm ơn Maiku. Mặc dù vậy, tôi không hiểu - làm cách nào để thêm một điểm đánh dấu mới trong ví dụ của bạn. Một lần nữa, cảm ơn nhiều!
mp_

1
Tôi đã thử sử dụng setMap (null), nhưng tôi có một tập lệnh cập nhật tự động và mỗi lần tôi đặt tất cả 50 điểm đánh dấu của mình thành bản đồ null, tôi vẫn có một loạt các điểm đánh dấu không có bản đồ trôi nổi trong DOM ở đâu đó. Điều này tiếp tục khiến trang bị sập vì cứ sau 30 giây, nó lại thêm 50 điểm đánh dấu mới vào DOM và điều này lan truyền vô tận vì trang vẫn mở 24/7 trên tường video. Tôi đã phải sử dụng câu trả lời hàng đầu và xóa hoàn toàn tất cả các lớp phủ bản đồ khỏi DOM trước khi tạo mới. Hy vọng điều này sẽ giúp được ai đó; phải mất một thời gian dài để tôi tìm ra lý do tại sao trang của tôi bị sập! :(
InterfaceGuy

23

Đây là cách đơn giản nhất trong tất cả các giải pháp ban đầu được YingYang đăng ngày 11 tháng 3 năm 14 lúc 15: 049 theo câu trả lời ban đầu cho câu hỏi ban đầu của người dùng

Tôi đang sử dụng giải pháp tương tự của mình 2,5 năm sau với google maps v3.18 và nó hoạt động như một cơ duyên

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

// No need to clear the array after that.

21
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();
};

Tôi không nghĩ có một cái trong V3 nên tôi đã sử dụng triển khai tùy chỉnh ở trên.

Tuyên bố miễn trừ trách nhiệm: Tôi đã không viết mã này nhưng tôi đã quên giữ lại một tài liệu tham khảo khi tôi hợp nhất nó vào cơ sở mã của mình để tôi không biết nó đến từ đâu.


+1 từ tôi. Tôi sẽ thêm một trình bao bọc xung quanh google.maps.Marker constructor (hoặc phương thức setMap vì tôi nghĩ rằng hàm tạo gọi nó bên trong) sẽ tự động gọi addMarker, nhưng vẫn trả lời hay :).
Maiku Mori

@Maiku Mari, bạn sẽ hiển thị với mã những gì bạn làm khác nhau và tại sao. Cảm ơn
mp_

Làm thế nào đây không phải là giải pháp? Bạn xóa các điểm đánh dấu bằng cách sử dụng set_map (null) trên điểm đánh dấu cụ thể mà bạn muốn xóa, nếu bạn muốn xóa tất cả thì hãy lặp lại bằng cách sử dụng chức năng này. Nếu bạn muốn một cái gì đó yêu cầu nhiều hơn ở đây: code.google.com/p/gmaps-api-issues/issues/iêu
Petrogad

Tôi tin rằng nó đến từ đây lo photoo.com/googlemapsapi3/markerPlugin.html
Maiku Mori

6
-1 Phong cách xấu. Chỉ có một mảng đánh dấu được tạo, nhưng một mảng trên mỗi bản đồ sau ClearMarkers (nguyên nhân của sự khác biệt get / set với các nguyên mẫu). Lỗi khó chịu với nhiều đối tượng bản đồ.
Tomas

18

Trên phiên bản mới v3, Họ khuyên nên giữ trong mảng. như sau.

Xem mẫu tại tổng quan về lớp phủ .

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;
  }
}

6

Thư viện Demo của Google có bản demo về cách họ thực hiện:

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

Bạn có thể xem mã nguồn để xem cách họ thêm các điểm đánh dấu.

Câu chuyện dài, họ giữ các điểm đánh dấu trong một mảng toàn cầu. Khi xóa / xóa chúng, chúng lặp qua mảng và gọi ".setMap (null)" trên đối tượng đánh dấu đã cho.

Tuy nhiên, ví dụ này cho thấy một 'mẹo'. "Xóa" cho ví dụ này có nghĩa là xóa chúng khỏi bản đồ nhưng giữ chúng trong mảng, cho phép ứng dụng nhanh chóng thêm lại chúng vào bản đồ. Theo một nghĩa nào đó, hành động này giống như "che giấu" chúng.

"Xóa" cũng xóa mảng.


6
for (i in markersArray) {
  markersArray[i].setMap(null);
}

chỉ hoạt động trên IE.


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

làm việc trên chrome, firefox, tức là ...


1
Vui lòng đọc trợ giúp về định dạng mã trên SO
freefaller

6

Giải pháp khá dễ dàng. Bạn có thể sử dụng phương pháp : marker.setMap(map);. Ở đây, bạn xác định trên bản đồ mà pin sẽ xuất hiện.

Vì vậy, nếu bạn đặt nulltrong phương thức này ( marker.setMap(null);), pin sẽ biến mất.


Bây giờ, bạn có thể viết một phù thủy chức năng trong khi làm biến mất tất cả các điểm đánh dấu trong bản đồ của bạn.

Bạn chỉ cần thêm để đặt các chân của bạn vào một mảng và khai báo chúng bằng markers.push (your_new pin)hoặc mã này chẳng hạn:

// Adds a marker to the map and push to the array.
function addMarker(location) {
  var marker = new google.maps.Marker({
    position: location,
    map: map
  });
  markers.push(marker);
}

Đây là một phù thủy chức năng có thể thiết lập hoặc biến mất tất cả các điểm đánh dấu của mảng của bạn trong bản đồ:

// Sets the map on all markers in the array.
  function setMapOnAll(map) {
    for (var i = 0; i < markers.length; i++) {
      markers[i].setMap(map);
    }
  }

Để biến mất tất cả các điểm đánh dấu của bạn, bạn nên gọi hàm với null:

// Removes the markers from the map, but keeps them in the array.
  function clearMarkers() {
    setMapOnAll(null);
  }

Và, để xóa và biến mất, tất cả các điểm đánh dấu của bạn, bạn nên đặt lại mảng các điểm đánh dấu như thế này:

// Deletes all markers in the array by removing references to them.
  function deleteMarkers() {
    clearMarkers();
    markers = [];
  }

Đây là mã hoàn chỉnh của tôi. Đó là cách đơn giản nhất tôi có thể giảm xuống. Hãy cẩn thận, bạn có thể thay thế YOUR_API_KEYmã bằng API chính của Google:

<!DOCTYPE html>
<html>
  <head>
  <title>Remove Markers</title>
  <style>
     /* Always set the map height explicitly to define the size of the div
     * element that contains the map. */
     #map {
       height: 100%;
       }
  </style>
</head>
<body>

<div id="map"></div>
<p>Click on the map to add markers.</p>
<script>

  // In the following example, markers appear when the user clicks on the map.
  // The markers are stored in an array.
  // The user can then click an option to hide, show or delete the markers.
  var map;
  var markers = [];

  function initMap() {
    var haightAshbury = {lat: 37.769, lng: -122.446};

    map = new google.maps.Map(document.getElementById('map'), {
      zoom: 12,
      center: haightAshbury,
      mapTypeId: 'terrain'
    });

    // This event listener will call addMarker() when the map is clicked.
    map.addListener('click', function(event) {
      addMarker(event.latLng);
    });

    // Adds a marker at the center of the map.
    addMarker(haightAshbury);
  }

   // Adds a marker to the map and push to the array.
  function addMarker(location) {
    var marker = new google.maps.Marker({
      position: location,
      map: map
    });
    markers.push(marker);
  }

  // Sets the map on all markers in the array.
  function setMapOnAll(map) {
    for (var i = 0; i < markers.length; i++) {
      markers[i].setMap(map);
    }
  }

  // Removes the markers from the map, but keeps them in the array.
  function clearMarkers() {
    setMapOnAll(null);
  }

  // Shows any markers currently in the array.
  function showMarkers() {
    setMapOnAll(map);
  }

  // Deletes all markers in the array by removing references to them.
  function deleteMarkers() {
    clearMarkers();
    markers = [];
  }

</script>
   <script async defer
    src="https://maps.googleapis.com/maps/api/js key=YOUR_API_KEY&callback=initMap">
   </script>
</body>
</html>

Bạn có thể tham khảo nhà phát triển google hoặc tài liệu đầy đủ về trang web của nhà phát triển google .


5

Một ứng dụng sạch sẽ và dễ dàng của câu trả lời của rolinger.

function placeMarkerAndPanTo(latLng, map) {
      while(markersArray.length) { markersArray.pop().setMap(null); }
      var marker = new google.maps.Marker({
        position: latLng,
        map: map
      });
      map.panTo(latLng);

      markersArray.push(marker) ;
    }


4

Tại đây bạn có thể tìm thấy một ví dụ về cách xóa điểm đánh dấu:

https://developers.google.com/maps/documentation/javascript/examples/marker-remove?hl=es

// Add a marker to the map and push to the array.
function addMarker(location) {
  var marker = new google.maps.Marker({
    position: location,
    map: map
  });
  markers.push(marker);
}

// Sets the map on all markers in the array.
function setAllMap(map) {
  for (var i = 0; i < markers.length; i++) {
    markers[i].setMap(map);
   }
}

// Removes the markers from the map, but keeps them in the array.
function clearMarkers() {
  setAllMap(null);
}

// Deletes all markers in the array by removing references to them.
function deleteMarkers() {
  clearMarkers();
  markers = [];
}

3

Sau đây từ Anon hoạt động hoàn hảo, mặc dù với nhấp nháy khi liên tục xóa lớp phủ.

Đơn giản chỉ cần làm như sau:

I. Khai báo một biến toàn cục:

var markersArray = [];

II. Xác định hàm:

function clearOverlays() {
  if (markersArray) {
    for (i in markersArray) {
      markersArray[i].setMap(null);
    }
  }
}

III. Điểm đánh dấu trong 'MarkerArray' trước khi gọi như sau:

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

IV. Gọi clearOverlays()chức năng bất cứ nơi nào cần thiết.

Đó là nó!!

Hy vọng rằng sẽ giúp bạn.


1
for(in in markersArray){}có lẽ không làm những gì bạn mong đợi nó làm. Nếu Arrayđược mở rộng ở bất kỳ nơi nào khác trong mã, nó cũng sẽ lặp lại các thuộc tính đó, và không chỉ các chỉ mục. Phiên bản javascript markersArray.forEach()không được hỗ trợ ở mọi nơi. Bạn sẽ tốt hơn vớifor(var i=0; i<markersArray.length; ++i){ markersArray.setMap(null); }
Kit Sunde

3

Tôi tìm thấy bằng cách sử dụng thư viện markermanager trong dự án google-maps-Utility-library-v3 là cách dễ nhất.

1. Thiết lập MarkerManager

mgr = new MarkerManager(map);
google.maps.event.addListener(mgr, 'loaded', function () {
    loadMarkers();
});

2. Thêm điểm đánh dấu vào MarkerManager

function loadMarkers() {
  var marker = new google.maps.Marker({
            title: title,
            position: latlng,
            icon: icon
   });
   mgr.addMarker(marker);
   mgr.refresh();
 }

3. Để xóa điểm đánh dấu, bạn chỉ cần gọi clearMarkers()chức năng của MarkerManger

mgr.clearMarkers();

Có vẻ như khá nhiều quá mức cần thiết để kéo thư viện đó vào để xóa các điểm đánh dấu. Tất cả clearMarkerslàm là lặp đi lặp lại qua các điểm đánh dấu marker.setMap(null)(tôi đã kiểm tra nguồn). Nó sẽ ít làm việc hơn khi đặt chúng trong một mảng và tự làm nó.
Kit Sunde

3

Bạn cũng có thể làm theo cách này:

function clearMarkers(category){ 
  var i;       

  for (i = 0; i < markers.length; i++) {                          
    markers[i].setVisible(false);        
  }    
}

2

Tôi vừa thử điều này với kmlLayer.setMap (null) và nó đã hoạt động. Không chắc chắn nếu điều đó sẽ làm việc với các đánh dấu thông thường nhưng dường như hoạt động chính xác.


2

Để xóa tất cả các lớp phủ bao gồm polys, đánh dấu, v.v ...

chỉ cần sử dụng:

map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);}

Đây là một chức năng mà tôi đã viết để thực hiện nó trên ứng dụng bản đồ:

  function clear_Map() {
    directionsDisplay = new google.maps.DirectionsRenderer();
    //var chicago = new google.maps.LatLng(41.850033, -87.6500523);
    var myOptions = {
        zoom: 8,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        center: HamptonRoads
    }

    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    directionsDisplay.setMap(map);
    directionsDisplay.setPanel(document.getElementById("directionsPanel"));
}

Điều này cũng sẽ thiết lập lại bản đồ? giả sử nếu người dùng đã kéo bản đồ đến một khu vực mới?
Kichu

2

Để xóa tất cả các điểm đánh dấu khỏi bản đồ, hãy tạo các chức năng như thế này:

1.addMarker (vị trí): chức năng này được sử dụng để thêm điểm đánh dấu trên bản đồ

2.clearMarkers (): chức năng này xóa tất cả các điểm đánh dấu khỏi bản đồ, không phải từ mảng

3.setMapOnAll (map): chức năng này được sử dụng để thêm thông tin đánh dấu trong mảng

4.deleteMarkers (): hàm này Xóa tất cả các điểm đánh dấu trong mảng bằng cách xóa tham chiếu đến chúng.

// Adds a marker to the map and push to the array.
      function addMarker(location) {
        var marker = new google.maps.Marker({
          position: location,
          map: map
        });
        markers.push(marker);
      }


// Sets the map on all markers in the array.
      function setMapOnAll(map) {
        for (var i = 0; i < markers.length; i++) {
          markers[i].setMap(map);
        }
      }



// Removes the markers from the map, but keeps them in the array.
  function clearMarkers() {
    setMapOnAll(null);
  }

// Deletes all markers in the array by removing references to them.
      function deleteMarkers() {
        clearMarkers();
        markers = [];
      }

2

Cách sạch nhất để làm điều này là lặp đi lặp lại tất cả các tính năng của bản đồ. Các điểm đánh dấu (cùng với đa giác, polylines, ect.) Được lưu trữ trong lớp dữ liệu của bản đồ.

function removeAllMarkers() {
  map.data.forEach((feature) => {
    feature.getGeometry().getType() === 'Point' ? map.data.remove(feature) : null
  });
}

Trong trường hợp các điểm đánh dấu được thêm vào thông qua trình quản lý bản vẽ , tốt nhất là tạo một mảng đánh dấu toàn cầu hoặc đẩy các điểm đánh dấu vào lớp dữ liệu khi tạo như vậy:

google.maps.event.addListener(drawingManager, 'overlaycomplete', (e) => {
    var newShape = e.overlay;
    newShape.type = e.type;

    if (newShape.type === 'marker') {
      var pos = newShape.getPosition()
      map.data.add({ geometry: new google.maps.Data.Point(pos) });

      // remove from drawing layer
      newShape.setMap(null);
    }
  });

Tôi khuyên bạn nên tiếp cận thứ hai vì nó cho phép bạn sử dụng các phương thức lớp google.maps.data khác sau này.



0

Tôi không biết tại sao, nhưng, cài đặt setMap(null)cho các điểm đánh dấu của tôi không hoạt động với tôi khi tôi đang sử dụng DirectionsRenderer.

Trong trường hợp của tôi, tôi đã phải gọi setMap(null)cho tôi DirectionsRendererlà tốt.

Một cái gì đó như thế:

var directionsService = new google.maps.DirectionsService();
var directionsDisplay = new google.maps.DirectionsRenderer();

if (map.directionsDisplay) {
    map.directionsDisplay.setMap(null);
}

map.directionsDisplay = directionsDisplay;

var request = {
    origin: start,
    destination: end,
    travelMode: google.maps.TravelMode.DRIVING
};

directionsDisplay.setMap(map);
directionsService.route(request, function (result, status) {
    if (status == google.maps.DirectionsStatus.OK) {
        directionsDisplay.setDirections(result);
    }
});

0

Chỉ cần đi bộ qua các điểm đánh dấu và xóa chúng khỏi bản đồ, mảng đánh dấu bản đồ trống sau đó:

var markers = map.markers;
for(var i = 0; i < markers.length; i++) {
    markers[i].setMap(null);
}
map.markers = [];


0

Tôi đã thử tất cả các giải pháp được đề xuất, nhưng không có gì hiệu quả với tôi trong khi tất cả các điểm đánh dấu của tôi nằm dưới một cụm. Cuối cùng, tôi chỉ cần đặt cái này:

var markerCluster = new MarkerClusterer(map, markers,
    { imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m' });
agentsGpsData[agentGpsData.ID].CLUSTER = markerCluster;

//this did the trick
agentsGpsData[agentId].CLUSTER.clearMarkers();

Nói cách khác, nếu bạn bọc các điểm đánh dấu trong một cụm và muốn xóa tất cả các điểm đánh dấu, bạn gọi:

clearMarkers();

-1

Bạn có nghĩa là loại bỏ như trong việc ẩn chúng hoặc xóa chúng?

nếu ẩn:

function clearMarkers() {
            setAllMap(null);
        }

nếu bạn muốn xóa chúng:

 function deleteMarkers() {
            clearMarkers();
            markers = [];
        }

lưu ý rằng tôi sử dụng một dấu mảng để theo dõi chúng và đặt lại thủ công.


-1

Bạn cần đặt bản đồ null cho điểm đánh dấu đó.

var markersList = [];    

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

function addMarkers() {
   var marker = new google.maps.Marker({
        position : {
            lat : 12.374,
            lng : -11.55
        },
        map : map
       });
      markersList.push(marker);
   }

-1

Tôi tìm thấy giải pháp đơn giản (tôi nghĩ):

var marker = new google.maps.Marker();

function Clear(){
     marker.setMap(null);
}

-1

Tôi sử dụng một tốc ký mà làm công việc tốt. Cứ làm đi

    map.clear();


-3

Tôi biết rằng đây có thể là một giải pháp đơn giản, nhưng đây là những gì tôi làm

$("#map_canvas").html("");
markers = [];

Làm việc mọi lúc cho tôi.


2
$ ("# map_canvas"). html (""); trên thực tế sẽ xóa sạch toàn bộ div bản đồ và cũng dựa vào jQuery để phản hồi của bạn vừa ngu ngốc vừa không có ích.
Sam

Vâng, đó là chính xác. Khởi tạo bản đồ và các điểm đánh dấu
kronus 4/12/2015

Nhưng anh ta không muốn xác định lại bản đồ mà anh ta muốn xóa các điểm đánh dấu hiện có ....
Sam

Tôi chỉ cung cấp cách mà tôi đã tìm thấy để loại bỏ các điểm đánh dấu hiện có. Ít nhất là cho nó một shot và cho tôi biết nếu nó hoạt động hay không. Nó hoạt động với tôi
kronus 7/12/2015

2
Toàn bộ mục đích muốn xóa các điểm đánh dấu trên bản đồ là để tránh phải xác định lại bản đồ, các tình huống như của tôi có nghĩa là vì tôi đang sử dụng thư viện vẽ của Google để vẽ trên bản đồ nếu tôi xóa nó và sắp xếp lại toàn bộ bản đồ tất cả các lớp tôi đã vẽ biến mất cách duy nhất để ngăn chặn điều đó là lưu trữ tất cả các lớp phủ và thêm lại chúng cũng là rất nhiều công việc không cần thiết. Tái khởi động lại bản đồ là không xóa các điểm đánh dấu, nó sẽ tái tạo lại từ đầu KHÔNG xóa các điểm đánh dấu.
Sam
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.