CRS84 与 EPSG:4326 全对比(完整技术规范)
一、核心关系图解
二、技术规范对比表
对比维度 | CRS84 (OGC) | EPSG:4326 (EPSG) |
---|---|---|
标准制定机构 | 开放地理空间联盟 (OGC) | 欧洲石油测绘组 (EPSG) |
规范文档 | OGC 12-063r5 | EPSG Dataset v10.023 |
坐标顺序 | 经度, 纬度 (X, Y) → [113.875397, 22.571915] | 纬度, 经度 (Y, X) → [22.571915, 113.875397] |
URN 标识符 | urn:ogc:def:crs:OGC:1.3:CRS84 | EPSG:4326 |
高程支持 | 可扩展为 [X, Y, Z] | 需使用 EPSG:4979 |
精度要求 | 小数点后 6 位(约 0.11 米) | 未明确,通常同 WGS84 |
适用场景 | GeoJSON、Web 地图服务 | Shapefile、传统 GIS 系统 |
数学基准 | WGS84 椭球体 | 同左 |
坐标范围验证 | 经度: [-180, 180] 纬度: [-90, 90] | 同左 |
三、GeoJSON CRS 规范详解
1. 合法定义结构
{"type": "Feature","crs": {"type": "name", // 固定值"properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84" // 唯一合法值}},"geometry": {"type": "Point","coordinates": [113.875397, 22.571915] // 经度在前}
}
2. 违规案例分析
错误类型 | 错误示例 | 后果 |
---|---|---|
使用 EPSG 编码 | "name": "EPSG:4326" | 地图显示偏移至错误位置(如深圳坐标显示在非洲) |
坐标顺序颠倒 | "coordinates": [22.571915, 113.875397] | 实际定位到西经 113°, 北纬 22°(大西洋海域) |
非法 CRS 类型 | "type": "EPSG" | 解析器拒绝加载 |
四、数学等价性证明
1. 基准参数一致性
const WGS84_PARAMS = {a: 6378137.0, // 长半轴 (米)f: 1 / 298.257223563, // 扁率b: 6356752.3142, // 短半轴 (米)
};
// CRS84与EPSG:4326共享完全相同的椭球参数
2. 坐标转换公式
// 坐标系互换算法
const swapCoordinates = (coord: number[]) => [coord[1], coord[0]];// 深圳宝安机场坐标转换验证
const crs84Point = [113.875397, 22.571915];
const epsg4326Point = swapCoordinates(crs84Point);console.log("CRS84:", crs84Point); // [113.875397, 22.571915]
console.log("EPSG4326:", epsg4326Point); // [22.571915, 113.875397]
五、工程实践检测方案
1. 自动坐标顺序检测
function detectCoordinateOrder(coords: number[][]): string {const sample = coords[0];// 经度值合理性检测const isLngFirst = sample.some((coord) => Math.abs(coord[0]) > 90 && Math.abs(coord[1]) <= 90);return isLngFirst ? "CRS84" : "EPSG:4326";
}// 测试用例
const testCoords = [[113.875397, 22.571915], // 正确CRS84顺序[22.571915, 113.875397], // 错误顺序
];
console.log(detectCoordinateOrder([testCoords[0]])); // 输出: CRS84
console.log(detectCoordinateOrder([testCoords[1]])); // 输出: EPSG:4326
2. 坐标系转换验证
// 使用proj4验证转换正确性
proj4.defs("CRS84", proj4.defs("EPSG:4326").proj);const crs84Point = [113.875397, 22.571915];
const epsg4547 = proj4("CRS84", "EPSG:4547", crs84Point);console.log("深圳地方坐标系:", epsg4547);
// 正确输出: [480538.765, 2502742.039](宝安机场合理坐标)
最终技术结论:
- CRS84 与 EPSG:4326 是 同一基准的不同坐标顺序标准
- GeoJSON 强制使用 CRS84 坐标系定义
- 坐标顺序错误会导致 千米级位置偏差
- 工程中必须进行 显式坐标系声明 和 坐标顺序验证