将标记从 OverpassAPI 添加到 MarkerCluster

Add markers from OverpassAPI to MarkerCluster

我有一个这样的 Overpass 查询:

var opl = new L.OverPassLayer({
    query: "(node['amenity'='bench']({{bbox}});node['leisure'='picnic_table']({{bbox}}););out body;",
    markerIcon: iconn,
});
map.addLayer(opl);

但是我如何从中获取数据并将其添加到 MarkerCLuster

用法创建一个新的MarkerClusterGroup示例:

var markers = L.markerClusterGroup();
markers.addLayer(L.marker(getRandomLatLng(map)));
// ... Add more layers ...
map.addLayer(markers);

只需将您的 OverPass 图层添加到您的 MarkerClusterGroup:

const markers = L.markerClusterGroup();
markers.addLayer(opl);
map.addLayer(markers);

注意:如果 OverPass 图层包含非点(〜非标记)子图层(例如区域特征的多边形),它们仍会通过您的 MCG 显示在地图上,但后者不会将它们聚类(如它不知道用于聚类的单个位置)。

注意 2:如果 OverPass 图层动态添加更多 features/layers 到地图(通常如果它在视口 - 因此其 bbox - 发生变化时执行新请求),上述简单方案将不起作用的确。在那种情况下,您可能会对我的 Leaflet.MarkerCluster.LayerSupport subplugin:

感兴趣

Sub-plugin for Leaflet.markercluster plugin (MCG in short); brings compatibility with L.Control.Layers and other Leaflet plugins. I.e. everything that uses direct calls to map.addLayer and map.removeLayer.

在你的情况下,你应该可以像这样使用它:

const mcgLayerSupportGroup = L.markerClusterGroup.layerSupport();
    
mcgLayerSupportGroup.addTo(map);
mcgLayerSupportGroup.checkIn(opl); // <= this is where the magic happens!

opl.addTo(map);