5

我将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
        });
    }
});

我能够对非实时标记图层做的是创建一个标记群集组并将图层添加到其中,因此标记会像这样聚集:

var clusterGroup = L.markerClusterGroup();
clusterGroup.addLayer(someLayer);

但是,当我将 realtimeLayer 添加到集群组时,不会应用集群,或者标记确实会被加载。我错过了什么?谢谢!

4

1 回答 1

1

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

来自官方 Leaflet Realtime 文档:

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

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

var clusterGroup = L.markerClusterGroup();
clusterGroup.addTo(map);

然后,您可以将 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
        });
    }
});

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

realtimeLayer.addTo(map)

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

于 2018-06-06T19:09:17.410 回答