一、问题概述
在移动端开发过程中,往往地图sdk或api(如高德地图)会提供GCJ02的坐标,而操作系统会提供WGS84坐标,两者之间需要一个相互转换的算法,才能满足我们日常的开发。而一般地图sdk或api只会提供WGS84到GCJ02的转换算法,我们需要一个反向算法,而且尽可能需要一个无损的反向算法。
二、问题定义
- 定义点P:
任意WGS84坐标P - 定义点Q:
P经过偏移算法,转换成的GCJ02坐标为点Q - 函数f:
- 问题定义:
已知Q、f,求P
三、一个猜想
1. 经验:
- 肉眼应该无法分辨现实中的广场和高德地图中的广场在形状上的畸变。
- 对于不同的点、,经过偏移后得到的、,不应该相同。
如果不满足上述两点,那么基于GCJ02的地图(如高德地图),在我们日常生活中将会变得毫无价值
2. 数学表达:
猜想一:
猜想二:
其中称为在作用下的畸变率
3. 验证:
我们无法知道f的内部细节,因此无法从数学上证明上述经验公式。但是我们可以进行大规模验证,验证方式是循环以下步骤
- 在China范围内随机两个不同的点、
- 使用高德地图sdk或api计算、
- 计算的畸变率
- 计算是否相等
- 顺便计算一下、的值
大量重复上述步骤,可获得畸变率近似最大值,也可以顺便获得偏移量的近似最大值。经过长时间计算,我们发现:
。
因此我们可以认为。
4. 一个简单而重要推论:
推论一:
证明:
(猜想一)
(交换和的位置)
(推论一)
三、构建点序列
定义:
其中:
四、求极限
(等式两边同时减P)
(交换率)
(使用f的定义)
(等式两边取模)
(使用推论一)
(递归使用上一行的结论)
显然:
于是由夹逼定理可知:
因此,由第三章节中构建的点序列,最终会无限逼近P。
五、误差测算
令:
由于:
可知:
即:
由此可知:
各位可以按照自己的精度需求,取上述精度进行计算。