我遇到此错误
“ 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)
})
答案 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;
}