位置: 编程技术 - 正文

根据两点的经纬度求方位角和距离,等(根据两点的经纬度计算航向角)

编辑:rootadmin
原文地址:根据两点的经纬度求方位角和距离,等作者:多乎哉不多也多亦不多乎实乃少也

推荐整理分享根据两点的经纬度求方位角和距离,等(根据两点的经纬度计算航向角),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:根据两点的经纬度求方位角和距离,根据两点的经纬度计算方位角,根据两点的经纬度计算方位角,根据两点的经纬度求方位角和俯仰角,根据两点的经纬度计算航向角,根据两点的经纬度计算距离,根据两点的经纬度求方位角和俯仰角,根据两点的经纬度计算距离,内容如对您有帮助,希望把文章链接给更多的朋友!

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

这里主要解决四个问题:

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

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

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

4、问题1与问题2的简化算法。

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

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

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

Aj:A点经度

Aw:A点纬度

Bj:B点经度

Bw:B点纬度

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

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

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

R:地球平均半径

Azimuth:方位角,以真北为0度起点,由东向南向西顺时针旋转度

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

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

O为球心

L为AB两点间球面距离

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

一、方位角的求算

已知A、B两点经纬度,如何求出B相对于A的方位角?

——————————————————卖关子环节,可选择性跳过———————————————————

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

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

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

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

答案是肯定的。

现在我们开始计算

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

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

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

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

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

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

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

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

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

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

B点在第一象限,Azimuth=A;

B在第二象限,Azimuth=&#;A;

B在第三四象限,Azimuth=-A。

根据两点的经纬度求方位角和距离,等(根据两点的经纬度计算航向角)

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

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

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

二、距离的求算

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

公式为

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

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

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

经纬度(度)=DDD&#;MM.MMMM/

三、第二点经纬度的求算

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

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

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

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

已知Aj,Aw,L,R,Azimuth(这里的Azimuth依然定为B相对于A的方位角)。

首先求算c,

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

求得a之后我们求解C,

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

Bw=-a

Bj=Aj&#;C

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

四、简化算法

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

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

求算距离:

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

Ha为A点海拔高度,Hb为b点海拔高度

Xa=(R&#;Ha)×cos(Aw)×cos(Aj)

Ya=(R&#;Ha)×cos(AW)×sin(Aj)

Za=(R&#;Ha)×sin(Aw)

Xb=(R&#;Hb)×cos(Bw)×cos(Bj)

Yb=(R&#;Hb)×cos(Bw)×sin(Bj)

Zb=(R&#;Hb)×sin(Bw)

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

ΔX=Xa-Xb ΔY=Ya-Yb ΔZ=Za-Zb知道三个坐标轴方向上的差&#;后再用勾股定理就可以求出两点间距离了,即:这里说明一下,海拔高度H可有可无,如果有的话,注意H与R单位要统一。普通GPS接收机给出的海拔一般很不准确,所以不推荐使用。另外NMEA规范报文中有两个量涉及到海拔,注意计算。求算方位角如果想直接由经纬度求算方位角,则可以避开上面的坐标转换,直接这样求:上面这个式子的基本思路就是将经度和纬度差转化成地面距离再运用平面几何知识求解,化简之后即为上式(过程从略,可自行推导)这样,当

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

B在第二象限,Azimuth=&#;A;

B在第三四象限及Y轴负半轴,Azimuth=&#;A。

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

这种求方位角的算法代入了几个坐标&#;与谷歌地球比对,短距离内偏差在0.1度以下。

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

(度娘知道装大爷的ctrl&#;c党copy的时候注明出处。All rights reserved.)

升级JDK后SdkManager无法启动的问题 今天要把一个古老的工程从Eclipse迁移到AndroidStudio。于是开始了编译环境的搭建。首先启动AndroidStudio遇到一个错误提示:Primesizemustbemultipleof,什么-

no resource found that matches the given name &#;theme.appcompat.light.darkactionbar&#;. android studio noresourcefoundthatmatchesthegivenname'theme.appcompat.light.darkactionbar'.使用Androidstudio的时候莫名其妙遇到了这个问题。网上搜索了一圈,发现如下解决方法:1、在ap

Android LayoutInflater原理分析,带你一步步深入了解View(一) 有段时间没写博客了,感觉都有些生疏了呢。最近繁忙的工作终于告一段落,又有时间写文章了,接下来还会继续坚持每一周篇的节奏。有不少朋友跟

标签: 根据两点的经纬度计算航向角

本文链接地址:https://www.jiuchutong.com/biancheng/370938.html 转载请保留说明!

上一篇:Android提高十七篇之多级树形菜单的实现(怎样提升android的版本为最新版本?)

下一篇:升级JDK后SdkManager无法启动的问题(升级jdk版本)

  • 税控盘抵扣税款
  • 报销为什么不能多家赔付
  • 公司购买金蝶属于什么费用
  • 机器维修费属于变动成本吗
  • 建筑业属于货物行业吗
  • 广告公司个体户自己可以开发票
  • 持有待售流动资产如果说以历史成本计量的时候怎么弄
  • 税务局财务报表报送期限
  • 新税法讲课费如何代缴个税
  • 财务发票报销时限是多久
  • 短期借款,应付票据,应付账款和应交税费属于
  • 只有税控盘没有报税盘
  • 借款可以转注资款吗
  • 简易计税项目可以差额征税吗
  • 案例分析个人心得体会
  • 预付账款的借方是应付账款的哪方
  • 建筑包工包料是包哪些
  • 销售退回冲减主营业务收入吗
  • 公司注销了帐户钱能办款
  • 不可抗力后果承担
  • 调整上年少计提税金及附加
  • 企业所得税汇算表
  • 浏览器显示英语怎么设置成中文
  • 产权登记在开发商名下怎么过户
  • php使用memcache
  • win7纯净版系统安装教程
  • 出纳岗位的职责是什么
  • php通用分页类
  • 软件开发企业的税收优惠政策
  • 签了购房合同贷款办不下来怎么办
  • 企业股权转让所得可以弥补亏损吗
  • 换出长期股权投资的会计处理
  • 异地开办分公司流程
  • 核销固定资产时会计处理
  • 原材料按计划成本核算例题
  • 采购折让分录
  • jsoup js
  • lvresize命令
  • 购买土地需要缴纳增值税吗
  • 装修费用记什么科目
  • 增值税附加税减免政策2022年
  • 补交上年所得税怎么调表
  • 进项税额转出加计抵减会计分录
  • 个体户做账流程新手必看
  • 预付卡账务处理在注会
  • 百旺税控盘汇总上传如何检查
  • 差额增收企业怎么做账
  • 固定资产清理账户借方
  • 小规模个体工商户怎么交税
  • sql分组计算
  • 车辆维修费如何赔偿
  • 人力资源行业企业成长
  • sqlserver数据库中进行查询所使用的语言为
  • 缴纳车辆购置税有发票吗
  • 装卸费专票
  • 接受捐赠的固定资产按什么入账
  • 营改增后增值税增加了什么征收范围
  • 收到的现金货款转到公户备注往来款可以吗
  • 计划成本下
  • 结转公允价值变动
  • 应付票据在资产负债表怎么填列
  • 装饰公司购买的安装服务怎么入账
  • 现金投资属于什么会计科目
  • sql多表关联修改操作
  • sql 判断数据是否存在
  • mysql数据库迁移到达梦
  • icloud win10
  • 比较常见的别墅户型
  • ubuntu写脚本
  • windows查看文件内容的命令
  • linux 网页
  • unity3d的游戏
  • 浏览器复制插件在哪
  • python 技巧总结
  • Unity3D游戏开发标准教程
  • python怎么用命令行
  • javascript面向对象 第三方类库
  • 江苏发票真伪查询网站
  • 烟台市独生子女费 打什么电话咨询
  • 新疆国税网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设