Leaflet Markercluster:从聚类中免除标记
如何在缩小时检查带有打开弹出窗口的标记以防止折叠成簇?
How can one exampt a marker with open popup from collapsing into a cluster when zooming out?
我正在使用 leaflet 和 markercluster 在 这个例子:
I am using leaflet and markercluster as set up in this example:
HTML:
<div id="map"></div>
CSS:
html,
body {
height: 100%;
}
#map {
height: 100%;
}
JS:
const map = L.map('map', {
zoom: 5,
center: [0,0],
maxZoom: 18
});
const clustered = L.markerClusterGroup();
map.addLayer(clustered);
const m1 = L.marker(L.latLng(0,0));
m1.addTo(clustered);
m1.bindPopup('one');
const m2 = L.marker(L.latLng(0,1));
m2.addTo(clustered);
m2.bindPopup('two');
const m3 = L.marker(L.latLng(1,0));
m3.addTo(clustered);
m3.bindPopup('three');
我想暂时避免标记折叠成一个集群只要它的弹出窗口是打开的.例如,这意味着:
I would like to temporarily exempt a marker from collapsing into a cluster as long as its popup is open. For the example, this would mean:
放大直到看到各个标记.
Zoom in until you see the individual markers.
单击一个以打开一个弹出窗口.
Click one to open a popup.
再次缩小.
弹出"标记应与打开的弹出窗口一起可见.剩余的标记应该折叠起来.
The "popped up" marker should be visible, together with the open popup. The remaining markers should collapse.
- 当弹出窗口关闭时,标记应该消失在集群中.
我尝试在 popupopen
(和 popupclose
)上将标记临时移动到地图(并返回),但这不起作用:
I've tried to temporarily move the marker to the map (and back) on popupopen
(and popupclose
), but this does not work:
map.on('popupopen', function(e) {
const m = e.popup._source;
clustered.removeLayer(m);
map.addLayer(m);
});
map.on('popupclose', function(e) {
let m = e.popup._source;
map.removeLayer(m);
clustered.addLayer(m);
});
有什么想法吗?
推荐答案
现在 这个 似乎正在工作.我必须添加一个单独的层unclustered
,只在集群层处理popupopen
,只在非集群层处理popupclose
Now this seems to be working. I had to add a separate layer unclustered
, and handle popupopen
only in the clustering layer, and popupclose
only in the unclustered layer
const unclustered = L.markerClusterGroup(); // NOTE
map.addLayer(unclustered);
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();
});
注意:我不喜欢将 L.markerClusterGroup
用于非集群层.但我不知道还有什么.只要该层中只有一个标记,它就会起作用.但是为了避免多个标记折叠成一个簇,必须使用不同的层.哪一个?L.layerGroup
不起作用.
NOTE: I'm not happy with using L.markerClusterGroup
for the unclustered layer. But I would not know what else. As long as there's only one marker in that layer, it will work. But to exempt multiple markers from collapsing into a cluster, a different layer must be used. Which one? L.layerGroup
does not work.
相关文章