计算地球平面地图上2点之间的最短路径

时间:2009-12-08 16:28:47

标签: math geometry geography

如何绘制表示地球平面地图上2点之间最短距离的曲线?

当然,这条线不是直线,因为地球是弯曲的。 (例如,两个机场之间的最短距离是弯曲的。)

编辑:谢谢所有答案的人 - 对不起我选择解决方案的速度很慢:/

2 个答案:

答案 0 :(得分:11)

我从Aviation Formulary获得此类信息。

在这种情况下:

  

点之间的距离

     

之间的大圆距离d   带坐标的两个点   给出{lat1,lon1}和{lat2,lon2}   由:

     

d=acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2))

     

数学上等效的公式,   这不太容易四舍五入   短距离错误是:

     

d=2*asin(sqrt((sin((lat1-lat2)/2))^2 + cos(lat1)*cos(lat2)*(sin((lon1-lon2)/2))^2))

  

大圆上的中间点

     

在前面的部分我们发现了   大圆上的中间点   给出横穿纬度或   经度。我们在这里找到要点   (lat,lon)给定的一小部分   它们之间的距离(d)。假设   起点是(lat1,lon1)和   最后一点(lat2,lon2),我们想要   这一点是伟大的一个分数   圈子路线。 f = 0是点1.f = 1是   要点2.这两点不可能   对映(即lat1 + lat2 = 0和   abs(lon1-lon2)= pi)因为那时候   路线未定义。中间体   然后给出纬度和经度   由:

    A=sin((1-f)*d)/sin(d)
    B=sin(f*d)/sin(d)
    x = A*cos(lat1)*cos(lon1) +  B*cos(lat2)*cos(lon2)
    y = A*cos(lat1)*sin(lon1) +  B*cos(lat2)*sin(lon2)
    z = A*sin(lat1)           +  B*sin(lat2)
    lat=atan2(z,sqrt(x^2+y^2))
    lon=atan2(y,x)

答案 1 :(得分:2)

要将地球表面上两点之间的3D最短路径绘制到地球表面的2D地图上,您必须知道地球的3D表面是如何投影到相关的2D地图上的。如果您知道所使用的投影,则只需将其应用于3D最短路径即可将其投影到2D地图上。如果您不知道所使用的确切投影,但可以通过某种界面(即输入3D曲面坐标 - >输出2D地图坐标)访问它,您可以沿3D曲面路径采样点,生成相应的通过所述界面映射点,然后用线段/贝塞尔曲线/等近似投影路径。通过预测的样本点。