用 GPS 测出来的坐标直接放到国内地图软件上,位置经常会偏移几十到几百米——这不是定位设备出了问题,而是中国对民用地图数据强制加了一层"偏移算法",背后是国家测绘安全政策。
WGS-84(World Geodetic System 1984)是全球卫星定位系统(GPS)使用的标准坐标系,手机、车载导航等设备的 GPS 芯片测出来的原始经纬度,都是基于这套坐标系统的——它是国际通用的、没有经过任何人为偏移处理的"真实"坐标。
GCJ-02是中国国家测绘地理信息局制定的坐标系统,在 WGS-84 的基础上,用一套非线性的加密算法人为引入偏移(俗称"火星坐标系")——这项措施的公开政策依据是出于国家地理信息安全的考虑,要求所有在中国境内提供地图服务的产品(高德地图、腾讯地图等国内主流地图服务商都是这个标准),必须使用经过这套偏移算法处理后的坐标,不能直接展示未经处理的真实 WGS-84 坐标。这也是为什么用手机 GPS(输出 WGS-84)标定的坐标,直接叠加到国内地图(使用 GCJ-02)上会出现明显的位置偏差——两者用的根本不是同一套坐标系。
百度地图使用的坐标系是 BD-09,它是在 GCJ-02 的基础上,又叠加了百度自己的一套加密算法产生的二次偏移——也就是说,同一个真实地点,WGS-84、GCJ-02、BD-09 三套坐标系统给出的经纬度数值可能相差几十到几百米,且偏移量因地区、因坐标位置不同而不同(不是简单的固定平移)。这也是为什么跨地图服务商拼接数据(比如把百度地图上标注的坐标导入高德地图)经常会出现明显错位,必须先做坐标系转换才能对齐。
由于 GCJ-02、BD-09 的具体加密算法官方从未完整公开(只公开了部分逆向工程后的近似算法),坐标系互相转换目前普遍使用的是社区逆向出的公开近似算法,换算结果存在约 1 到 5 米的残余误差——对于日常导航、地图标注这类场景完全够用,但如果是需要厘米级精度的测绘、工程定位场景,就不能依赖这类近似转换算法,需要通过官方渠道获取精确的坐标转换服务。理解这三套坐标系的关系,最实用的判断原则是:先搞清楚目标系统要哪种坐标(是要给 GPS 设备用,还是要在国内地图上标注),再决定要不要转换、往哪个方向转换,混用不同坐标系统而不做转换,是国内地图应用开发里最常见的"位置错误"根源。