Включение / выключение маркеров в Google Maps API v3 - PullRequest
3 голосов
/ 29 апреля 2010

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

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

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

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

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

Ответы [ 2 ]

15 голосов
/ 05 июня 2011

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

0 голосов
/ 29 апреля 2010

Основная проблема в том, что если вы хотите, чтобы это работало, вы должны решить, что должен содержать объект 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.

...