如何在地球平面图上绘制表示两点之间最短距离的曲线?
当然,这条线不会是一条直线,因为地球是弯曲的。(例如,两个机场之间的最短距离是弯曲的。)
编辑:谢谢大家的回答 - 很抱歉我选择解决方案的速度有点慢 :/
如何在地球平面图上绘制表示两点之间最短距离的曲线?
当然,这条线不会是一条直线,因为地球是弯曲的。(例如,两个机场之间的最短距离是弯曲的。)
编辑:谢谢大家的回答 - 很抱歉我选择解决方案的速度有点慢 :/
我从Aviation Formulary获取到如下信息:
在这个例子里:
两点之间的距离
坐标为{lat1,lon1}和{lat2,lon2}的两点之间的大圆距离d可以由以下公式计算:
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))
以及
大圆上的中间点
在前面的部分,我们已经找到了大圆上给定纬度或经度的中间点。这里我们要找到大圆路线上给定距离(d)的一定比例(f)的点(lat,lon)。假设起始点为(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)