地图标系
· 阅读需 3 分钟
在地图开发中,坐标系是核心概念。不同地图服务使用不同标准,混用会导致位置偏移。
一、主流坐标系统
1. WGS84(国际标准)
- 全称:World Geodetic System 1984
- 特点:GPS 设备获取的原始坐标,国际通用
- 使用方:Google Maps(境外)、OpenStreetMap、Apple Maps
- 格式:
{lat: 39.9042, lng: 116.4074}
2. GCJ-02(火星坐标系)
- 别名:国测局坐标系
- 特点:中国官方加密坐标,WGS84 基础上经非线性偏移
- 使用方:高德地图、腾讯地图、Google Maps(境内)
- 来源:中国法律规定所有地图必须加密
3. BD-09(百度坐标系)
- 特点:在 GCJ-02 基础上再次加密
- 使用方:百度地图
- 偏移:与 WGS84 偏差可达 500 米
二、坐标系转换公式
JavaScript 实现
// WGS84 → GCJ-02
function wgs84ToGcj02(lng, lat) {
// 复杂非线性转换,实际项目中建议使用成熟库
const pi = 3.141592653589793;
const a = 6378245.0;
const ee = 0.00669342162296594323;
// ... 具体算法实现
}
// GCJ-02 → BD-09
function gcj02ToBd09(lng, lat) {
const z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * Math.PI);
const theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * Math.PI);
return {
lng: z * Math.cos(theta) + 0.0065,
lat: z * Math.sin(theta) + 0.006
};
}
推荐库
- coord-convert:
npm install coord-convert - gcoord:
npm install gcoord(支持多种坐标系)
import { wgs84togcj02, gcj02tobd09 } from 'coord-convert';
const [gcjLng, gcjLat] = wgs84togcj02(116.4074, 39.9042);
const [bdLng, bdLat] = gcj02tobd09(gcjLng, gcjLat);
三、开发实践
1. Google Maps 使用场景
// 直接使用 WGS84 坐标
const position = { lat: 39.9042, lng: 116.4074 }; // 正确
// 如果数据来自高德/腾讯,需先转换
import { gcj02towgs84 } from 'coord-convert';
const wgsPosition = gcj02towgs84(gcjLng, gcjLat);
2. 国内地图服务
// 高德地图 API:使用 GCJ-02
const position = [116.4074, 39.9042]; // 直接传入GCJ-02
// 百度地图 API:使用 BD-09
const point = new BMap.Point(116.404, 39.915); // BD-09坐标
3. 常见错误
// ❌ 错误:将 GCJ-02 坐标用于 Google Maps
// 结果:位置偏移几百米
<Map center={{lat: 39.9042, lng: 116.4074}} /> // 如果这是GCJ-02坐标就会错
// ✅ 正确:确保是 WGS84
const wgs84Coordinate = convertFromGcj02ToWgs84(gcjCoordinate);
四、坐标系检测
如何判断数据坐标系?
function detectCoordinateSystem(lng, lat) {
// 在中国境内
if (lng > 73 && lng < 135 && lat > 18 && lat < 54) {
// 如果与真实位置偏差 < 10m,很可能是 WGS84
// 如果偏差 100-500m,可能是 GCJ-02
// 如果偏差 > 500m,可能是 BD-09
}
}
五、总结
| 地图服务 | 使用坐标系 | 是否需要转换 |
|---|---|---|
| Google Maps(全球) | WGS84 | 直接适配 |
| Google Maps(中国) | GCJ-02 | 需 WGS84→GCJ-02 |
| 高德/腾讯地图 | GCJ-02 | 需 WGS84→GCJ-02 |
| 百度地图 | BD-09 | 需 WGS84→GCJ-02→BD-09 |
| OpenStreetMap | WGS84 | 直接适配 |
核心建议:保存数据时使用 WGS84,使用时根据目标平台动态转换。
微信公众号

