Maps 传单:如何在geoJSON多段线上使用“getLatLngs”?
我创建了一个名为Maps 传单:如何在geoJSON多段线上使用“getLatLngs”?,maps,leaflet,mapbox,geojson,turfjs,Maps,Leaflet,Mapbox,Geojson,Turfjs,我创建了一个名为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",
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.animatedMarker
中需要LatLng),我想知道是否有一种方法可以提取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);
如果您只想像现在这样插入一个层,您还可以直接从featurelayer中包含的layers对象获取它:
var key = Object.keys(featureLayer._layers)[0];
var latLngs = featureLayer._layers[key].getLatLngs();
或者,如果您的featureLayer中有多个层,并且不想使用事件,您可以在featureLayer上循环并从那里获取它:
featureLayer.eachLayer(function (layer) {
var latLngs = layer.getLatLngs();
});
什么是
GeoJSON多段线
?没有这样的事。你是说GeoJSON行字符串功能吗?或者您是指通过L.GeoJSON
层从GeoJSON LineString功能创建的L.Polyline
对象?你也在谈论“传单对象”。你的问题很让人困惑,至少对我来说是这样。为什么不提供一些代码或更好的JSfiddle或Plunker来演示您的问题呢?@iH8很抱歉造成混淆。。添加了创建GeoJSONbezier
的代码。。在bezier
上是否有更简单的方法使用getLatLngs
?