Google Maps V3: проверить, присутствует ли маркер на карте? - PullRequest
24 голосов
/ 23 мая 2011

В Google Maps V3 есть ли способ проверить, действительно ли на карте присутствует маркер?

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

Например:

var start_marker = null;
start_marker = new google.maps.Marker({ position: location, map: map, clickable: true });
google.maps.event.addListener(start_marker, 'click', function(event) {
  start_marker.setMap(null);
}); 
// ... Later in code: check whether marker is currently visible. 
console.log('Type of start_marker is now: ' + typeof(start_marker));

Я надеялся, что это даст мне нулевой тип, когда маркер не виден, но на самом деле это все еще объект.

Итак, как еще можно проверить, виден ли этот конкретный маркер на карте?

Спасибо!

Ответы [ 5 ]

58 голосов
/ 14 июня 2011

Этот однострочник вернет true, если позиция marker содержит под текущей границей map, и вернет false, если нет.

map.getBounds().contains(marker.getPosition())

Надеюсь, это поможет, ура!

9 голосов
/ 21 июня 2012

Если вы хотите просто скрыть / показать маркер, вы можете использовать метод маркера setVisible, например:

 start_marker.setVisible(false);//to hide
 start_marker.setVisible(true);//to show

потому что setMap (null) не скрывает маркер, но удаляет маркер с карты.

Затем вы можете использовать getVisible (), чтобы получить видимость маркера, например:

console.log('Type of start_marker is now: ' + start_marker.getVisible());

Вы можете прочитать их здесь: https://developers.google.com/maps/documentation/javascript/overlays#Markers https://developers.google.com/maps/documentation/javascript/overlays

9 голосов
/ 23 мая 2011
start_marker.getMap()

Возвращает ноль, если вы ранее использовали start_marker.setMap (ноль);как в вашем примере.

Тем не менее, почему бы не использовать setVisible и getVisible, если вы просто хотите скрыть и показать маркеры?

5 голосов
/ 23 мая 2011
0 голосов
/ 24 мая 2011

Я думаю, что вы должны изменить свою логику. Почему бы не сохранить свои маркеры в массиве и полностью удалить их из этого массива при нажатии на них?*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...