【问题标题】:Google Maps V3: Check if marker is present on map?Google Maps V3:检查地图上是否存在标记?
【发布时间】:2011-08-31 07:50:29
【问题描述】:

在 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));

我希望当标记不可见时这会给我一个空类型,但实际上它仍然是一个对象。

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

谢谢!

【问题讨论】:

  • PS:是的,一种方法是自己设置start_marker=null,但我很想知道是否有内置方法!
  • 标记在那里并且它是一个对象,它只是没有绑定到一个/地图。
  • “在地图上可见”是指标记在用户的视口内吗?还是您的意思只是标记已放置在地图上,无论它是否超出了用户放大的范围?
  • Trott 的问题非常相关,决定了哪个答案是正确的。

标签: javascript google-maps google-maps-api-3


【解决方案1】:

如果marker 的位置在当前map 边界下包含,则此单行将返回true,否则返回false

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

希望有帮助,干杯!

【讨论】:

  • @Stavros:触发 vp 更改的最常见事件是拖动处理程序。因此,在 vp 更改后,您很有可能在地图的 bb 内重复点。因此,“删除”曾经创建的对象是一个非常糟糕的主意,因为暂时不需要它们,因为机会非常高,在下一次拖动之后你将再次需要它们。而且由于 DOM 调用真的很“昂贵”,你应该明智地使用它们。确实 - 在大多数情况下 - 这是保存东西的最佳方式,因为您(相对)确定,以后不再需要它们。
  • contains 只是说它“如果给定的纬度/经度在此范围内,则返回 true”,实际上并没有告诉您是否已经放置了现有标记在地图上。
【解决方案2】:
start_marker.getMap()

如果您之前使用过 start_marker.setMap(null); 将返回 null;就像你的例子一样。

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

【讨论】:

    【解决方案3】:

    如果您只想隐藏/显示标记,可以使用标记的 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

    【讨论】:

    • 48 小时后,我找到了隐藏和显示地图标记的真正解决方案。使用地图集群时,setMap() 不会隐藏边界更改的标记。这样可以保留它。
    【解决方案4】:

    【讨论】:

      【解决方案5】:

      我认为你必须改变你的逻辑。为什么不将你的标记存储在一个数组中,并在单击它们时将它们从这个数组中完全删除。所以剩下的标记是可见的。

      干杯

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-07
        • 2012-09-06
        • 1970-01-01
        • 2011-09-25
        • 1970-01-01
        • 2012-06-26
        • 1970-01-01
        相关资源
        最近更新 更多