====== Location ====== ===== 关于地理位置信息 ===== * [[wp>Geographic_coordinate_system|经纬度]] * [[wp>GPS]] , [[wp>World_Geodetic_System|WGS-84]] * [[wp>Restrictions_on_geographic_data_in_China]], GCJ-02, BD-09 * [[http://bbs.amap.com/thread-18617-1-1.html#rd|如何解决坐标转换,坐标偏移]] * [[http://kongxz.com/2013/10/wgs-cgj/|关于流传的转换算法]] * 最早流出的 WGS-84 至 GCJ-02 的转换算法出自 https://on4wp7.codeplex.com/SourceControl/changeset/view/21483。我们看一下它的代码中的一小部分,处理纬度加偏的前半部分: -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.Sqrt(Math.Abs(x)) + (20.0 * Math.Sin(6.0 * x * pi) + 20.0 * Math.Sin(2.0 * x * pi)) * 2.0 / 3.0 + (20.0 * Math.Sin(y * pi) + 40.0 * Math.Sin(y / 3.0 * pi)) * 2.0 / 3.0 + (160.0 * Math.Sin(y / 12.0 * pi) + 320 * Math.Sin(y * pi / 30.0)) * 2.0 / 3.0 * 这一部分已经体现了 GCJ-02 设计精巧的几点:这是一个很长的多项式,并且是很复杂的多项超越式。于是它难以进行反向运算、难以根据已知数据点反推出计算公式。且就算我们拿到了这个已知的转换算法的公式,要想求出它的反函数是非常困难的,于是如果我们要完成 GCJ-02 到 WGS-84 的逆转换,只能通过二分法来逼近。这个转换算法需要达到的要求是显而易见的:它必须是连续的,并且是单调的。连续才能确保地图不出现断点且覆盖所有区域;单调才能保证原先的位置相互关系转换后依旧成立。