2015-03-19 45 views
1

我创建一个使用turf.js这样叫bezier一个GeoJSON的折线对象:单张:如何在geoJSON折线上使用`getLatLngs`?

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方法在传单对象上所做的。

+0

什么是GeoJSON折线?哪有这回事。你的意思是GeoJSON LineString功能吗?或者,您的意思是通过“L.GeoJSON”层从GeoJSON LineString功能创建的'L.Polyline'对象?你也在谈论一个“传单对象”。你的问题很混乱,至少对我来说。为什么不提供一些代码或更好的JSFiddle或Plunker来演示你的问题。 – iH8 2015-03-19 02:22:58

+0

@ iH8抱歉的困惑..添加了创建GeoJSON'bezier'的代码。在bezier上有更简单的方法使用'getLatLngs'吗? – 2015-03-19 02:37:35

回答

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(); 
}); 
相关问题