GIS 坐标系避坑指南:WGS84、GCJ02、BD09 到底怎么选?
本文最后更新于:2026年2月12日 凌晨
GIS 坐标系避坑指南
做过地图开发的同学肯定都被“坐标偏移”坑过。明明经纬度是对的,放到地图上一看,位置直接漂移了几百米甚至上公里。这不是代码写错了,而是因为国内地图有自己的一套“玩法”。
1. 为什么会有偏移?
简单来说,就是国家为了安全,要求国内所有地图必须经过一层“加密”处理。这种加密是非线性的,所以你不能简单加减一个数来修正。
目前国内主要有三套坐标系:
WGS84(地球坐标)
- 来源:GPS 设备的原始坐标、国际标准。
- 场景:谷歌地图国际版、OpenStreetMap。
- 注意:在国内直接用这套坐标,位置肯定会偏。
GCJ-02(火星坐标)
- 来源:国家测绘局制定的标准。
- 场景:高德、腾讯、谷歌中国地图。
- 外号:因为位置偏得莫名其妙,开发者戏称它为“火星坐标”。
BD-09(百度坐标)
- 场景:只有百度地图在用。
- 注意:它是在火星坐标的基础上又加密了一层,偏移最大。
2. 它们之间偏了多少?
以北京天安门为例,三套坐标系的肉眼感官差异:
- WGS84:标准点。
- GCJ-02:偏离约 500 米。
- BD-09:偏离约 1000 米。
如果你把 GPS 采集的 WGS84 坐标直接扔到百度地图上,你会发现自己可能在隔壁街。
3. 实战:怎么进行转换?
在开发中,最推荐的方案是使用开源库 coordtransform。
安装
1 | |
常用转换代码
1 | |
4. 几个重要的避坑建议
- 统一存储格式:数据库里建议统一存 WGS84。它是最原始的数据,转换到任何平台都方便。
- 看准底图:底图是用谁家的,数据就得转成谁家的坐标系。高德配 GCJ02,百度配 BD09,别混着用。
- 不要手动纠偏:加密算法很复杂,别想着用
lat + 0.001这种方式解决,不同地区的偏移量是不一样的。 - 定位 SDK 注意:iOS 原生定位给的是 WGS84,但如果你用高德定位 SDK,它可能直接给你 GCJ02。一定要看文档!
GIS 坐标系避坑指南:WGS84、GCJ02、BD09 到底怎么选?
http://bestkele.com/2022/03/18/concept/gis/