如何在MarkerClusterer中实现OverlappingMarkerSpiderfier 'click'触发器

How to implement OverlappingMarkerSpiderfier 'click' trigger in MarkerClusterer

众所周知,MarkerClusterer "bugged" 可以处理同一位置的标记,因此我在我的项目中添加了 OMS 库。
我的目标是拥有一个集群 "spiderfy" 如果它的所有标记都在同一位置。
我必须说,我的 maxZoom 级别是 22,因为否则所有标记都是重叠的,你实际上无法判断有多个标记。
我设法到达 "if they are all in the same position",但我无法对集群进行 spiderfy。
拦截事件的代码是this answer (all in the same position)之间的混合 和 this one (override the clickcluster event).
建议的触发点击事件的方法似乎对我不起作用。这是我写的覆盖函数:

var mc = new MarkerClusterer(map,markers,options);
            mc.onClickZoom = function(mc) { 
                var marker = mc.cluster_.markers_[0];
                console.log("clicking marker");
                google.maps.event.trigger(marker, 'click',{});
            };

控制台确实记录了“点击标记”,但是地图和集群只是停留在那里;没有任何反应。

编辑: 这是我所做的代码修改。


在我到达集群应该“spider up”之前,代码一直有效。几个gif:

在这里,我点击第一个集群 (5),它成功地将我带到较小的集合,但点击 (4) 没有任何反应。疯狂点击只是放大但对集群没有任何影响

这是markerClusterer.maxZoom设置为14的代码,所以前面的4不会被识别为簇。我只是想让人们理解那里还有 4 个标记。我试着让标记显示数字,然后点击打开蜘蛛,然后关闭并再次显示集群图标

在这一点上,我只是急切地想证明可蜘蛛集群是可点击的,只是说 "there are more in the same location"。

因此,显然评论中有 1/2 的问题(以及我之前咨询过的一堆问题)没有一个有效的示例,但出于某种原因,我的问题必须有一个。试过用JFiddle,不行,干脆自己解决了。我真的希望这不会意味着再次禁止,但我知道什么。
以下是如何做到这一点:
所以问题是 MarkerCluster 创建了一个 单个集群 ,因此激活它上面的 click 事件什么都不做对于 OverlappingMarkerSpiderfier。

按照我问题中的步骤编辑 MarkerClusterer 源,然后

  1. (可选:需要点击两次)居中并缩放群集
  2. (如果你做了 1,在第二次点击后)将标记放回地图上(可能有更好的方法,但我的时间很紧)
  3. 隐藏集群图标
  4. 等待上述步骤完成(TODO:找到一个标志而不是 setTimeout)
  5. 触发点击事件。

这里是要在 MarkerClusterer 声明中实现的代码。:

var mc = new MarkerClusterer(map,markers,options);
//this code overrides the prototype method declared in the source
            mc.onClickZoom = function(mc) {
                var cluster = mc.cluster_;
                var markers = cluster.getMarkers();
                map.setCenter(markers[0].getPosition());
                if(map.getZoom()<17){
                    map.setZoom(17);
                }
                for(i in markers){
                    markers[i].setMap(cluster.getMap());
                    marker = markers[i];
                }
                cluster.clusterIcon_.hide();
                console.log(marker);
                setTimeout(function(){
                    google.maps.event.trigger(marker, 'click');
                },100);

                //documentMap.applyOverlappingIcons();
            };

拜托,如果你有更好的解决方案,我在这里学习:评论,我会编辑这个答案!