如何在Leaflet Realtime中保留以前的数据

时间:2016-03-27 22:14:03

标签: node.js leaflet gis

我正在尝试使用Leaflet实时插件(https://github.com/perliedman/leaflet-realtime),他们在文档中提到我们可以通过在构造函数中添加start:false来保留以前的更新。

var map = L.map('map'),
    realtime = L.realtime({
        url: 'https://wanderdrone.appspot.com/',
        crossOrigin: true,
        type: 'json'
    }, {
        interval: 3 * 1000, start:false
    }).addTo(map);

任何人都有更好的想法如何做到这一点?

plnkr有一个很好的演示:

http://plnkr.co/edit/NmtcUa?p=preview

2 个答案:

答案 0 :(得分:0)

如果设置start: false,则会禁用自动更新。这意味着您必须自己调用图层的update方法,提供您要添加或更新的任何GeoJSON数据;您还可以使用remove方法删除添加的功能。如果要使用服务器轮询以外的其他方法,可以使用这些方法。

答案 1 :(得分:0)

你可以使用我从plnkr复制的以下代码,但是由于L.realtime继承了L.geoJson。而L.geoJson有'layeradd'。

realtime.on('layeradd', function(e) {
var coordPart = function(v, dirs) {
        return dirs.charAt(v >= 0 ? 0 : 1) +
            (Math.round(Math.abs(v) * 100) / 100).toString();
    },
    popupContent = function(fId) {
        var feature = e.features[fId],
            c = feature.geometry.coordinates;
        return 'Wander drone at ' +
            coordPart(c[1], 'NS') + ', ' + coordPart(c[0], 'EW');
    },
    bindFeaturePopup = function(fId) {
        realtime.getLayer(fId).bindPopup(popupContent(fId));
    },
    updateFeaturePopup = function(fId) {
        realtime.getLayer(fId).getPopup().setContent(popupContent(fId));
    };

 map.fitBounds(realtime.getBounds(), {maxZoom: 3});

Object.keys(e.enter).forEach(bindFeaturePopup);
Object.keys(e.update).forEach(updateFeaturePopup);
});