将自定义标记放在 markerclusterer

Posted

技术标签:

【中文标题】将自定义标记放在 markerclusterer【英文标题】:Place custom marker over markerclusterer 【发布时间】:2021-08-10 06:58:54 【问题描述】:

我正在使用 google maps api 3 和 agm(角度谷歌地图)在地图上放置许多自定义标记。其中一些标记的优先级较低,因此我在这些标记上实现了聚类(使用 markerClusterer)以帮助提高性能。

但是,优先级较高的标记需要始终位于集群之上,目前集群似乎位于它们自己的层上,并且该层始终位于标记层之上。

有没有办法强制集群和标记位于同一层,所以我可以实现 zIndex?或者至少,强制制造者层位于集群层之上。

或者,我们是否可以检测集群是否超过标记,并移动集群以使其不碍事。

【问题讨论】:

您使用的是哪个MarkerClusterer?您如何将更高优先级的Markers 添加到地图中?请提供一个 minimal reproducible example 来证明该问题。 【参考方案1】:

经过多年的努力,我发现这样做的唯一方法是创建一个窗格,以便 getPanes 方法可用,从那里将 markerLayer(标记所在的位置)移动到 overlayMouseTarget,这里是半工作示例:

首先,设置一个或多个标记的 zIndex

marker.setZIndex(9999);
marker.setMap(this.map);

我使用了一种非常冗长的方法来检查 json 信息以更改 zIndex 编号,因此对于这个示例,我只会说所有标记都需要位于集群上方,然后是我计划放入的任何标记中群集,我将该标记设置为 10 并推送到一个数组,然后将该数组设置为标记群集。现在进入分层:

const overlay = function() ;

overlay.prototype = new google.maps.OverlayView();
overlay.prototype.onAdd = function() 

  const panes = this.getPanes();

  for(let i = 0; i < panes.markerLayer.childNodes.length; i++) 
    panes.overlayMouseTarget.appendChild(panes.markerLayer.childNodes[i]);
  

  console.log(panes.overlayMouseTarget);
;

const x = new overlay();
x.setMap(this.map); 

这样,这会将所有标记和集群推送到同一个 dom 元素中,因此 zIndex 受到尊重。

【讨论】:

以上是关于将自定义标记放在 markerclusterer的主要内容,如果未能解决你的问题,请参考以下文章

将自定义标记 (HTMLMarkers) 添加到聚类

我可以在 Google 地图上放置自定义对象吗?

将自定义类添加到 WordPress 导航中的锚标记

Google Map API V3:如何将自定义数据添加到标记

标记点击;用户将自定义信息添加到 infoWindow

如何将自定义标记图标添加到 Google 地图?