首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Leaflet.Vectorgrid的点弹出窗口,未定义的错误“lat”

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

Stack Overflow用户
提问于 2019-09-24 02:50:25
回答 1查看 1.4K关注 0票数 1

我有这个错误

"leaflet.js:5,Uncaught :无法读取未定义的属性'lat‘“。

这些点显示与风格和所有东西都很好,但只要我想点击一个点,什么都没有显示,我在开发工具中得到了这个错误。

知道少了什么吗?

谢谢

代码语言:javascript
复制
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)
 })
EN

回答 1

Stack Overflow用户

发布于 2019-10-24 14:21:02

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

您可以添加layer.getLatLng = null;在Leaflet.VectorGrid.js中,要解决这个问题,请参见下面的内容:

代码语言:javascript
复制
_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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58072432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档