传单:如何在 geoJSON 折线上使用 `getLatLngs`?

Leaflet: How to use `getLatLngs` on a geoJSON polyline?

我使用 turf.js 创建一个名为 bezier 的 geoJSON 折线对象,如下所示:

var linestring = turf.linestring(
        [[121.465, 31.233], [121.500634, 31.233499], [121.588107, 31.190172], [121.501545, 31.207394], [121.337514, 31.196079]]
        , {
            "stroke": "#25561F",
            "stroke-width": 5
        });

var bezier = turf.bezier(linestring, 50000, 0.85);

bezier.properties = {
    "stroke": "#6BC65F",
    "stroke-width": 5,
    "description": "Bezier line from polyline"
}

L.mapbox.featureLayer().setGeoJSON(bezier).addTo(map);

然后,我用bezier.geometry.coordinates访问了它的点数组。但是我真正需要的是LatLng对象的数组(因为L.animatedMarkerthis plugin需要 latlngs),我想知道是否有一种方法可以提取 LatLng 数组,就像 getLatLngs 方法对传单对象所做的那样。

您首先需要从您将其添加到的图层中获取对实际图层的引用,在本例中就是您的 L.mapbox.featureLayer。完成后,您可以使用 getLatLngs 方法。您可以通过多种方式执行此操作:

使用layeradd事件,最干净的方式:

var featureLayer = L.mapbox.featureLayer().addTo(map);

featureLayer.on('layeradd', function (e) {
    var latLngs = e.layer.getLatLngs();
})

var featureLayer = L.mapbox.featureLayer().setGeoJSON(bezier).addTo(map);

如果您像现在这样只插入一个图层,您也可以直接从要素图层中包含的图层对象中获取它:

var key = Object.keys(featureLayer._layers)[0];
var latLngs = featureLayer._layers[key].getLatLngs();

或者,如果您的 featureLayer 中有多个图层并且不想使用事件,您可以遍历 featureLayer 并从那里获取它:

featureLayer.eachLayer(function (layer) {
    var latLngs = layer.getLatLngs();
});