使用Leaflet.Vectorgrid的点的弹出窗口,未定义的错误“ lat”

时间:2019-09-24 02:50:25

标签: javascript leaflet

我遇到此错误

  

“ leaflet.js:5,未捕获的TypeError:无法读取未定义的属性'lat'”。

这些点在样式和其他所有方面都可以很好地显示,但是只要我要单击一个点,就什么也没有显示,并且在开发人员工具中出现此错误。

有什么想法吗?

谢谢

var points = new L.featureGroup();

    function round(value, decimals) {
    return Number(Math.round(value + 'e' + decimals) + 'e-' + decimals);
    }


                var vectorTileOptions_poi = {
                rendererFactory: L.canvas.tile,
                maxZoom: 20,
                zIndex: 100,
                vectorTileLayerStyles: {
                    sliced: function (properties, zoom){
                      var dist = properties.length
                        return {
                                radius:     dist <= 150 ? 1.5:
                                            dist >150 && dist <= 500 ? 2:
                                            dist >500 && dist <= 1000 ? 3:
                                            dist >1000 ? 4: 0,

                                fillColor:  dist <= 150 ? '#ffffff':
                                            dist >150 && dist <= 500 ? '#00cc00':
                                            dist >500 && dist <= 1000 ? '#ffff00':
                                            dist >1000 ? '#ff4d4d': '#66ffff',

                                color:      dist <= 150 ? '#ffffff':
                                            dist >150 && dist <= 500 ? '#00cc00':
                                            dist >500 && dist <= 1000 ? '#ffff00':
                                            dist >1000 ? '#ff4d4d': '#66ffff',
                                fill: true,
                                weight: 1,
                                fillOpacity: 0.8,
                                }
                    }
                },
                interactive: true,
                };

  $.getJSON("/xyz/test/points.geojson", function(json) {                     

    var newPoints =  L.vectorGrid.slicer(json, vectorTileOptions_poi)

    .on('click', function(e) {
    var properties = e.layer.properties;
      L.popup()
        .setContent(
                '<b>Point Data</b>' +
                '<br>Amount: <b>'+ properties.TOTAL + '</b>' +
                '<br>Distance: <b>' + (round(properties.length/1000, 2)) + ' km</b>' +
                '<br>Name: <b>' + properties.name + '</b>' +
                '<br>Zipcode, City: <b>' + properties.zipCode + ', ' + properties.City + '</b>'
                )

        .setLatLng(e.latlng)
        .openOn(map);
        L.DomEvent.stop(e);
    })
     newPoints.addTo(point)
 })

1 个答案:

答案 0 :(得分:0)

Leaflet.VectorGrid并没有真正维护过,但是如果您查看项目的github,您会看到几个开发人员针对各种问题(包括该问题)继续实施了请求请求(尚未集成)。

您可以添加layer.getLatLng = null;在Leaflet.VectorGrid.js中解决此问题,请参见下文:

_createLayer: function(feat, pxPerExtent, layerStyle) {
    var layer;
    switch (feat.type) {
    case 1:
        layer = new PointSymbolizer(feat, pxPerExtent);
        // [YB 2019-10-23: prevent leaflet from treating these canvas points as real markers]
        layer.getLatLng = null;         
        break;
    case 2:
        layer = new LineSymbolizer(feat, pxPerExtent);
        break;
    case 3:
        layer = new FillSymbolizer(feat, pxPerExtent);
        break;
    }

    if (this.options.interactive) {
        layer.addEventParent(this);
    }

    return layer;
}