大佬教程收集整理的这篇文章主要介绍了delphi – 如何计算两个WGS84坐标之间的方位角(北角),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有一种简单的方法来计算这些点之间的线的方位角,即向北的角度?@H_616_3@
天真的方法是假设一个笛卡尔坐标系(因为这些点非常接近)并且只是使用@H_616_3@
sin(a)= abs(L2-L1)/ sqrt(sqr(L2-L1)sqr(B2-B1))@H_616_3@
a =方位角
L1,L2 =经度
B1,B2 =纬度@H_616_3@
当坐标远离赤道时,误差将更大,因为两个纵向度之间的距离变得越来越小于两个纬度之间的距离(其保持不变).@H_616_3@
我找到了一些非常复杂的公式,我并不是真的想要实现,因为它们对于那些非常接近的点似乎有点过分而且我不需要非常高的精度(两位小数就足够了,一个可能很好,因为那里是其他降低精度的因素,比如GPS返回的那些因素.@H_616_3@
也许我可以根据纬度确定一个近似的纵向修正系数,并使用这样的东西:@H_616_3@
sin(a)= abs(L2 * f-L1 * f)/ sqrt(sqr(L2 * f-L1 * f)sqr(B2-B1))@H_616_3@
其中f是修正系数@H_616_3@
任何提示?@H_616_3@
(我不想为此使用任何库,特别是那些不需要运行时许可证的库.任何MPLed Delphi source都会很棒.)@H_616_3@
uses Math,...; ... const cNO_ANGLE=-999; ... function getAnglebetweenPoints(X1,Y1,X2,Y2:doublE):double; var dx,dy:double; begin dx := X2 - X1; dy := Y2 - Y1; if (dx > 0) then result := (Pi*0.5) - ArcTan(dy/dX) else if (dx < 0) then result := (Pi*1.5) - ArcTan(dy/dX) else if (dy > 0) then result := 0 else if (dy < 0) then result := Pi else result := cNO_ANGLE; // the 2 points are equal result := RadToDeg(result); end;
>请记住处理2点相等的情况(检查结果是否等于cNO_ANGLE,或修改函数以抛出异常);>此功能假设您在平坦的表面上.你所提到的距离很短,这一切都很好,但是如果你要计算世界各地城市之间的航向,你可能会想要研究一些具有地球形状的东西;>最好为此函数提供已映射到平面的坐标.您可以将WGS84 Latitude直接输入Y(并且Lon进入X)以获得粗略的近似值.@H_616_3@
以上是大佬教程为你收集整理的delphi – 如何计算两个WGS84坐标之间的方位角(北角)全部内容,希望文章能够帮你解决delphi – 如何计算两个WGS84坐标之间的方位角(北角)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。