首页 / 实战手册 / 坐标与投影
国内地图坐标偏移到底差多少米
先看结论
用 GPS 采的点标到高德或百度地图上,整体偏出去几百米,而且不同城市偏的还不一样多。
现象
同一批点位数据,在 GPS 设备里读出来是一个位置,标到国内地图上就变成另一个位置。 偏移方向大体一致(东北方向居多),距离从两百多米到六百多米不等。 数据量越大,整体偏移越明显;单看一个点,容易被误认为是录入误差。
成因
国内互联网地图使用 GCJ-02 坐标系(俗称火星坐标),是在 WGS84 基础上做过非线性加密的产物。 GPS、北斗设备输出的原始坐标是 WGS84,两者不能直接混用。 百度地图在此基础上又叠了一层偏移,形成 BD-09。
| 坐标系 | 使用方 | 与 WGS84 的关系 |
|---|---|---|
| WGS84 | GPS、北斗、国际标准(EPSG:4326) | 基准本身 |
| GCJ-02 | 高德、腾讯、天地图 | 非线性加密,偏移数百米 |
| BD-09 | 百度地图 | 在 GCJ-02 上再偏移一次 |
| CGCS2000 | 国家测绘成果(EPSG:4490) | 与 WGS84 差厘米级,工程上常等同 |
偏移量实测
下表由页面内算法逐点计算,按椭球面大圆距离,单位米:
| 城市 | WGS84 | GCJ-02 | 偏移 |
|---|---|---|---|
| 乌鲁木齐 | 87.616848, 43.825592 | 87.619698, 43.826797 | 265.3 |
| 拉萨 | 91.140856, 29.645554 | 91.142385, 29.642818 | 338.6 |
| 成都 | 104.066541, 30.572269 | 104.069046, 30.569815 | 363.7 |
| 西安 | 108.940174, 34.341568 | 108.944831, 34.340013 | 461.7 |
| 上海 | 121.473701, 31.230416 | 121.478224, 31.228474 | 481.8 |
| 哈尔滨 | 126.642464, 45.756967 | 126.648434, 45.758918 | 512.0 |
| 北京 | 116.397428, 39.909230 | 116.403672, 39.910634 | 555.6 |
| 深圳 | 114.057868, 22.543099 | 114.062982, 22.540382 | 606.6 |
| 广州 | 113.264385, 23.129112 | 113.276136, 23.132723 | 621.7 |
偏移量不是常数。它由一组以经纬度为自变量的三角函数算出,所以大小和方向都随位置连续变化。 网上流传的「固定加 0.0065」只适用于 BD-09 那一步,用在 GCJ-02 上无效。
解决
在数据进入地图之前做一次转换。下面的工具可以直接改坐标,函数也可以复制到项目里复用。 注意 WGS84 到 GCJ-02 有正算公式,反向没有解析解,必须迭代逼近。
源码与运行效果
排查顺序
- 确认数据源坐标系。设备直采、政府开放数据多为 WGS84;从高德接口拿到的多是 GCJ-02。
- 确认底图坐标系。天地图是 CGCS2000(与 WGS84 近似),高德腾讯是 GCJ-02,百度是 BD-09。
- 两边一致就不用转;不一致必须转,且只转一次,转两次会反向偏出去。
- 转换后不要再用肉眼挑个别点做「微调」,那是把系统性误差变成随机误差。
相关
经纬志(2026)。《国内地图坐标偏移到底差多少米》。https://www.jingweizhi.com/cookbook/coordinate-offset.html(访问日期 2026-11-03)。