成果坐标系没转换,验收被退回
数据看着没错,点位也落在正确的位置,质检报告却写着“坐标系与要求不符,平面位置超限”。
现象
成果提交后收到退回意见,原文大致如下:
成果坐标系应为 2000 国家大地坐标系(EPSG:4490),
实测数据坐标系为 WGS 84(EPSG:4326),未附转换参数与检核记录。
平面位置中误差 1.42 m,超过 0.05 m 限差,判定不合格。
把两份数据叠在一起看,偏差不大,肉眼几乎分辨不出,所以前期一直没被发现。
原因
现场采集设备输出 WGS84 经纬度,成果要求 CGCS2000 平面坐标。 处理环节直接做了 Web Mercator 投影再反算,跳过了基准转换:
- Web Mercator(EPSG:3857)用球面公式近似椭球,反算回地理坐标会带来米级误差。
- WGS84 与 CGCS2000 的参考椭球与历元不同,未做七参数或四参数转换,残差在分米级。
- 转换参数没有记录,质检无法复现,直接判定不合规。
排查过程
- 读数据文件的
.prj - 在 GIS 软件里查看图层坐标系定义,确认是地理坐标还是投影坐标。
- 取三个已知控制点,比较成果坐标与已知值,算出残差。
# 用 ogrinfo 查看数据坐标系
ogrinfo -al -so survey.gpkg
# Geometry: Point
# SRS: EPSG:4326 - WGS 84
ogrinfo -al -so result.shp
# SRS: EPSG:3857 - WGS 84 / Pseudo-Mercator
解决方案
统一在目标坐标系下作业。用 proj4 明确定义两套坐标系,不要依赖“看起来差不多”:
import proj4 from 'proj4';
import { writeFileSync } from 'node:fs';
proj4.defs('EPSG:4490',
'+proj=longlat +ellps=GRS80 +no_defs +type=crs');
var toCgcs2000 = proj4('EPSG:4326', 'EPSG:4490');
var points = [
[116.3912, 39.9071],
[116.3955, 39.9098]
];
var converted = points.map(function (p) {
return toCgcs2000.forward(p);
});
writeFileSync('cgcs2000.json', JSON.stringify(converted, null, 2));
需要平面坐标时,使用高斯-克吕格投影并带上正确的带号与中央经线, 不要用 Web Mercator 代替:
// 3 度带,中央经线 117°
proj4.defs('EPSG:4547',
'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 ' +
'+ellps=GRS80 +units=m +no_defs +type=crs');
var planar = proj4('EPSG:4490', 'EPSG:4547').forward([116.3912, 39.9071]);
console.log(planar); // [ 465xxx.xx, 4418xxx.xx ]
有控制点时,用四参数或七参数拟合,并把参数与残差写进成果说明:
{
"sourceCrs": "EPSG:4326",
"targetCrs": "EPSG:4490",
"method": "四参数",
"params": {
"dx": 12.431,
"dy": -8.207,
"rotation": 0.000214,
"scale": 1.0000032
},
"checkPoints": 6,
"maxResidualM": 0.031,
"operator": "survey-team",
"date": "2026-10-29"
}
验证
抽查三个控制点,转换后残差小于 0.05 m。 成果图层坐标系显示为 EPSG:4490,不再出现 4326 或 3857。 与既有合规数据叠加,边界重合,没有稳定方向的整体偏移。 转换参数文件随成果一并提交,质检方可复算。
不要靠肉眼判断:米级偏差在城市尺度上几乎看不出来, 但一定会在验收时暴露。提交前用控制点算残差,是最直接的自检手段。
经纬志(2026)。《成果坐标系没转换,验收被退回》。https://www.jingweizhi.com/cookbook/compliant-coord-violation.html(访问日期 2026-11-03)。