How to calculate the distance of a polyline in Leaflet like geojson.io?(如何计算像geojson.io这样的Leaflet中折线的距离?)
问题描述
我正在使用 Mapbox 和 Leaflet 绘制地图,我应该让用户绘制多边形并计算并显示该多边形的面积,我还需要让用户绘制一条折线并显示折线的距离.
I am working on a map with Mapbox and Leaflet and I am supposed to let the user draw polygons and calculate and show the are of that polygon and I also need to let the user draw a polyline and show the distance of the polyline.
我已经算出了多边形区域的特征,但我不知道如何计算折线的距离.
I have figured out the polygon area feature but I cannot figure out how to calculate the distance of a polyline.
我的代码如下:
loadScript('https://api.tiles.mapbox.com/mapbox.js/plugins/leaflet-draw/v0.2.2/leaflet.draw.js', function(){
loadScript('https://api.tiles.mapbox.com/mapbox.js/plugins/leaflet-geodesy/v0.1.0/leaflet-geodesy.js', function(){
var featureGroup = L.featureGroup().addTo(map);
var drawControl = new L.Control.Draw({
edit: {
featureGroup: featureGroup
},
draw: {
polygon: true,
polyline: true,
rectangle: false,
circle: false,
marker: false
}
}).addTo(map);
map.on('draw:created', showPolygonArea);
map.on('draw:edited', showPolygonAreaEdited);
function showPolygonAreaEdited(e) {
e.layers.eachLayer(function(layer) {
showPolygonArea({ layer: layer });
});
}
function showPolygonArea(e) {
var type = e.layerType,
layer = e.layer;
if (type === 'polygon') {
featureGroup.clearLayers();
featureGroup.addLayer(e.layer);
e.layer.bindPopup(((LGeo.area(e.layer) / 1000000) * 0.62137).toFixed(2) + ' mi<sup>2</sup>');
e.layer.openPopup();
}
if (type === 'polyline') {
featureGroup.clearLayers();
featureGroup.addLayer(e.layer);
// What do I do different here to calculate the distance of the polyline?
// Is there a method in the LGeo lib itself?
// e.layer.bindPopup(((LGeo.area(e.layer) / 1000000) * 0.62137).toFixed(2) + ' mi<sup>2</sup>');
e.layer.openPopup();
}
}
});
});
LGeo lib 本身是否有一种方法可以帮助我计算折线的距离?geogson.io 的开发人员也有一种计算距离的方法,但我似乎无法通过查看他们的代码来弄清楚.我不是经验丰富的 Javascript 开发人员.欢迎任何帮助.:)
Is there a method in the LGeo lib itself which will help me calculate the distance of the polyline? The devs at geogson.io also have a way to calculate the distance but I cannot seem to figure it out looking at their code. I am not a seasoned Javascript developer. Any help is welcome. :)
推荐答案
所以我终于自己想出了一个算法.我基本上找到了包含折线的所有 latlngs
的折线的属性,然后我让它通过一个循环,我使用 Leaflet 中的 distanceTo
方法来计算距离点之间并不断将它们添加到 totalDistance
变量中.
So I finally came up with an algorithm myself. I basically found the property of the polyline which holds all the latlngs
of the polyline and then I made it go through a loop and I used the distanceTo
method from Leaflet to calculate distance between points and kept on adding them to a totalDistance
variable.
if (type === 'polyline') {
featureGroup.clearLayers();
featureGroup.addLayer(e.layer);
// Calculating the distance of the polyline
var tempLatLng = null;
var totalDistance = 0.00000;
$.each(e.layer._latlngs, function(i, latlng){
if(tempLatLng == null){
tempLatLng = latlng;
return;
}
totalDistance += tempLatLng.distanceTo(latlng);
tempLatLng = latlng;
});
e.layer.bindPopup((totalDistance).toFixed(2) + ' meters');
e.layer.openPopup();
}
这篇关于如何计算像geojson.io这样的Leaflet中折线的距离?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何计算像geojson.io这样的Leaflet中折线的距离?
- 失败的 Canvas 360 jquery 插件 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- addEventListener 在 IE 11 中不起作用 2022-01-01
- 400或500级别的HTTP响应 2022-01-01
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- Flexslider 箭头未正确显示 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- Fetch API 如何获取响应体? 2022-01-01