功能缩放到集群关闭具有相同纬度/经度的多个标记的集群

Posted

技术标签:

【中文标题】功能缩放到集群关闭具有相同纬度/经度的多个标记的集群【英文标题】:function zoom to cluster closes cluster with multiple markers at same lat/lng 【发布时间】:2018-02-16 09:30:34 【问题描述】:

我正在创建一个带有传单的地图,带有标记集群和标记集群图层支持插件。

我有一个带有多个叠加层的图层控件,因此其中一些带有不同数据的选中标记会在相同的 lat/lng 弹出。

这些点可以正确聚类,但是我遇到了一个问题,如果我单击同一 lat/lng 的一组点,则该聚类不会居中,因此它通常会偏向一边并且很难除非您手动单击并拖动以使其居中,否则请查看。

如果我单击具有不同 lat/lng 点的集群,它将放大并以该区域为中心。为了尝试解决这个问题,我添加了这 2 个函数,一个单独应用于标记,以便在单击它们时它们在地图上居中,一个应用于单击的集群,导致地图缩放到集群的边界。

发生的情况是您单击集群,它将展开并在同一点显示标记,但随后它将缩放集群并居中并关闭集群,因此您必须再次单击它才能显示标记。我不希望这种情况发生。

我在想也许使用 panTo 的函数在集群点击时会更好地工作?但不确定如何实现这一点。谢谢! 这些是函数:

    markerClusters.on('clusterclick', function (a) 
        a.layer.zoomToBounds();
    );


    map.on('popupopen', function(e) 
var px = map.project(e.popup._latlng); // find the pixel location on the map where the popup anchor is
px.y -= e.popup._container.clientHeight/2 // find the height of the popup container, divide by 2, subtract from the Y axis of marker location
map.panTo(map.unproject(px),animate: true); // pan to new center

    );

【问题讨论】:

【参考方案1】:

您可能应该在您的markerClusters MCG 上使用"spiderfied" 事件,而不是"clusterclick",后者也会为不需要爬取的集群触发。

此外,正如您所知道的,一旦您执行缩放,该操作就会关闭蜘蛛化。如您所料,使用panTo 可避免缩放更改,因此不会关闭蜘蛛化。

markerClusters.on('spiderfied', function (event) 
  var cluster = event.cluster;

  // Center the map on the clicked cluster if it gets spiderfied.
  map.panTo(cluster.getLatLng());
);

演示:https://jsfiddle.net/3v7hd2vx/397/

【讨论】:

谢谢!!这行得通!有什么方法可以使“平移”运动更顺畅?现在我点击它,它有点猛地使集群居中。抱歉,我不确定这是否会被视为一个新问题。

以上是关于功能缩放到集群关闭具有相同纬度/经度的多个标记的集群的主要内容,如果未能解决你的问题,请参考以下文章

Google Maps Android v2 中的集群标记

如何将谷歌地图标记的纬度和经度发送到 Firebase - android? [关闭]

具有相同坐标的标记不会折叠

如何在 JPG 地图上叠加经度和纬度标记?

OverlappingMarkerSpiderfier 显示哪些标记位于“蜘蛛集群”中?

将数据库中的多个纬度/经度点加载到谷歌地图标记中的好方法?