我有很多标记,所以我将它们聚集在一起。我遇到了问题,当用户从集群中缩小时,我想保持弹出窗口打开,我找到了这个解决方案https://jsfiddle.net/sghL4z96/65/Leaflet Markercluster:从聚类中免除标记效果很好。但问题是当标记离簇本身太近时,当我尝试使用相同的解决方案时,我得到了这个结果https://jsfiddle.net/s2mnvL5w/3/当我单击群集时,会显示两个标记。例如,如果我单击左侧标记,则会弹出文本一。当我关闭此弹出窗口时,我会再次尝试打开左侧标记,然后会弹出文本二是错误的。相反,我得到了一个。我的错误在哪里,希望解决方案可以调整为坐标非常接近的标记。clustered.on('popupopen', function(e) { console.log('open'); const m = e.popup._source; clustered.removeLayer(m); unclustered.addLayer(m); m.openPopup();});unclustered.on('popupclose', function(e) { console.log('close'); let m = e.popup._source; unclustered.removeLayer(m); clustered.addLayer(m); m.closePopup();});
1 回答
德玛西亚99
TA贡献1770条经验 获得超3个赞
这是因为您从组中删除了该图层clustered。再次将其添加到组后,它就有了新的订单。
你可以这样做:
let popup;
const mkMarker = function(lat, lng, txt) {
const m = L.marker(L.latLng(lat, lng));
m.addTo(clustered);
m.popupText = txt;
m.on('click',(e)=>{
var marker = e.target;
var latlng = marker.getLatLng();
var offset = [0,0];
if(marker._preSpiderfyLatlng){
latlng = marker._preSpiderfyLatlng;
}else{
offset= marker.options.icon.options.popupAnchor;
}
popup = L.popup({offset: offset}).setContent(marker.popupText).setLatLng(latlng).addTo(map)
})
return m;
};
并去掉popupopen/close监听函数
添加回答
举报
0/150
提交
取消