Leaflet不显示layerGroup

时间:2016-06-21 10:11:30

标签: javascript leaflet

我正在使用传单绘制与车辆相关的路径。每个车辆路径由一个layerGroup组成,以使路径中的颜色可以不同(颜色取决于温度)。数据以下列格式从Web套接字接收(由调试控制台显示为铬):

Object {color: "#cc0099", legende: "<someHtmlCode.TheSameForEveryPieceOfData>", data: {lat: 48.77905, lon: -3.44891}, c2a_id: "vehicle_1"}

我的问题是,对于某些颜色值(不同的蓝色阴影),路径不会在地图上绘制,但对于其他颜色,它可以正常工作。在我更改缩放级别的情况下,然后显示所有内容(我正在使用的每种颜色)。

您可以看到第二张图像上出现了一些蓝色(在之前的路径上),应该已经淹没而无需更改缩放级别。

我将数据添加到图层的代码。

var idAllLayers;
if (_data != null && _data['data'] != null) {
    current_lon = _data['data']['lon'];
    current_lat = _data['data']['lat'];

    // checking if there is already a layer associated to the vehicle _id_
    if (!(this.layer_group_real_time.hasLayer(id))) {
        var multi_polyline = L.layerGroup([]);  //create a layer for this vehicle
        multi_polyline._leaflet_id = id;
        //add a sublayer to this one (for a sub path to have different colors)
        multi_polyline.addLayer(this.newLayer(id, _data['color']));
        this.layer_group_real_time.addLayer(multi_polyline);
    }

    // get the differents layers of the layerGroup for the vehicle _id_
    idAllLayers = this.layer_group_real_time.getLayer(id).getLayers();
    currentLayerLatLng = idAllLayers[idAllLayers.length-1].getLatLngs();
    if (current_lat != null && current_lon != null) {
        // if previous elements have been stored
        if (this.previousDataPoints[id] != null && this.previousColor[id] != null) {
            oldDataPoint = this.previousDataPoints[id]['data'];
            delta = this.measure(current_lat, current_lon, oldDataPoint['lat'], oldDataPoint['lon']);
            if (delta > MAX_DIST || _data['color'] != this.previousColor[id]) { 
                if (delta < MAX_DIST){  // case where color has changed but we still need to add the point to the previous subpath
                    currentLayerLatLng.push(L.latLng(current_lat, current_lon));
                }                                     
                this.layer_group_real_time.getLayer(id).addLayer(this.newLayer(id, _data['color']));
                idAllLayers = this.layer_group_real_time.getLayer(id).getLayers();
                currentLayerLatLng = idAllLayers[idAllLayers.length - 1].getLatLngs();
             }
         }
         currentLayerLatLng.push(L.latLng(current_lat, current_lon));
         idAllLayers[idAllLayers.length - 1].setLatLngs(currentLayerLatLng);  // setting up the new coords
         this.previousDataPoints[id] = _data;
         this.previousColor[id] = _data['color'];
     }
 }

newLayer: function (_id, _color) {
        var nl = L.polyline([],
            {
                color: _color,
                opacity: 0.7,
                stroke: true,
                weight: 6,
                vehicle_id: _id
            });
        nl.on('click', this.traceOnClick);
        return nl;
    },

[编辑]

这是一个“最小,完整且可验证的例子”(至少我希望如此)我已经上传Github。它包含一个显示某个路径的地图。在加载显示的路径应为绿色和粉红色,但如果您更改缩放级别应出现蓝色路径。我已经整合了@Jieter和@snkashis的建议,但问题仍然存在。

2 个答案:

答案 0 :(得分:0)

我仍然在您的示例中看到multi_polyline._leaflet_id = id;。为什么您没有使用L.Util.setOptions标记自己的内部标识符(车辆ID等)?

答案 1 :(得分:0)

最后,我想到将车辆图层的类型从L.layerGroup更改为L.geoJson。它奏效了!即使我不知道为什么。

我已使用我的解决方案更新了Git repository

(正如之前在评论中所述,我也停止了multi_polyline._leaflet_id = id;,现在使用L.Util.setOptions(vehicleLayer, {vehicle_id: id});。顺便说一句,我已将multi_polyline重命名为vehicleLayer。)