1

bezier我使用turf.js创建了一个 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.animatedMarker这个插件中需要 latlngs),我想知道是否有一种方法可以像在传单对象上所做的那样提取LatLng数组getLatLngs.

4

1 回答 1

2

您首先需要从您添加到的图层中获取对实际图层的引用,在这种情况下,这将是您的 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();
});
于 2015-03-19T03:08:07.177 回答