如何在缩小时检查带有打开弹出窗口的标记以防止折叠成簇?
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.
这篇关于Leaflet Markercluster:从聚类中免除标记的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
检查一个多边形点是否在传单中的另一个内部Check if a polygon point is inside another in leaflet(检查一个多边形点是否在传单中的另一个内部)
更改传单标记群集图标颜色,继承其余默认 CSSChanging leaflet markercluster icon color, inheriting the rest of the default CSS properties(更改传单标记群集图标颜色,继承其余默认
触发点击传单标记Trigger click on leaflet marker(触发点击传单标记)
如何更改 LeafletJS 中的默认加载磁贴颜色?How can I change the default loading tile color in LeafletJS?(如何更改 LeafletJS 中的默认加载磁贴颜色?)
将外部geojson添加到传单层Add external geojson to leaflet layer(将外部geojson添加到传单层)
将 Leaflet 图层控件添加到侧边栏Adding Leaflet layer control to sidebar(将 Leaflet 图层控件添加到侧边栏)