CGCS2000 与 WGS84 混着用,大比例尺下差了 0.4 米
小比例尺看不出来,一到 1:500 放样就发现控制点和实测点对不上。
现象
测区控制点成果是 CGCS2000,坐标 108.9401740, 34.3415680;
现场用 RTK 采的点是 WGS84,108.9401740, 34.3415680 看起来一样。
但在 1:500 地形图上,两者叠合后水平错开约 0.4 米,
相当于图上 0.8 毫米,已经超过 1:500 地形图 0.05 毫米的图上精度要求。
把两份数据都投影到 EPSG:4546 后,x 相差 0.31 米,y 相差 0.26 米,
合成位移 0.40 米,方向指向东南。
原因
CGCS2000 的参考椭球是 GRS80,WGS84 的椭球是 WGS84 椭球,两者扁率差
1.1e-11,长半轴完全相同,因此椭球差异本身只有毫米级。
真正的差值来自基准实现:CGCS2000 固定在 2000.0 历元,
而 GPS 输出的 WGS84 坐标随 ITRF 框架历元漂移,中国区域每年约 3 厘米。
到 2026 年累计 26 年,水平差 0.4 米左右。
很多教程直接说「CGCS2000 与 WGS84 等价,可以互用」,这只在小比例尺或厘米级精度要求下成立。
| 比例尺 | 图上 0.1 mm 对应实地 | 0.4 米误差是否超限 |
|---|---|---|
| 1:10000 | 1.0 m | 不超限 |
| 1:2000 | 0.2 m | 接近限差 |
| 1:500 | 0.05 m | 明显超限 |
排查过程
- 确认两套数据的 EPSG 码,很多系统把 4490 的数据标成 4326 存库。
- 取同一个实地位置的两套坐标,投影到同一平面后算平面距离,得到实际差值。
- 用差值除以年限,看是否接近 3 厘米/年,是则属于历元漂移而非投影错误。
- 检查是否有做七参数或四参数转换,没有做的话,0.4 米就是未做基准归化的正常残差。
const a = proj4('EPSG:4490', 'EPSG:4546', [108.9401740, 34.3415680]);
const b = proj4('EPSG:4326', 'EPSG:4546', [108.9401740, 34.3415680]);
console.log(a, b);
// 两者在本例中相同:proj4 默认把 4490 与 4326 当作同一基准(towgs84 全 0)
上一步的结果会暴露另一个问题:proj4js 默认不做基准转换, 它把 4490 和 4326 视为同一套经纬度,所以算出来完全一样。 真实差值必须通过控制点比对或带历元的七参数才能体现。
解决方案
工程上统一用 CGCS2000 存储,WGS84 数据入库前做一次基准归化。 没有官方七参数时,用测区内三个以上公共点求四参数,残差控制在 5 厘米内。
// 用公共点求四参数(最小二乘),再批量应用
// 公共点:WGS84 投影坐标 -> CGCS2000 平面坐标
const pairs = [
{ from: [308611.42, 3804888.31], to: [308611.73, 3804888.05] },
{ from: [312004.18, 3807215.66], to: [312004.51, 3807215.41] },
{ from: [305887.90, 3802333.07], to: [305888.19, 3802332.83] }
];
// 解出 dx, dy, 旋转, 尺度后:
function apply4p(x, y, p) {
const c = Math.cos(p.rot), s = Math.sin(p.rot);
return [
p.dx + p.k * (x * c - y * s),
p.dy + p.k * (x * s + y * c)
];
}
验证
用未参与解算的第四个公共点做检核,归化后平面残差应小于 0.05 米; 若残差仍在 0.4 米量级,说明公共点本身就不在同一基准上,需要重新获取。
const chk = apply4p(310120.55, 3804102.19, params);
const err = Math.hypot(chk[0] - 310120.88, chk[1] - 3804101.93);
console.assert(err < 0.05, '检核点残差 ' + err.toFixed(3) + ' m');
适用版本
| 项目 | 版本 / 说明 |
|---|---|
| CGCS2000 | EPSG:4490(地理 2D)、4479(地心)、4546~4554(3 度带) |
| WGS84 | EPSG:4326;GPS 输出随 ITRF 历元变化 |
| proj4js | 2.9 及以上,towgs84 默认为 0,不做基准转换 |
| QGIS | 3.28 及以上,可配置自定义基准转换 |
经纬志(2026)。《CGCS2000 与 WGS84 混着用,大比例尺下差了 0.4 米》。https://www.jingweizhi.com/cookbook/cgcs2000-wgs84-mix.html(访问日期 2026-11-03)。