经纬度 + 距离 + 方向角 --> 经纬度

17

所以,我有以下函数,它是从网上找到的一个公式改编而来,用于计算两个经纬度坐标之间在球形地球上的距离(单位为英里):

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

丹,你能否请发一下你得到的解决方案?我需要它并想知道你是否真的得到了答案? - SpoiledTechie.com
请查看被接受的答案。我最终采用了那个公式,它运行良好;我强烈建议查看回答者提到的The Aviation Formulary网站,对我非常有帮助。 - DanM
1个回答

16

我大多数这类公式都是从航空公式表中获取的。

他给出的公式如下:

已知方位角和距离求经纬度

如果点1到某个点{lat,lon}的方位角为tc,并且距离为d,则该点的经纬度为:

 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 < 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”代表真实航向(以从北方顺时针方向的弧度表示),并且他给出的距离是沿着地球表面的弧度。这在公式手册的第一个部分中解释(以及用于将海里转换为弧度的公式)。此外,请查看该页面上的“实现说明”和“示例”。

准备揭示我对地理空间的一无所知,这句话是什么意思,“out on the tc radial” 是什么意思?如果我走“out on the 90 degree radial”,这意味着我向东行驶吗? - DanM
是的。抱歉,页面上的许多术语都与航空有关。您应该阅读页面的第一部分,其中解释了角度和距离以弧度为单位。 - Paul Tomblin
1
"tc"代表“真航向”。还请查看该页面的“示例”和“实现说明”。 - Paul Tomblin
丹,你有没有弄到第二个东西的函数?我急需一个! - Lee Armstrong
“d”是用什么单位来衡量的?根据页面显示,它似乎是以弧度为单位衡量的,但这有什么意义呢?如果您想要以米为单位的距离,应该使用什么单位? - devios1
没事了,我找到了一个链接:http://stackoverflow.com/questions/25138862/converting-earth-kilometers-to-radians-in-php,这使得转换变得容易。 :) - devios1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接