Включение/выключение маркеров в Google Maps API v3

У меня возникли проблемы с получением setMap(null); функция, которую все, кажется, рекомендуют для работы.

Я считаю, что это может быть проблема с тем, как я реализовал маркеры.

Если бы кто-то мог взглянуть и сообщить мне, если вы видите что-то не так, я был бы очень признателен.

ССЫЛКА: http://www.dougglover.com/samples/UOITMap/v2/

Обратите внимание: старая ссылка выше никуда не ведет.


person Douglas    schedule 29.04.2010    source источник


Ответы (2)


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

Цитируя ваш файл javascript, вот две функции, которые выполняются, когда вы устанавливаете/снимаете флажок:

15  function addTestMarkers(){
16      for(var i in markersTest) {
17          var location = new google.maps.LatLng(markersTest[i][1], markersTest[i][2]);
18          marker = new google.maps.Marker({
19              position: location,
20              map: map
21          });
22      }
23  }
24  
25  // Removes the overlays from the map, but keeps them in the array
26  function clearOverlays() {
27      if (markersTest) {
28          for (i in markersTest) {
29              markersTest[i].setMap(null);
30          }
31      }
32  }

Чтобы addTestMarkers работало, объект markersTest должен содержать описания того, куда должны идти маркеры. Чтобы clearOverlays работало, объект markersTest должен содержать маркеры.

Вот мое предложение: измените объект markersTest, установленный в верхней части файла javascript, на markerDestinations, а в верхней части файла javascript инициализируйте markersTest с помощью:

markersTest = {};

Затем измените addTestMarkers на:

function addTestMarkers() {
    for(var i in markerDestinations) {
        var location = new google.maps.LatLng(markersDestinations[i][1], markersDestinations[i][2]);
        markersTest[i] = new google.maps.Marker({
            position: location,
            map: map
        });
    }
}

Ключевое изменение состоит в том, чтобы заставить addTestMarkers фактически помещать маркеры в объект markersTest.

person Daniel Martin    schedule 29.04.2010
comment
Итак, вместо того, чтобы инициализировать массив, как будто это объект, используйте мой массив для создания свойств объекта, которые будут использоваться для целей отображения, если я правильно понимаю ваш смысл. Я воспользуюсь вашим советом и разберусь с этим. По правде говоря, я только начал СМОТРЕТЬ API на этой неделе (понедельник) и чувствую, что, несмотря на некоторые жесткие препятствия, я довольно хорошо справляюсь с новой версией, а не выбираю более полную версию 2. , Кто угодно. Еще раз спасибо, я посмотрю на изменение карты, как вы предложили. - person Douglas; 29.04.2010

Не используйте setMap(null) для переключения маркеров на карте! Поэтому API предлагает метод setVisible, который подходит для этой задачи.

person eyecatchUp    schedule 05.06.2011