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

Есть ли в 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));

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

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

Спасибо!


person simon    schedule 23.05.2011    source источник
comment
PS: да, один из способов - установить start_marker=null самому, но мне любопытно узнать, есть ли встроенный способ!   -  person simon    schedule 23.05.2011
comment
маркер есть, и это объект, он просто не привязан к карте.   -  person Salman A    schedule 23.05.2011
comment
Под видимым на карте вы имеете в виду, что маркер находится в пределах области просмотра пользователя? Или вы имеете в виду только то, что маркер был помещен на карту, независимо от того, находится ли он за пределами того, что пользователь увеличил?   -  person Trott    schedule 23.05.2011
comment
Вопросы Тротта очень актуальны и определяют, какой из ответов правильный.   -  person Ryan Olds    schedule 23.05.2011


Ответы (5)


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

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

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

person eyecatchUp    schedule 14.06.2011
comment
@Stavros: наиболее распространенным событием, которое вызывает изменения vp, является обработчик перетаскивания. Таким образом, у вас есть очень высокая вероятность повторения точек в bb вашей карты после изменения vp. Таким образом, это очень плохая идея «удалять» однажды созданные объекты, пока они вам не нужны, так как шанс действительно высок, они вам понадобятся после следующего драгенда снова. И поскольку вызовы DOM действительно «дорогие», вы должны использовать их с умом. Действительно - в большинстве случаев - это лучший способ сохранить вещи, поскольку вы (относительно) уверены, что они вам больше не понадобятся позже. - person eyecatchUp; 18.06.2011
comment
содержит просто говорит, что возвращает true, если заданная широта/ lng находится в этих пределах и на самом деле не сообщает вам, был ли уже существующий маркер на карте. - person johntrepreneur; 12.01.2013

start_marker.getMap()

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

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

person Jasoon    schedule 23.05.2011

Если вы хотите просто скрыть/показать маркер, вы можете использовать метод 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

person ambay    schedule 21.06.2012
comment
48 часов спустя я нашел реальное решение для скрытия и отображения маркеров карты. При работе с кластерами карты setMap() не скрывает маркеры при изменении границ. Это сохраняет его. - person Spencer May; 10.11.2016

Marker#getVisible() ?

person no.good.at.coding    schedule 23.05.2011

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

Ваше здоровье

person Argiropoulos Stavros    schedule 24.05.2011