2016-07-27 34 views
0

我有一个地图,它有基于我的数据库中的值编程放置在它上面的标记。当你点击一个标记时,它将转到该位置的详细页面。Google Maps API:如何判断某个标记是否被另一个标记隐藏?

我的问题是,当地图充分缩小时,彼此足够接近的标记显示为单个标记,实际上隐藏了一些标记。 有没有办法通过编程来判断一个标记是否是一组标记的一部分,或者被其他标记隐藏/遮盖?

我的目的是为每个动态生成的标记做这样的事情:

marker.addListener('click', function() { 
    // if marker is not hiding any other markers 
    window.location.href = markerURL; 
    // else if it is hiding markers/is part of a group of markers 
    map.setZoom(15); 
    map.setCenter(marker.getPosition()); 
}); 

我已经检查了Marker API documentation,但似乎无法找到任何有用的方法。 getClickablegetVisible在我的情况下总是返回true,无论标记是否被另一个标记覆盖。有什么建议么?谢谢!

+0

您可能需要使用[MarkerClusterer](https://github.com/googlemaps/js-marker-clusterer),以便在多个标记群集时显而易见。 – geocodezip

+0

@geocodezip感谢您的建议。我考虑过这个,但希望有一个更简单的方法。我不需要对聚类有任何控制,我只想知道它是否发生了。如果我找不到更好的解决方案,我可能会最终使用该库。 – elethan

+0

没有什么内置API来做这样的事情,我怀疑你提出的任何算法都不会像标记群集器 – geocodezip

回答

1

我最终以MarkerClusterer去解决我的问题。我希望有一个更简单的解决方案,但事实证明,这毕竟是相当简单的。

我需要添加到现有标记生成代码中的唯一东西是列表:var markers = [];,然后我在所有标记上调用了markers.push(marker);。最后一步是创建一个新的MarkerClusterer对象:

var markerCluster = new MarkerClusterer(map, markers, options); 

而且MarkerClusterer处理剩下的更多或更少(在options参数是可选的,但我用它的路径设置为我的图片和设置的最大缩放级别)。现在,在以前我的标记堆叠在一起的情况下,无法在某些缩放级别查看或点击某些标记,而是会看到一个数字指示该群集中标记数量的群集。点击集群图标将进一步放大,显示我的标记。

所有这些都是在他们的github页面上的simple usage example之后完成的,但他们也有pretty good documentation。我的大部分时间得到这个工作的权利,实际上花的造型集群图标,以配合我的网站的配色方案...

enter image description here