Google Maps API v3: как убрать все маркеры?

При рассмотрении вариантов повышения производительности не забывайте о специальной сериализации. Вы можете позволить Java делать то, что она делает хорошо или, по крайней мере, достаточно хорошо, бесплатно , и предоставлять пользовательскую поддержку для того, что она делает плохо. Обычно это намного меньше кода, чем полная поддержка Externalizable.

418
задан CharlesB 21 May 2012 в 06:27
поделиться

5 ответов

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, поэтому я использовал указанную выше индивидуальную реализацию.

Отказ от ответственности: я не писал этот код, но я забыл сохранить ссылку при слиянии в мою кодовую базу, поэтому я не знаю, откуда это взялось.

21
ответ дан 22 November 2019 в 23:22
поделиться

Похоже, что такой функции еще нет в версии 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 вручную.

Плюсы

  • Поступая так, вы сохраняете код компактен и находится в одном месте (не загрязняет пространство имен).
  • Вам больше не нужно отслеживать маркеры самостоятельно, вы всегда можете найти все маркеры на карте, вызвав map. getMarkers ()

Минусы

  • Использование прототипов и оболочек, как я, теперь делает мой код зависимым от кода Google, если они внесут изменения в свой исходный код, это сломается.
  • Если вы этого не понимаете, тогда вы не сможете исправить это, если сломается. Вероятность того, что они собираются изменить что-либо, что нарушит это, мала, но все же ...
  • Если вы удалите один маркер вручную, ссылка на него все равно будет в массиве маркеров. (Вы можете отредактировать мой метод setMap, чтобы исправить это, но за счет зацикливания массива маркеров желоба и удаления ссылки)
47
ответ дан 22 November 2019 в 23:22
поделиться

Функция « set_map », опубликованная в обоих ответах, похоже, больше не работает в API Карт Google v3.

Интересно, что случилось

Обновление:

Похоже, Google изменил свой API таким образом, что « set_map » не является « setMap ».

http://code.google.com/apis/maps/documentation/v3 /reference.html[1232 impression

4
ответ дан 22 November 2019 в 23:22
поделиться

Та же проблема. Этот код больше не работает.

Я исправил его, измените метод 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

84
ответ дан 22 November 2019 в 23:22
поделиться

Просто сделайте следующее:

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

Вот и все !!

481
ответ дан 22 November 2019 в 23:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: