虽然很多文章资料的坐标转换是说的高斯-克吕格投影等,但最后的实现仿真步骤很多是把AIS的经纬度转换为和雷达一样的极坐标
高斯-克吕格投影我又按照公式写个程序,但是貌似错了,后来查找资料,分带和中央经线把我搞得越来越头晕。
现在做的就是将AIS的WGS-84大地坐标系中的经纬度转换为目标船相对本船的距离和方位,与雷达数据格式统一。
公式算法参考http://blog.sina.com.cn/s/blog_658a93570101hynw.html
防止被删除,我复制过来。
最近自己做的一个小东西要用到经纬度方面的计算,查遍中文网页见到的要么基本上是一帮惜字如金装大爷的“砖家”,要么就是像贴膏药一样,啪,一大堆代码往上一贴,一点说明都没有,让人看不懂,有的看了半天看懂了,结果他用的公式要么有使用局限(但没有半点声明)要么根本就是个错的。所以现在将自己几天学习来的在这里总结一下,方便后来人少走弯路。
这里主要解决四个问题:
1、已知两点经纬度,求一点相对于另一点方位角;
2、已知两点经纬度,求两点间距离;
3、已知一点经纬度及与另一点距离和方位角,求另一点经纬度;
4、问题1与问题2的简化算法。
注:简化算法的运算量和对系统的运算精度要求都大大降低,但只在短距离内(高纬地区建议10km以下)可以保证精度,除简化算法之外的算法可适用于地球上任意两点。这里只是出于便于理解的目的来解释“原理”,具体到不同的编程环境还要自己做化简和注意单位。
在求算前我们先对符号及单位进行约定:
此处设定求B相对于A的方位角,即A为当前位置,B为目标位置
Aj:A点经度
Aw:A点纬度
Bj:B点经度
Bw:B点纬度
北纬为正,南纬为负;东经为正,西经为负
经纬度使用度,DDD.DDDDDD°,非度分或度分秒。
度数未加说明均采用角度制
R:地球平均半径
Azimuth:方位角,以真北为0度起点,由东向南向西顺时针旋转360度
A,B,C表示球面上的三个点及球面上“弧线”在该点处所夹的角
a,b,c表示A,B,C三点的对“弧”两端点与地心连线所夹的角(其实这里解释成ABC三点对弧的弧度更方便)
O为球心