在标记集群组中使用Leaflet实时层

cf2*_*cf2 5 javascript markerclusterer leaflet leaflet.markercluster

我将Leafletrealtimemarkercluster插件结合使用,以便显示在地图上实时更新的标记。这些插件相互独立运行非常好,但是当我想使用markercluster功能对实时层进行集群时,就会出现问题。

我在其中将json转换为标记,分配自定义图标并应用一些onEachFeature函数的实时层的代码示例:

realtimeLayer = L.realtime({
    url: 'someURL',
    crossOrigin: true,
    type: 'json'
}, {
    interval: 3 * 1000,
    onEachFeature: onEachFeature,
    pointToLayer: function(feature, latlng) {
        return L.marker(latlng, {
            icon: customIcon
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

我能够对非实时标记层进行的操作是创建一个标记集群组并将其添加到该组中,这样标记就可以像这样集群:

var clusterGroup = L.markerClusterGroup();
clusterGroup.addLayer(someLayer);
Run Code Online (Sandbox Code Playgroud)

但是,当我将realtimeLayer添加到集群组时,将不应用集群,或者将标记加载为net。我想念什么?谢谢!

max*_*max 1

您需要将该container选项添加到实时对象选项中。

来自官方 Leaflet Realtime 文档:

L.Realtime还可以使用其他图层类型来显示结果,例如它可以使用Leaflet MarkerCluster中的MarkerClusterGroup:将LayerGroup(或任何实现addLayer和removeLayer的类)传递给L.Realtime的容器选项。(该功能是在2.1.0版本中添加的。)

因此,在初始化集群组并将其添加到地图后:

var clusterGroup = L.markerClusterGroup();
clusterGroup.addTo(map);
Run Code Online (Sandbox Code Playgroud)

然后,您可以将 clusterGroup 对象传递给容器选项中的实时对象:

realtimeLayer = L.realtime({
    url: 'someURL',
    crossOrigin: true,
    type: 'json'
}, {
    container: clusterGroup
    interval: 3 * 1000,
    onEachFeature: onEachFeature,
    pointToLayer: function(feature, latlng) {
        return L.marker(latlng, {
            icon: customIcon
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

现在,当您将实时对象添加到地图时,它应该正确聚类:

realtimeLayer.addTo(map)
Run Code Online (Sandbox Code Playgroud)

官方 Leaflet Realtime 存储库有一个示例,可以通过添加对多个 L.Realtime 对象进行分组的选项来执行您想要的操作: https: //github.com/perliedman/leaflet-realtime/blob/master/examples/earthquakes.js