map.clear () не работает в API Google Maps JavaScript [duplicate]

public class StringPool {

public static void main(String[] args) {

    String s1 = "Cat";// will create reference in string pool of heap memory
    String s2 = "Cat";
    String s3 = new String("Cat");//will create a object in heap memory

    // Using == will give us true because same reference in string pool

    if (s1 == s2) {
        System.out.println("true");
    } else {
        System.out.println("false");
    }

    // Using == with reference and Object will give us False

    if (s1 == s3) {
        System.out.println("true");
    } else {
        System.out.println("false");
    }

    // Using .equals method which refers to value

    if (s1.equals(s3)) {
        System.out.println("true");
    } else {
        System.out.println("False");
    }

    }
  }

---- Выход ----- true false true

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

30 ответов

Просто выполните следующее:

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();, где это необходимо.

Вот и все!

460
ответ дан 8 revs, 8 users 58%anon 17 August 2018 в 14:51
поделиться
  • 1
    for..in loop с массивом? это не может быть хорошо, конечно ..? ..see: stackoverflow.com/questions/500504/… – zack 14 April 2011 в 20:55
  • 2
    В качестве альтернативы вы можете скрыть маркеры, используя marker.setVisible (false) – Nikhil Ben Kuruvilla 24 August 2012 в 08:19
  • 3
    Маркеры по-прежнему хранятся в массиве, поэтому они будут расти все больше и больше. Предлагает очистить массив также после цикла – Ami 5 October 2012 в 10:08
  • 4
    вы всегда можете установить markersArray в пустой массив вместо установки его длины, который я нахожу нечетным: markersArray = []; – hellatan 28 November 2013 в 23:28
  • 5
    Я использовал бы метод while для обработки массива: while(markersArray.length) { markersArray.pop().setMap(null); }. После этого не нужно очищать массив. – YingYang 11 March 2014 в 17:04

Чистое и простое применение ответа роллингера.

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) ;
    }
5
ответ дан Adam Starrh 17 August 2018 в 14:51
поделиться

Вам нужно установить значение null для этого маркера.

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
ответ дан Adhum 17 August 2018 в 14:51
поделиться

Я нашел простое решение (я думаю):

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

function Clear(){
     marker.setMap(null);
}
-2
ответ дан aleXela 17 August 2018 в 14:51
поделиться

Я только что попробовал это с помощью kmlLayer.setMap (null), и он сработал. Не уверен, что это будет работать с регулярными маркерами, но, похоже, работает правильно.

2
ответ дан bokor 17 August 2018 в 14:51
поделиться

Кажется, что в V3 такой функции еще нет.

Люди предлагают сохранить ссылки на все маркеры, которые у вас есть на карте в массиве. И затем, когда вы хотите удалить все все, просто пройдите через массив и вызовите метод .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 вручную.

Плюсы

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

Минусы

  • Использование прототипов и оберток, как я сделал, теперь делает мой код зависимым от кода Google, если они делают изменение мэра в их источнике, это сломается.
  • Если вы не понимаете этого, вы не сможете его исправить, если он сломается. Шансы низкие, что они собираются изменить что-нибудь, что сломает это, но все же ..
  • Если вы удалите один маркер вручную, ссылка будет по-прежнему находиться в массиве маркеров. (Вы можете отредактировать мой метод setMap, чтобы исправить его, но ценой зацикливания массива маркеров и удаления ссылки)
45
ответ дан Community 17 August 2018 в 14:51
поделиться
  • 1
    +1 От меня. Но ваш ответ был бы лучше, если бы вы включили оболочку для автоматического вызова addMarker! – Andrew 9 October 2009 в 18:07
  • 2
    Я полагаю, вы на самом деле имеете в виду ответ Эндрюса. Не могли бы вы показать с кодом, что бы вы сделали по-другому и почему. благодаря – mp_ 9 October 2009 в 18:10
  • 3
    Meh извините за задержку, я сдерживал код публикации, потому что у меня не было возможности быстро его протестировать. – Maiku Mori 9 October 2009 в 18:43
  • 4
    Спасибо, Майку. Хотя, я не понимаю - как добавить новый маркер в ваш пример. Опять же, огромное спасибо! – mp_ 9 October 2009 в 18:50
  • 5
    Я попробовал использовать setMap (null), но у меня был сценарий автоматического обновления, и каждый раз, когда я устанавливал все 50 или около моих маркеров на нулевую карту, у меня все еще была куча нечетких маркеров, плавающих вокруг в DOM где-то. Это приводило к сбою страницы, потому что каждые 30 секунд она добавляла 50 новых маркеров в DOM, и это распространялось бесконечно, потому что страница оставалась открытой 24/7 на видеостенке. Я должен был использовать верхний ответ и полностью очистить все наложения карт от DOM, прежде чем создавать новые. Надеюсь, это помогает кому-то; мне потребовалось много времени, чтобы понять, почему моя страница рушилась! :( – InterfaceGuy 25 July 2012 в 23:02

Я нашел использование библиотеки markermanager в проекте google-maps-utility-library-v3 как самый простой способ.

1. Настройте MarkerManager

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

2. Добавить маркеры в MarkerManager

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

3. Чтобы очистить маркеры, вам просто нужно вызвать функцию clearMarkers() MarkerManger

mgr.clearMarkers();
mgr.clearMarkers();
3
ответ дан Craig Fruin 17 August 2018 в 14:51
поделиться
  • 1
    Похоже, что слишком много лишнего, чтобы вытащить эту библиотеку для очистки маркеров. Все clearMarkers do перебирают маркеры, вызывающие marker.setMap(null) (я проверил источник). Было бы меньше работать, помещая их в массив и делая это самостоятельно. – Kit Sunde 15 September 2012 в 16:33

Вы также можете сделать это так:

function clearMarkers(category){ 
  var i;       

  for (i = 0; i < markers.length; i++) {                          
    markers[i].setVisible(false);        
  }    
}
3
ответ дан Crisoforo Gaspar 17 August 2018 в 14:51
поделиться

Я не знаю, почему, но установка setMap(null) в мои маркеры не работала для меня, когда я использую DirectionsRenderer.

В моем случае мне пришлось называть setMap(null) к моему DirectionsRenderer.

Что-то вроде этого:

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
ответ дан Felipe Miosso 17 August 2018 в 14:51
поделиться

Чтобы очистить все накладки, включая полисы, маркеры и т. д., [...]

просто используйте:

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

Вот функция, которая Я написал, чтобы сделать это на мне в приложении карты:

  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"));
}
2
ответ дан Fraser 17 August 2018 в 14:51
поделиться
  • 1
    не будет ли это также сбросить карту? предположим, что пользователь перетащил карту в новую область? – Kichu 19 October 2013 в 18:17
for (i in markersArray) {
  markersArray[i].setMap(null);
}

работает только с IE.


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

работает на chrome, firefox, ie ...

6
ответ дан freefaller 17 August 2018 в 14:51
поделиться

Я пробовал все предлагаемые решения, но ничего не работало для меня, пока все мои маркеры находились под кластером. В конце концов я просто положил это:

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

Другими словами, если вы кладете маркеры в кластере и хотите удалить все маркеры, вы вызываете:

clearMarkers();
0
ответ дан Geka P 17 August 2018 в 14:51
поделиться

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

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

Обновление:

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

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

4
ответ дан GregN 17 August 2018 в 14:51
поделиться

Следующее от Anon работает отлично, хотя и с мерцанием при многократном очистке наложений.

Просто выполните следующее:

I. Объявить глобальную переменную:

var markersArray = [];

II. Определить функцию:

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

III. Нажимайте маркеры в «markerArray» перед вызовом следующего:

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

IV. Вызовите функцию clearOverlays(), где это необходимо.

Вот и все!

Надеюсь, что это поможет.

20
ответ дан Guido García 17 August 2018 в 14:51
поделиться
  • 1
    +1 От меня. Я бы добавил обертку вокруг конструктора google.maps.Marker (или метода setMap, поскольку я думаю, что конструктор вызывает его внутри), который вызывает addMarker автоматически, но все же приятный ответ :). – Maiku Mori 9 October 2009 в 17:56
  • 2
    @Maiku Mari, вы бы показали с кодом, что бы вы сделали по-другому и почему. благодаря – mp_ 9 October 2009 в 18:07
  • 3
    Как это не решение? Вы удаляете маркеры с помощью set_map (null) на конкретном маркере, который хотите очистить, если вы хотите очистить все, а затем, используя эту функцию. Если вы хотите что-то еще запросить здесь: code.google.com/p/gmaps-api-issues/issues/… – Petrogad 9 October 2009 в 18:50
  • 4
    Я считаю, что это произошло здесь lootogo.com/googlemapsapi3/markerPlugin.html – Maiku Mori 9 October 2009 в 19:22
  • 5
    -1 Плохой стиль. Создан только один массив маркеров, но один на карту после clearMarkers (причина получения / установки разницы с прототипами). Неприятные ошибки с несколькими объектами карты. – Tomas 6 May 2010 в 15:41
  • 6
    for(in in markersArray){}, вероятно, не делает того, что вы ожидаете от него. Если Array расширяется где-либо еще в коде, он будет перебирать и эти свойства, а не только индексы. Версия javascript этого markersArray.forEach(), которая не поддерживается везде. Вам будет лучше с for(var i=0; i<markersArray.length; ++i){ markersArray.setMap(null); } – Kit Sunde 15 September 2012 в 16:39

В новой версии 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;
  }
}
15
ответ дан Jirapong 17 August 2018 в 14:51
поделиться

Демо-галерея Google демонстрирует, как они это делают:

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

Вы можете просмотреть исходный код, чтобы увидеть, как они добавляют маркеры.

Короче говоря, они сохраняют маркеры в глобальном массиве. При очистке / удалении они прокручивают массив и вызывают «.setMap (null)» в данном объекте маркера.

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

«Удалить» также очищает массив.

6
ответ дан jmbertucci 17 August 2018 в 14:51
поделиться

Просто пройдите по маркерам и удалите их из карты, пустые массивы маркеров карт после этого:

var markers = map.markers;
for(var i = 0; i < markers.length; i++) {
    markers[i].setMap(null);
}
map.markers = [];
0
ответ дан kaiser 17 August 2018 в 14:51
поделиться

Я знаю, что это может быть простое решение, но это то, что я делаю

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

Работает каждый раз для меня.

-2
ответ дан kronus 17 August 2018 в 14:51
поделиться
  • 1
    $ (& Quot; # map_canvas & Quot;) HTML (& Quot; & Quot;). фактически уничтожил бы всю карту div чистым, а также полагался на jQuery, поэтому ваш ответ был бы глупым и бесполезным. – Sam 2 December 2015 в 09:49
  • 2
    Да это верно. Инициализировать карту и маркеры – kronus 4 December 2015 в 01:30
  • 3
    Но он не хочет повторно инициализировать карту, которую хочет удалить существующие маркеры .... – Sam 4 December 2015 в 10:39
  • 4
    Я просто предлагаю, как я нашел, чтобы удалить существующие маркеры. По крайней мере, дайте ему шанс и скажите мне, работает оно или нет. Меня устраивает – kronus 7 December 2015 в 02:58
  • 5
    Все, что нужно, чтобы удалить маркеры карт, заключается в том, чтобы избежать необходимости повторной инициализации карты, такие ситуации, как моя, означали, что, поскольку я использовал библиотеку рисования Google для рисования на карте, если я очищу ее и повторно инициализирую всю карту, все накладываемые мной накладки исчезнуть единственный способ остановить это, чтобы сохранить все накладки и добавить их, что также много ненужной работы. Повторная инициализация карты не устраняет маркеры, которые воссоздают ее с нуля, а НЕ удаляя маркеры. – Sam 9 December 2015 в 10:17

С помощью этого вы можете удалить весь маркер с карты.

map.clear();

Это поможет вам, это поможет мне ..

-2
ответ дан Mayank Garg 17 August 2018 в 14:51
поделиться
  • 1
    Разве это отличается от ответа РейджлинЛокешварана? – lalithkumar 6 June 2017 в 11:39

, если вы используете плагин gmap V3: $("#map").gmap("removeAllMarkers");

см.: http://www.smashinglabs.pl/gmap/documentation#after-load

-2
ответ дан mgm8870 17 August 2018 в 14:51
поделиться

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

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

83
ответ дан mooreds 17 August 2018 в 14:51
поделиться
  • 1
    То, как я, наконец, получил его работу, состоял в том, чтобы перебирать коллекцию маркеров, где я их хранил, и использовать setMap (null) – Sebastian 13 April 2010 в 03:45
  • 2
    Но разве это очищает маркеры от памяти? Я понимаю, что JavaScript имеет автоматическую сборку мусора, но как мы знаем, что API Google не содержит ссылки на маркер при вызове setMap (null)? В моем приложении я добавляю и «удаляю». тонна маркеров, и я бы ненавидел все эти «удаленные» слова. маркеры, которые будут всасывать память. – Nick 23 July 2010 в 05:11
  • 3
    На этот вопрос теперь дан ответ в документации. [Д0] code.google.com/apis/maps/documentation/javascript/… – lashleigh 20 January 2011 в 20:43
  • 4
    Кто даже использует new Array();? – Rihards 22 November 2012 в 10:39
  • 5
    Я получаю & quot; this.markers undefined & quot; ошибка. – lulalala 6 February 2014 в 11:24

Это метод, который сам Google использует, по крайней мере, в одном примере:

var markers = [];

// Clear out the old markers.
markers.forEach(function(marker) {
  marker.setMap(null);
});
markers = [];

Проверьте образец Google для полного примера кода:

https: // разработчики. google.com/maps/documentation/javascript/examples/places-searchbox

1
ответ дан Ogglas 17 August 2018 в 14:51
поделиться

просто очистить Googlemap

mGoogle_map.clear();
0
ответ дан RejoylinLokeshwaran 17 August 2018 в 14:51
поделиться

Вы хотите удалить, как в их скрытии или удалении?

, если скрывать:

function clearMarkers() {
            setAllMap(null);
        }

, если вы хотите их удалить:

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

обратите внимание, что я использую маркеры массивов, чтобы отслеживать их и вручную перезагружать.

-1
ответ дан RobertoN 17 August 2018 в 14:51
поделиться

Чтобы удалить все маркеры с карты, создайте функции примерно так:

1.addMarker (location): эта функция используется для добавления маркера на карту

2.clearMarkers (): эта функция удаляет все маркеры из карты, а не из массива

3.setMapOnAll (map): эта функция используется для добавления информации о маркерах в массив

4.deleteMarkers (): эта функция Удаляет все маркеры в массиве, удаляя ссылки на них.

// 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
ответ дан Rock Star 17 August 2018 в 14:51
поделиться

Это было самое простое из всех решений, первоначально опубликованных YingYang 11 марта 14 в 14: 049 под первоначальным ответом на исходный вопрос пользователя

Я использую его же решение через 2,5 года с помощью google maps v3.18 и работает как шарм

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

// No need to clear the array after that.
21
ответ дан rolinger 17 August 2018 в 14:51
поделиться

Решение довольно просто. Вы можете использовать метод: marker.setMap(map);. Здесь вы определяете, на какой карте появится вывод.

Итак, если вы установите null в этом методе (marker.setMap(null);), контакт исчезнет.


Теперь вы можете написать функцию witch во время make make все маркеры на вашей карте.

Вы просто добавляете свои контакты в массив и объявляете их с помощью markers.push (your_new pin) или этого кода, например:

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

Чтобы исчезнуть все ваши маркеры, вы должны вызвать функцию с помощью null:

// 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 = [];
  }

Это мой полный код. Это самое простое, что я мог бы свести к минимуму. Будьте внимательны, вы можете заменить YOUR_API_KEY в коде вашим ключевым API 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>

Вы можете обратиться к google developer или полной документации, также , веб-сайт разработчика google .

6
ответ дан SphynxTech 17 August 2018 в 14:51
поделиться

Я использую стенографию, которая хорошо выполняет эту работу. Просто сделайте

    map.clear();
1
ответ дан uchenna nnodim 17 August 2018 в 14:51
поделиться

Здесь вы можете найти пример удаления маркеров:

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

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

20
ответ дан Guido García 17 August 2018 в 14:52
поделиться
  • 1
    +1 От меня. Я бы добавил обертку вокруг конструктора google.maps.Marker (или метода setMap, поскольку я думаю, что конструктор вызывает его внутри), который вызывает addMarker автоматически, но все же приятный ответ :). – Maiku Mori 9 October 2009 в 17:56
  • 2
    @Maiku Mari, вы бы показали с кодом, что бы вы сделали по-другому и почему. благодаря – mp_ 9 October 2009 в 18:07
  • 3
    Как это не решение? Вы удаляете маркеры с помощью set_map (null) на конкретном маркере, который хотите очистить, если вы хотите очистить все, а затем, используя эту функцию. Если вы хотите что-то еще запросить здесь: code.google.com/p/gmaps-api-issues/issues/… – Petrogad 9 October 2009 в 18:50
  • 4
    Я считаю, что это произошло здесь lootogo.com/googlemapsapi3/markerPlugin.html – Maiku Mori 9 October 2009 в 19:22
  • 5
    -1 Плохой стиль. Создан только один массив маркеров, но один на карту после clearMarkers (причина получения / установки разницы с прототипами). Неприятные ошибки с несколькими объектами карты. – Tomas 6 May 2010 в 15:41
Другие вопросы по тегам:

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