高精度WGS84与GCJ-02坐标转换

本文介绍了如何利用Ceres库实现WGS84到GCJ-02坐标的高精度转换。通过解析求导和数值求导方法,即使在公式不精确或黑箱模式下也能实现高精度转换。文中提供了详细的方法解释和代码实现,并对比了不同方法的精度和时间消耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 一、转换原理

参见这一篇文章《使用ceres实现WGS84到GCJ-02坐标相互转换》

在上一篇日志提到,如果公开的WGS84坐标到GSJ-02坐标转换公式是精确公式,可借助Ceres自动求导进行高精度坐标转换;如果公开的WGS84坐标到GSJ-02坐标转换公式并非精确公式,且国测局使用的转换公式依然是多项式,在黑箱模式下,通过调用国测局提供的加密插件的WGS84坐标转GSJ-02坐标API,利用Ceres数值求导方式,依然可以实现高精度坐标转换。

利用Ceres库实现高精度转换已经是可行的,只是经过测试,Ceres的自动求导与数值求导相对于简单迭代法速度慢太多,在批量转换坐标时,已经不具备实用性了。因此,这一篇日志对坐标相互转换进行了改进。

  1. 假定公开的WGS84转GCJ-02公式是精确公式:进行逆转换时,以GCJ-02坐标为观测值,WGS84坐标为未知数列误差方程,对误差方程进行泰勒展开,取线性项作为近似方程。通过解析求导计算线性化后误差方程的系数矩阵(雅克比矩阵),进行迭代求解,获得高精度的转换坐标。
  2. 假定未知WGS84转GCJ-02公式,但是可以调用加密插件API:与1中方法类似,只是计算误差方程系数矩阵时因为不知道数学模型而无法解析求导,可以利用数值求导做替代。数值求导的效率会低于解析求导,但依然可以在“黑箱模式”下获取高精度的转换坐标。

公开的WGS84坐标转GCJ-02坐标公式为:

\Delta lo{n_0} = lo{n_{WGS84}} - 105

\Delta la{t_0} = la{t_{WGS84}} - 35

\Delta lo{n_1} = 300 + \Delta lo{n_0} + 2\Delta la{t_0} + 0.1\Delta lo{n_0}^2 + 0.1\Delta lo{n_0} \cdot \Delta la{t_0} + 0.1\sqrt {\left| {\Delta lo{n_0}} \right|}

+ \frac{2}{3}\left( {20\sin \left( {6\pi \cdot \Delta lo{n_0}} \right) + 20\sin \left( {2\pi \cdot \Delta lo{n_0}} \right)} \right)

+ \frac{2}{3}\left( {20\sin \left( {\pi \cdot \Delta lo{n_0}} \right) + 40\sin \left( {\frac{​{\pi \cdot \Delta lo{n_0}}}{3}} \right)} \right)

+ \frac{2}{3}\left( {150\sin \left( {\frac{​{\pi \cdot \Delta lo{n_0}}}{​{12}}} \right) + 300\sin \left( {\frac{​{\pi \cdot \Delta lo{n_0}}}{​{30}}} \right)} \right)

\Delta la{t_1} = - 100 + 2\Delta lo{n_0} + 3\Delta la{t_0} + 0.2\Delta la{t_0}^2 + 0.1\Delta lo{n_0} \cdot \Delta la{t_0} + 0.2\sqrt {\left| {\Delta lo{n_0}} \right|}

+ \frac{2}{3}\left( {20\sin \left( {6\pi \cdot \Delta lo{n_0}} \right) + 20\sin \left( {2\pi \cdot \Delta lo{n_0}} \right)} \right)

+ \frac{2}{3}\left( {20\sin \left( {\pi \cdot \Delta la{t_0}} \right) + 40\sin \left( {\frac{​{\pi \cdot \Delta la{t_0}}}{3}} \right)} \right)

+ \frac{2}{3}\left( {160\sin \left( {\frac{​{\pi \cdot \Delta la{t_0}}}{​{12}}} \right) + 320\sin \left( {\frac{​{\pi \cdot \Delta la{t_0}}}{​{30}}} \right)} \right)

{B_{WGS84}} = Deg2Rad(la{t_{WGS84}})

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值