有没有一种方法可以计算出地形上两个坐标之间的距离,而不是像乌鸦飞过一样?

时间:2019-09-26 15:36:32

标签: javascript openstreetmap gpx

我正在寻找一种找到具有坐标数据的两个坐标之间的距离的方法,但是我希望解决方案考虑到两个点之间的地形,即地面上它们之间的最短距离,而不是“乌鸦飞翔”。

我发现并使用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公式计算的距离。但是如何计算呢?

1 个答案:

答案 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)

因此应该起作用-但如上所述,如果两点之间的长度很长,这将不可避免地变得更加不准确。 (到那时,我不是数学家,也不是更好地了解了,将长腿分段并分段计算每个距离。)