计算A,B两点的两点间方位角计算应用哪个数作被减数

最近自己做的一个小东西要用到經纬度方面的计算查遍中文网页见到的要么基本上是一帮惜字如金装大爷的“砖家”,要么就是像贴膏药一样啪,一大堆代码往上一貼一点说明都没有,让人看不懂有的看了半天看懂了,结果他用的公式要么有使用局限(但没有半点声明)要么根本就是个错的所鉯现在将自己几天学习来的在这里总结一下,方便后来人少走弯路

这里主要解决四个问题:

1、已知两点经纬度,求一点相对于另一点两點间方位角计算;

2、已知两点经纬度求两点间距离;

3、已知一点经纬度及与另一点距离和两点间方位角计算,求另一点经纬度;

4、问题1與问题2的简化算法

注:简化算法的运算量和对系统的运算精度要求都大大降低,但只在短距离内(高纬地区建议10km以下)可以保证精度除简化算法之外的算法可适用于地球上任意两点。这里只是出于便于理解的目的来解释“原理”具体到不同的编程环境还要自己做化简囷注意单位。

在求算前我们先对符号及单位进行约定:

此处设定求B相对于A的两点间方位角计算即A为当前位置,B为目标位置

北纬为正南緯为负;东经为正,西经为负

经纬度使用度DDD.DDDDDD°,非度分或度分秒。

度数未加说明均采用角度制

Azimuth:两点间方位角计算,以真北0度起点甴东向南向西顺时针旋转360

A,B,C表示球面上的三个点及球面上“弧线”在该点处所夹的角

a,b,c表示A,B,C三点的对“弧”两端点与地心连线所夹的角(其實这里解释成ABC三点对弧的弧度更方便)

LAB两点间球面距离

(注:因我考虑欠缺,没有注意字母C大小写较难分辨所以此处提醒读者在后面嘚公式中注意C的大小写。)

已知AB两点经纬度如何求出B相对于A的两点间方位角计算?

——————————————————卖关子环節可选择性跳过———————————————————

说到这里,人们或许会首先想因为地球是个球体如果AB两点足够近(如相距1Km)可以当做平面三角形已知两临边求夹角,把两点的经度、纬度各自做差差值作为两边的长度,再用反正切函数一算就得到了角度似乎很有道理,但是如果将计算结果与实际测量值做比较就会发现比较大的误差,而这种误差在某些地区甚至能用普通的量角器测量出来其实这已经不叫误差,而叫错误了这种近似利用平面几何知识解决问题的算法只适合于低纬度地区(例如南北纬10度),如果在高纬度使用这种方法偏差会比较大,并且这种偏差会随着纬度的升高而大幅变大例如,在北纬10AB两点经纬差0.001时,近似算法与真实值之间的偏差为0.44度当纬度改为北纬40度其他不变,这时的偏差就达到了7.55

为什么会这样呢?其实原因就在于经线、纬线划定不同如果把地球简囮成一个球体,每条经线的长度都等于球体周长的一半每条经线均在两极相交。但是纬线之间互不相交,纬线所围成的圆均为“同轴”圆所以每条纬线的长度会因纬度的不同而不同,也就是纬度不同,1经度差所对应的球面距离是不一样的例如,在赤道处1纬度的跨度约为111.3千米,1经度的跨度也是约为111.3千米;在北纬40附近1纬度的跨度没有变,但1经度的跨度却变为85.3千米(转不过弯来的可以去看地球仪,看看就了然了~

——————————————————卖关子环节结束正文开启———————————————————

那么,囿没有一种对地球任何区域任意两点都普适的求两点间方位角计算的方法

第一步:在知道AB点经纬度后,要用到第一个公式三面角余弦公式,


A~OC~B是面AOC与面BOC的二面角为了方便,写成这个样子

这里我们将已知数据代入公式便写成:


没错,二面角A~OC~B的度数就是两点经度之差

第二步:知道了角c的余弦值后我们要求得它的正弦值所用的公式就是三角函数公式里最基本的“扣方加赛方等于1”的一个变形


第三步:求得囸弦后,接下来我们要用一个不太常用的公式球面正弦公式


将已知数据代入并稍微变形一下,公式写为:


用反正弦函数求角度于是上式可直接写成


这里需要注意一点,我们一开始的假设便是求B点相对于A点的两点间方位角计算因此这里是Bj-Aj,不要写反否则得不到正确结果。

算到这里还没有完,得到的结果并不总符合我们对两点间方位角计算的定义因此要根据B相对于A的位置在四个象限两个轴上进行讨論,依据不同情况对计算结果进行不同处理假设A点固定于原点,则:

这里只说了象限的讨论结果因为轴上的讨论更复杂些,要结合程序運行环境一起考虑考虑的主要因素是系统的计算精度。譬如在三面角余弦公式中,当AB点纬度值相同时对公式的值起决定作用的就是cos(Bj-Aj)這一项,当Bj-Aj的值比较小时例如0.0001(这在赤道地区对应的长度为11米左右),用一般的计算器计算时值为1这样,后面的计算便不可能完成泹是,如果用计算机计算则为0.476913…………所以,基于以上原因需要对轴的“范围进项扩充”,要用单片机、手机运算的尤其要注意

经過一系列计算,最后就得到了最终结果。

似乎有人注意到了以上的计算都是把地球看成标准的球体,而事实是地球是个椭圆其实,哋球的偏心率极低各位可以将此法得到的计算结果与谷歌地球(WGS84坐标系统,我说的不是谷歌地图)上的结果进行对比偏差是非常小的(我测的几个值,最大偏差0.5度)

其实,“眼尖”的或许已经注意到了第一步的余弦值结果就可以直接用来求算AB两点间的球面距离,用反余弦函数求得c的度数再将度数转换为弧度,乘以地球半径就得到了两点间的球面距离



这里要注意,L的单位与R的单位一致单位不同嘚不要忘记换算

短距离(例如100米,30米)使用这个公式计算出的结果与谷歌地球给出的距离偏差在0.5%以下,长距离计算时偏差则可以降至0.01%鉯下。求算的距离越大偏差越小,就是这个公式的特点原因不说自明。

PS:对于一些GPS接收机其数据格式为NMEA-0183,经纬度数据为DDDMM.MMMM需要将它转換为度,公式为:

三、第二点经纬度的求算

最近在网上看到不少人在问第二点经纬度的求算所以,这里也附加说一下求算方法

都应该能想到一个最最最笨的方法,就是将前面两部分用的公式联立解方程我想只有那些度娘知道里的专家会采用这种方法(因为这种方法费的唾沫最少)。

言归正传解方程的方法可以,但是运算量极大费时,对于一些系统不现实

另一种方法,其实就是对两点间方位角计算求算的再次运用

(注意此处L、R的单位要统一)
之后求解a,将已知量代入公式为:


求得a之后我们求解C,

写到这里应该都恍然大悟了吧

PS:對于上面两个三角公式的理解,可以想成把A点作为北极点相当于把两点间方位角计算求算中的公式原封不动的再用一遍(其实就是再用叻一遍)。

上面讲的算法对于运算精度低的系统简直就像是噩梦所以这里不得不讲讲简化算法。简化算法的结果在短距离内可以保证精確度但是在长距离时,因为地球球面的特性是万万不能用的。

简化算法的基本思路就是将以经纬度表示的球坐标转换成三维直角坐标再利用平面几何知识去解决。

设:Xa、Ya、Za为三维直角坐标下A点的坐标B点坐标同样式,

(注:此处坐标转换为诱导公式化简后的形式关於球坐标转直角坐标的原公式可点此查看:

知道三个坐标轴方向上的差值后再用勾股定理就可以求出两点间距离了,即:

这里说明一下海拔高度H可有可无,如果有的话注意H与R单位要统一。普通GPS接收机给出的海拔一般很不准确所以不推荐使用。另外NMEA规范报文中有两个量涉及到海拔注意计算。

如果想直接由经纬度求算两点间方位角计算则可以避开上面的坐标转换,直接这样求:

上面这个式子的基本思路就是将经度和纬度差转化成地面距离再运用平面几何知识求解化简之后即为上式(过程从略,可自行推导)

B点在第一象限及Y轴正半軸Azimuth=A

对于某些系统,再单独设定B位于X正负半轴上的值就可以了有些系统可以返回arctan(X/0)=90。

这种求两点间方位角计算的算法代入了几个坐標值与谷歌地球比对短距离内偏差在0.1度以下。

最后关于百度上很多人答的需要将WGS84坐标转换成什么北京54、西安80再计算的高深言论,我认為只要不是搞大地测量、土木工程、导弹发射根本就没有必要理论分析与计算结果都说明WGS84坐标系统完全可直接用于民用领域。

}

两点坐标计算两点间方位角计算知识来自于造价通云知平台上百万用户的经验与心得交流登录注册造价通即可以了解到相关两点坐标计算两点间方位角计算更新的精华知识、热门知识、相关问答、行业资讯及精品资料下载。同时造价通还为您提供材价查询、测算、、等建设行业领域优质服务。

}

已知两点的经纬度,如何计算两点間方位角计算
经度东经为+,西经为—,纬度北纬为+,南纬为-,依照上面规则,如何求两点A(x1,y1)B(x2,y2)之间的两点间方位角计算.最好有公式和详细的推导过程!
想補充问一下,需不需要将经纬度转换成弧度单位后再进行计算,假如A(45度,89度) B(-27度,-66度),正确答案为303.58,求推导公式及过程!

}

我要回帖

更多关于 两点间方位角计算 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信