Javascript 谷歌地图V3:检查地图上是否有标记?

Javascript 谷歌地图V3:检查地图上是否有标记?,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,在GoogleMapsV3中,有没有办法检查地图上是否存在标记 我有一个当点击时消失的标记。我想要一些逻辑来检查标记的当前可见性 例如: var start_marker = null; start_marker = new google.maps.Marker({ position: location, map: map, clickable: true }); google.maps.event.addListener(start_marker, 'click', function(even

在GoogleMapsV3中,有没有办法检查地图上是否存在标记

我有一个当点击时消失的标记。我想要一些逻辑来检查标记的当前可见性

例如:

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));
我希望这会在标记不可见时给我一个空类型,但实际上它仍然是一个对象

那么,我如何才能检查这个特定的标记在地图上是否可见

谢谢

start_marker.getMap()
如果以前使用过start_marker.setMap(null),则返回null;就像你的例子一样


也就是说,如果您只想隐藏和显示标记,为什么不使用setVisible和getVisible?

我认为您必须更改逻辑。为什么不将标记存储在数组中,并在单击时将其从该数组中完全移除。因此,剩余的标记就是可见的标记


Cheers

如果
标记
的位置包含在当前
地图
边界下,则此一行将返回
true
,如果不包含,则返回
false

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

希望有帮助,干杯

如果只想隐藏/显示标记,可以使用标记的setVisible方法,如:

 start_marker.setVisible(false);//to hide
 start_marker.setVisible(true);//to show
console.log('Type of start_marker is now: ' + start_marker.getVisible());
因为setMap(null)不隐藏标记,而是从映射中删除标记

然后可以使用getVisible()获得标记的可见性,如:

 start_marker.setVisible(false);//to hide
 start_marker.setVisible(true);//to show
console.log('Type of start_marker is now: ' + start_marker.getVisible());
你可以在这里阅读:

PS:是的,一种方法是自己设置
start\u marker=null
,但我很想知道是否有内置的方法!标记在那里,它是一个对象,只是没有绑定到地图上。通过“在地图上可见”,你的意思是标记在用户的视口中吗?或者你的意思是标记已经被放置在地图上了,不管它是否超出了用户放大的范围?Trott的问题非常相关,并决定了哪些答案是正确的。@Stavros:触发vp更改的最常见事件是拖动处理程序。因此,在vp更改后,您很有可能在地图的bb内重复点。因此,一旦创建了对象就“移除”是一个非常糟糕的主意,因为现在你不需要它们,因为机会非常大,你在下一次Dragen后会再次需要它们。由于DOM调用非常“昂贵”,您应该使用wisley。事实上,在大多数情况下,这是保存东西的最佳方式,因为你(相对地)确信,你以后不再需要它们。它只是说“如果给定的lat/lng在该范围内,则返回true”,而实际上并没有告诉您现有标记是否已放置在地图上。48小时后,我找到了隐藏和显示地图标记的真正解决方案。使用贴图簇时,setMap()不会隐藏边界更改上的标记。这保存了它。