当前位置:  开发笔记 > 人工智能 > 正文

Lat/Lon +距离+标题 - > Lat/Lon

如何解决《Lat/Lon+距离+标题->Lat/Lon》经验,为你挑选了1个好方法。

所以:我有以下功能,改编自在线找到的公式,它采用两个纬度/经度坐标,并以英里(沿着球形地球)找到它们之间的距离:

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



1> Paul Tomblin..:

我从航空公式中获得了大部分类型的公式.

他给出的公式是:

Lat/lon给出径向和距离

点{lat,lon}是距离点1的tc径向距离d out,如果:

 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

    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"代表真正的路线(从北方顺时针方向的弧度),并且他给出的距离是沿着地球表面的弧度弧度.在处方集的第一部分中解释了这一点(以及从海里转换的公式).另外,请查看该页面上的"实施说明"和"工作示例".

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有