传单:如何在 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.animatedMarker
在this 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();
});
我使用 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.animatedMarker
在this 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();
});