我正在寻找一种找到具有坐标数据的两个坐标之间的距离的方法,但是我希望解决方案考虑到两个点之间的地形,即地面上它们之间的最短距离,而不是“乌鸦飞翔”。
我发现并使用Haversine公式来计算“空中”的距离,但是显然,它不能得出人在地面上行走的真实距离,因为在两点之间可能会有一个上升的坡度和/或下降。点之间的距离越大,误差范围越大。
我已经采样了一个真实的.gpx文件,并将其数据转换为JSON格式。看起来像这样:
let jsonSample = [{
"lat": "57.107297", // 0
"lon": "-5.334734",
"ele": "957.00"
}, // distance between 0 and 1 => 169.1849929515954 m (as the crow flies) elevation difference: 50.210000000000036
{
"lat": "57.106590", // 1
"lon": "-5.332253",
"ele": "1007.21"
}, // distance between 1 and 2 => 162.49601252670058 m (as the crow flies) elevation difference: 23.789999999999964
{
"lat": "57.105537", // 2 (summit)
"lon": "-5.330387",
"ele": "1031.00"
}, // distance between 2 and 3 => 32.45395539826568 m (as the crow flies) elevation difference: -13
{
"lat": "57.105284", // 3
"lon": "-5.330119",
"ele": "1018.00"
}];
实际距离应大于使用Haversine公式计算的距离。但是如何计算呢?
答案 0 :(得分:0)
谷歌搜索“ haversine公式海拔”发现我this Math.SE question and answer。
注意注释,只要要测量的距离相距不远,就可以使用勾股定理,在其中添加高程增量。
我要用毕达哥拉斯(Pythagoras):让Haversine距离和dh分别为
<div className="list-container__item____title" onClick={() => this.handleItemToggle('item1')}> <a className="list-container__item____title--link">Click Here 1</a> <ClickMuncher> <OverlayModal modalType="full" modalName="item1" /> </ClickMuncher> </div>
。
类似
D=sqrt(d**2+dh**2)
因此应该起作用-但如上所述,如果两点之间的长度很长,这将不可避免地变得更加不准确。 (到那时,我不是数学家,也不是更好地了解了,将长腿分段并分段计算每个距离。)