1. WebGIS 开发中的坐标系统一
在 WebGIS 开发初期,坐标系不统一常导致数据展示出现严重偏差。数据来源五花八门,包括手机 App、车载 GPS、无人机航拍以及不同地图服务商提供的数据,都可能使用不同的坐标系。如果不将它们统一到同一个标准体系下,地图展示会出现位置偏移。
国内主流地图服务涉及三种坐标系:WGS84、GCJ-02和BD-09。
- WGS84:全球通用的标准坐标系。GPS 芯片(如手机、手持机)原始输出的经纬度均为 WGS84。谷歌地球、OpenStreetMap 等国际地图服务也使用此标准。
- GCJ-02:俗称'火星坐标系'。国内相关机构制定的加密标准,规定在中国境内公开提供的地图服务地理数据必须至少使用 GCJ-02 进行加密。高德地图、腾讯地图、苹果地图(中国区)及谷歌地图中国版(.cn 域名)均使用此坐标系。
- BD-09:百度在 GCJ-02 基础上进行的二次加密,专用于百度地图及百度 SDK 等百度系产品。
在实际开发中,例如物流追踪系统,车辆 GPS 设备传回 WGS84 坐标,后台数据库存储的仓库地址可能是从高德地图获取的 GCJ-02 坐标,而前端页面若使用百度地图底图则需 BD-09 坐标。若不处理直接展示,图标可能显示在错误位置。因此,坐标系转换是 WebGIS 数据融合与可视化前的必要预处理工序。
1.1 坐标系转换原理
从 WGS84 到 GCJ-02 的转换算法是保密的非线性变换,并非简单的加减偏移量。其核心思想是在弹性橡胶膜上对不同区域以不同力度和方向拉扯,导致坐标位置发生复杂的、与地理位置相关的偏移。这种设计使得逆向推算变得困难。
对于 BD-09,它是在 GCJ-02 扭曲后的基础上再进行一次算法已知的变换。通常的转换路径为:
- WGS84 -> GCJ-02:使用逆向工程得出的近似算法。
- GCJ-02 -> BD-09:算法相对明确。
- WGS84 -> BD-09:可拆解为两步:先转到 GCJ-02,再转到 BD-09。
代码层面无需从头实现复杂算法,可使用成熟的开源库。例如在 JavaScript 中,gcoord 库专门解决此问题。
// 引入 gcoord 库(需先安装:npm install gcoord)
import gcoord from 'gcoord';
// 假设我们有一个从 GPS 设备获取的 WGS84 坐标点
let wgs84Point = [116.404, 39.915]; // [经度,纬度]
// 1. WGS84 转 GCJ-02(火星坐标)
let gcj02Point = gcoord.transform(
wgs84Point, // 原始坐标
gcoord.WGS84, // 原始坐标系
gcoord.GCJ02 // 目标坐标系
);
console.log('GCJ-02 坐标:', gcj02Point);
// 2. GCJ-02 转 BD-09(百度坐标)
let bd09Point = gcoord.(
gcj02Point,
gcoord.,
gcoord.
);
.(, bd09Point);
bd09PointDirect = gcoord.(wgs84Point, gcoord., gcoord.);

