При рассмотрении вариантов повышения производительности не забывайте о специальной сериализации. Вы можете позволить Java делать то, что она делает хорошо или, по крайней мере, достаточно хорошо, бесплатно , и предоставлять пользовательскую поддержку для того, что она делает плохо. Обычно это намного меньше кода, чем полная поддержка Externalizable.
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, поэтому я использовал указанную выше индивидуальную реализацию.
Отказ от ответственности: я не писал этот код, но я забыл сохранить ссылку при слиянии в мою кодовую базу, поэтому я не знаю, откуда это взялось.
Похоже, что такой функции еще нет в версии 3.
Люди предлагают хранить ссылки на все маркеры на карте в виде массива. А затем, когда вы захотите удалить их все, просто переберите массив и вызовите метод .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 вручную.
Плюсы
Минусы
Функция « set_map
», опубликованная в обоих ответах, похоже, больше не работает в API Карт Google v3.
Интересно, что случилось
Обновление:
Похоже, Google изменил свой API таким образом, что « set_map
» не является « setMap
».
http://code.google.com/apis/maps/documentation/v3 /reference.html[1232 impression
Та же проблема. Этот код больше не работает.
Я исправил его, измените метод 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
Просто сделайте следующее:
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 ();
.
Вот и все !!