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.
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.
Câu trả lời:
Đơ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ó!!
markersArray
thà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 = [];
while
cá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 đó.
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
new Array();
?
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
Nhược điểm
Đâ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.
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.
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;
}
}
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.
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à ...
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 null
trong 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_KEY
mã 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 .
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) ;
}
Các " set_map
" chức năng gửi bài trong cả hai câu trả lời dường như không còn làm việc ở Google Maps API v3.
Tôi tự hỏi điều gì đã xảy ra
Cập nhật:
Có vẻ như Google đã thay đổi API của họ sao cho " set_map
" không phải là " setMap
".
http://code.google.com.vn/apis/maps/documentation/v3/reference.html
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 = [];
}
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.
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); }
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();
clearMarkers
là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ó.
Để 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"));
}
Để 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 = [];
}
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.
Đây là phương pháp Google tự sử dụng trong ít nhất một mẫu:
var markers = [];
// Clear out the old markers.
markers.forEach(function(marker) {
marker.setMap(null);
});
markers = [];
Kiểm tra mẫu Google để biết ví dụ mã hoàn chỉnh:
https://developers.google.com/maps/documentation/javascript/examples/places-searchbox
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 DirectionsRenderer
là 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);
}
});
chỉ cần xóa bản đồ
mGoogle_map.clear();
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();
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);
}
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();
nếu bạn sử dụng plugin gmap V3:
$("#map").gmap("removeAllMarkers");
xem: http://www.smashinglabs.pl/gmap/documentation#after-load
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.