所以:我有以下功能,改编自在线发现的公式,它采用两个纬度/经度坐标,并以英里(沿着球形地球)找到它们之间的距离:
public static double distance (double lat1, double lon1, double lat2, double lon2) {
double theta = toRadians(lon1-lon2);
lat1 = toRadians(lat1);
lon1 = toRadians(lon1);
lat2 = toRadians(lat2);
lon2 = toRadians(lon2);
double dist = sin(lat1)*sin(lat2) + cos(lat1)*cos(lat2)*cos(theta);
dist = toDegrees(acos(dist)) * 60 * 1.1515 * 1.609344 * 1000;
return dist;
}
据我所知,这很好用。
我需要的是第二个函数,它使用完全相同的地球几何模型,取一个纬度/经度对[A],航向和距离,并输出一个新的纬度/经度对[B] ]如果你从点[A]开始,并在给定的航向上行驶了给定的距离,你就会在[B]点结束。
这就是我的几何技能让我完全发挥作用的事实:)
非常感谢任何帮助!
谢谢, -Dan
答案 0 :(得分:15)
我从The Aviation Formulary获得了大部分类型的公式。
他给出的公式是:
给定径向和距离的纬度/经度
点{lat,lon}是距离d out 从第1点开始的tc径向如果:
lat=asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc)) IF (cos(lat)=0) lon=lon1 // endpoint a pole ELSE lon=mod(lon1-asin(sin(tc)*sin(d)/cos(lat))+pi,2*pi)-pi ENDIF
该算法限于距离使得dlon <1。 pi / 2,即 那些延伸不到一个的人 周长的四分之一 经度上的地球。一个完全 一般,但更复杂 算法是必要的,如果更大 允许距离:
lat =asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc)) dlon=atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(lat)) lon=mod( lon1-dlon +pi,2*pi )-pi
请注意,他使用“tc”代表真正的路线(从北方顺时针方向的弧度),并且他给出的距离是沿着地球表面的弧度弧度。在处方集的第一部分中解释了这一点(以及从海里转换的公式)。另外,请查看该页面上的“实施说明”和“工作示例”。