接入天地图、高德、腾讯底图要改哪些地方
从 OpenStreetMap 换成国内底图,不只是把 URL 换掉。坐标系、Key、协议、配额四处都要动。
一张表看清差异
| 项目 | 天地图 | 高德 | 腾讯 |
|---|---|---|---|
| 需要 Key | 需要,免费申请 | 需要,个人有免费额度 | 需要,个人有免费额度 |
| 坐标系 | CGCS2000(与 WGS84 近似) | GCJ-02 | GCJ-02 |
| 业务数据是否要转 | 不需要 | 需要 WGS84 → GCJ-02 | 需要 WGS84 → GCJ-02 |
| 协议 | HTTP / HTTPS 均可 | 建议 HTTPS | 建议 HTTPS |
| 主要限制 | 配额按账号级别 | 配额按 Key,超额需付费 | 配额按 Key,超额需付费 |
天地图
国家级服务,免费但要注册并实名认证。瓦片按 {z}/{x}/{y} 组织,
和 Leaflet 默认规则一致,不需要翻转 y 轴。
L.tileLayer(
'https://t{s}.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile' +
'&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w' +
'&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=你的KEY',
{ subdomains: '01234567', maxZoom: 18 }
).addTo(map);
天地图是 WMTS 接口而不是简单的 {z}/{x}/{y}.png,
参数顺序容易写错。把整条 URL 先贴到浏览器单独打开,能出图再放进代码。
影像图层把 vec 换成 img,注记图层是 cva / cia,
通常影像和注记两层要一起加。
高德
瓦片是标准 Web 墨卡托编号,但坐标系是 GCJ-02。 这意味着:底图接上去没问题,业务数据必须转换,否则整体偏移。
L.tileLayer(
'https://webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&size=1' +
'&scale=1&style=8&x={x}&y={y}&z={z}',
{ subdomains: '1234', maxZoom: 18 }
).addTo(map);
style=8 是标准街道图,style=6 是影像图。
这类瓦片地址属于前端直连方式,不经过 Key 校验,但也不承诺稳定性,
生产项目建议走官方 JS API 或 Web 服务接口。
腾讯
规则与高德接近,同样是 GCJ-02,同样按 {z}/{x}/{y} 编号。
换底图时只需要改 URL 和 subdomains。
转换坐标的时机
用高德或腾讯时,业务数据在进入地图前转换一次即可。 不要在渲染循环里反复转,也不要在数据入库时就转好——原始数据应该保留 WGS84, 转换放在「要显示」这一步。
function toDisplay(lng, lat, usesGcj) {
if (!usesGcj) return [lng, lat];
var g = wgs84ToGcj02(lng, lat);
return [g[0], g[1]];
}
这样同一份数据可以在天地图上直接显示,在高德上转换后显示,不用存两份。
常见坑
| 现象 | 原因 |
|---|---|
| 瓦片全灰 | Key 未通过或不匹配当前域名 |
| 出图但拼接错位 | y 轴规则不同,TMS 需要翻转 |
| 层数最高只有几级 | maxZoom 没有跟上服务上限 |
| 本地正常线上 403 | Key 的白名单里没有线上域名 |
| 底图正常数据偏移 | GCJ-02 未转换 |
合规提醒
国内地图服务的服务条款对使用方式有约束,商用前要按官方文档确认授权范围。 只做坐标换算与展示不涉及测绘活动;如果要做坐标数据的采集、存储和传输, 需要另行确认资质要求。
经纬志(2026)。《接入天地图、高德、腾讯底图要改哪些地方》。https://www.jingweizhi.com/cookbook/domestic-basemap.html(访问日期 2026-11-03)。