将标记从 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);
我有一个这样的 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
andmap.removeLayer
.
在你的情况下,你应该可以像这样使用它:
const mcgLayerSupportGroup = L.markerClusterGroup.layerSupport();
mcgLayerSupportGroup.addTo(map);
mcgLayerSupportGroup.checkIn(opl); // <= this is where the magic happens!
opl.addTo(map);