在此处Leaflet的文档:http://leafletjs.com/reference-1.2.0.html#circlemarker中,它说CircleMaker扩展了Circle,并且它是一样的,除了半径是用像素而不是米来指定的,因此即使缩放 map ,圆也保持恒定的大小。

但是,我确实需要圆,因为我试图在 map 上绘制100m半径的圆。为此,我使用以下代码:

var geojsonLayer = new L.GeoJSON(null,{
pointToLayer: function (latlng){
    return new L.CircleMarker(latlng, {
        radius: 5,
        fillColor: "#ff7800",
        color: "#000",
        weight: 1,
        opacity: 1,
        fillOpacity: 0.8,
    });
}});

map.addLayer(osm);
map.addLayer(geojsonLayer);
geojsonLayer.addGeoJSON(jsonExample);

但是,如果我将代码更改为使用“Circle”而不是CircleMaker,则可以正常运行,整个 map 无法加载,并且出现JavaScript错误:
Error: Error: Invalid LatLng object: (56.229917, NaN)

我可以通过对geojson进行预过滤以删除缺乏纬度和经度的点来解决此问题,但是我很困惑:Circle和CircleMaker都指定它们将LatLng对象作为中心点的规范,我不知道无法得知某个LatLng对象如何有效用作CircleMarker的中心点,但是如果用作Circle的中心点则无效。

我是否忽略了一些明显的问题,或者这仅仅是Leaflet中的弱点和/或错误,我只需要解决?

最佳答案

我通过更改L.circle中leaflet.js的_getLngRadius()方法来解决此问题。在传单版本0.4.4中,它位于4913行附近。

此方法与circleMarker中的方法不同,因为它可以动态计算圆的半径。如果您更改具有







没关系。

09-25 20:47