地球是一个不规则的椭球体,而屏幕是平面的。地图投影就是将地球曲面上的坐标(经纬度)转换为平面坐标(像素)的数学方法。不同的投影方式会导致面积、形状、距离或方向的不同程度失真。
Web 地图普遍采用的是墨卡托投影(Mercator Projection),它保持了角度和局部形状的正确性(等角投影),适合导航和方向判断,但在高纬度地区面积会严重放大。
百度地图使用自有的墨卡托投影算法,与国际标准的 EPSG:3857 不同。其特点:
输入坐标系不同 — 标准 Web 墨卡托投影基于 WGS-84 经纬度,百度墨卡托基于 BD-09 经纬度(已加偏)
投影参数不同 — 百度使用自定义的椭球参数和投影公式,产出的平面坐标(米制)与 EPSG:3857 的值完全不同
瓦片编号体系不同 — 百度地图的瓦片原点在经纬度 (0, 0) 处,且 Y 轴方向与标准 TMS/XYZ 不同
北京天安门
可以看到,BD-09 MC 和 EPSG:3857 虽然都是"米制平面坐标",但由于输入和投影参数不同,数值有明显差异。
Map 上直接提供了经纬度与墨卡托的互转方法,可参考以下示例代码实现经纬度坐标和投影坐标的互转。
const map = new BMap.Map('container');// 经纬度 → 百度墨卡托(米制)const mc = map.lnglatToMercator(116.404, 39.915);console.log(mc); // [12958175, 4825923]// 百度墨卡托 → 经纬度const lnglat = map.mercatorToLnglat(12958175, 4825923);console.log(lnglat); // [116.404, 39.915]
上一篇
下一篇