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

时间:2015-03-19 01:50:35

标签: maps leaflet mapbox geojson turfjs

我使用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对象的数组(因为this plugin中的L.animatedMarker需要latlngs ),我想知道是否有一种方法来提取LatLng数组,就像getLatLngs方法在传单对象上所做的那样。

1 个答案:

答案 0 :(得分:1)

您首先需要从您添加它的图层中获取对实际图层的引用,在这个实例中,这将是您的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);

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

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

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

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