服务运行中
天地图缓存代理
使用文档
本服务为天地图瓦片提供透明缓存代理。相同瓦片首次请求后即缓存 30 天,
大幅减少您的 Token 消耗,加快地图加载速度。
您只需携带自己的 tk 参数,其余与直接调用天地图接口完全一致。
您只需携带自己的 tk 参数,其余与直接调用天地图接口完全一致。
BASE URL
https://map-api.486486486.xyz/tianditu_proxy.php
简介
直接调用天地图官方接口时,每个 Token 免费额度约 1 万次/天。
对于高频地图应用,额度很快耗尽,导致地图瓦片无法加载。
本代理服务在服务器端缓存已请求的瓦片图片。当多个用户请求同一块地图区域时,
后续请求直接从缓存返回,不再消耗您的 Token 配额。
✦
缓存逻辑
相同图层 + 相同坐标(X/Y/L)的瓦片只向天地图请求一次,缓存 30 天。
这意味着只有第一个访问该瓦片的请求会消耗您的 Token,之后无论多少用户访问都不再计费。
ℹ
接口兼容性
本代理完全兼容天地图官方接口参数,只需将请求域名替换为本代理地址即可,无需修改其他代码。
快速开始
2
替换请求地址
将原有天地图请求中的 t{n}.tianditu.gov.cn 替换为本代理地址,保留所有原始参数(包括您的 tk)。
3
完成!享受缓存加速
第一次请求某个瓦片时会消耗 Token,之后 30 天内该瓦片由缓存提供,不再消耗配额。
获取 Token
天地图 Token(tk)由您自己申请,本代理不提供公共 Token。每个 Token 绑定您的账号和应用,用于天地图服务的鉴权计费。
2
创建应用
登录控制台 → 我的应用 → 创建新应用,应用类型选"浏览器端",域名填写您的网站域名(或填 * 不限制)。
3
复制 Token
应用创建成功后,复制应用详情中的 tk 字符串(32位十六进制),在所有请求中作为 tk 参数传入。
⚠
Token 安全提示
前端代码中的 tk 对用户可见,建议为本代理单独创建一个应用,不要与其他重要业务共用同一个 Token。单 Token 免费额度约 1 万次/天,配合本代理的缓存机制,实际消耗会大幅低于实际访问量。
DataServer 瓦片接口
天地图私有瓦片协议,适用于 Leaflet、OpenLayers 等自定义 TileLayer。
请求格式
https://map-api.486486486.xyz/tianditu_proxy.php?T={图层}&X={列}&Y={行}&L={级别}&tk={您的Token}
| 参数 | 必填 | 说明 | 示例 |
T | 必填 | 图层标识,见下方图层列表 | vec_w |
X | 必填 | 瓦片列号 | 427 |
Y | 必填 | 瓦片行号 | 200 |
L | 必填 | 缩放级别(1–18) | 9 |
tk | 必填 | 您的天地图 Token(32位) | abc123... |
请求示例
完整 URL 示例
https://map-api.486486486.xyz/tianditu_proxy.php?T=vec_w&X=427&Y=200&L=9&tk=您的32位Token
WMTS 标准接口
符合 OGC WMTS 规范,适用于支持标准 WMTS 协议的 GIS 平台(ArcGIS、MapboxGL 等)。
请求格式
https://map-api.486486486.xyz/tianditu_proxy.php?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0
&LAYER={图层}&STYLE=default&TILEMATRIXSET=w
&TILEMATRIX={级别}&TILEROW={行}&TILECOL={列}&tk={您的Token}
| 参数 | 必填 | 说明 |
SERVICE | 必填 | 固定值 WMTS |
LAYER | 必填 | 图层简写(vec / img / ter / cva / cia / cta) |
TILEMATRIX | 必填 | 缩放级别 |
TILEROW | 必填 | 瓦片行号 |
TILECOL | 必填 | 瓦片列号 |
tk | 必填 | 您的天地图 Token |
图层列表
所有图层均支持经纬度投影(_w)和墨卡托投影(_c)两种版本。
| 图层标识 | 类型 | 说明 |
vec_w / vec_c | 底图 | 矢量地图底图(道路、建筑轮廓) |
cva_w / cva_c | 注记 | 矢量地图文字注记(需叠加在底图上) |
img_w / img_c | 底图 | 卫星影像底图 |
cia_w / cia_c | 注记 | 影像地图文字注记 |
ter_w / ter_c | 底图 | 地形晕渲底图 |
cta_w / cta_c | 注记 | 地形地图文字注记 |
ℹ
底图与注记需分层叠加
天地图将底图和文字注记拆分为两个独立图层。通常需要将注记层叠加在底图之上,才能显示地名、道路名等文字信息。
示例:Leaflet
JavaScript
const TK = '您的32位Token';
const PROXY = 'https://map-api.486486486.xyz/tianditu_proxy.php';
// 矢量底图
const vec = L.tileLayer(
`${PROXY}?T=vec_w&X={x}&Y={y}&L={z}&tk=${TK}`,
{ maxZoom: 18, tms: false }
);
// 矢量注记(叠加在底图上)
const cva = L.tileLayer(
`${PROXY}?T=cva_w&X={x}&Y={y}&L={z}&tk=${TK}`,
{ maxZoom: 18, tms: false }
);
// 初始化地图
const map = L.map('map', {
center: [39.9, 116.4],
zoom: 10,
layers: [vec, cva]
});
卫星影像
JavaScript
const img = L.tileLayer(
`${PROXY}?T=img_w&X={x}&Y={y}&L={z}&tk=${TK}`,
{ maxZoom: 18 }
);
const cia = L.tileLayer(
`${PROXY}?T=cia_w&X={x}&Y={y}&L={z}&tk=${TK}`,
{ maxZoom: 18 }
);
示例:OpenLayers
JavaScript
import TileLayer from 'ol/layer/Tile';
import XYZ from 'ol/source/XYZ';
const TK = '您的32位Token';
const PROXY = 'https://map-api.486486486.xyz/tianditu_proxy.php';
// 矢量底图图层
const vecLayer = new TileLayer({
source: new XYZ({
url: `${PROXY}?T=vec_w&X={x}&Y={y}&L={z}&tk=${TK}`,
maxZoom: 18,
}),
});
// 注记图层
const cvaLayer = new TileLayer({
source: new XYZ({
url: `${PROXY}?T=cva_w&X={x}&Y={y}&L={z}&tk=${TK}`,
maxZoom: 18,
}),
});
示例:天地图 JS API
使用天地图官方 SDK 时,通过 getTileUrl 回调替换瓦片地址。
JavaScript
const TK = '您的32位Token';
const PROXY = 'https://map-api.486486486.xyz/tianditu_proxy.php';
// 自定义瓦片图层,接管请求地址
const layer = new T.TileLayer('', {
getTileUrl: function(x, y, z) {
return `${PROXY}?T=vec_w&X=${x}&Y=${y}&L=${z}&tk=${TK}`;
}
});
const map = new T.Map('mapDiv');
map.centerAndZoom(new T.LngLat(116.4, 39.9), 10);
map.addLayer(layer);
示例:原生 Fetch 请求
直接请求单张瓦片图片,适用于自定义渲染场景。
JavaScript
const TK = '您的32位Token';
async function getTile(layer, x, y, z) {
const url = new URL('https://map-api.486486486.xyz/tianditu_proxy.php');
url.searchParams.set('T', layer);
url.searchParams.set('X', x);
url.searchParams.set('Y', y);
url.searchParams.set('L', z);
url.searchParams.set('tk', TK);
const res = await fetch(url);
const blob = await res.blob();
return URL.createObjectURL(blob);
}
// 使用示例
const imgUrl = await getTile('vec_w', 427, 200, 9);
缓存机制
缓存策略
| 项目 | 说明 |
| 缓存粒度 | 每个唯一的图层 + X + Y + L 组合单独缓存一份 |
| 缓存有效期 | 30 天(天地图瓦片内容基本不变) |
| 缓存命中 | 响应头 X-Cache: HIT,不消耗您的 Token |
| 缓存未命中 | 响应头 X-Cache: MISS,请求上游并缓存结果 |
| 共享缓存 | 所有用户共享同一缓存,任意用户首次访问后即对所有人生效 |
Token 消耗估算
假设您的地图应用服务 100 个用户,每人每次操作请求 50 张瓦片,每天操作 5 次:
| 场景 | 每日请求量 | Token 消耗 |
| 无缓存(直接调用天地图) | 25,000 次 | 25,000 次 |
| 使用本代理(首日,无缓存) | 25,000 次 | ≈ 5,000 次(热点瓦片复用) |
| 使用本代理(次日起) | 25,000 次 | ≈ 500 次(大部分命中缓存) |
✦
实际效果取决于用户行为
用户越集中在相似区域和级别,缓存命中率越高,Token 节省越显著。对于固定范围展示的场景(如城市监控、物流追踪),缓存命中率通常可达 90% 以上。
注意事项
⚠
本服务为公益共享,请合理使用
请勿用于大规模爬取瓦片、压力测试或任何违反天地图服务条款的行为。如遇 Token 配额耗尽(HTTP 418),请适当降低请求频率。
常见问题
| 现象 | 可能原因 | 解决方法 |
| 地图显示透明空白 | Token 配额耗尽(418) | 稍后重试,或申请更多 Token |
| 地图加载缓慢 | 首次请求需回源天地图 | 正常现象,缓存预热后速度大幅提升 |
| 注记不显示 | 未叠加注记图层 | 需同时加载 cva_w 或 cia_w 图层 |
| 跨域请求失败 | 浏览器 CORS 拦截 | 代理已配置 Access-Control-Allow-Origin: *,如仍报错请检查请求 URL 是否正确 |
响应头说明
| 响应头 | 值 | 含义 |
X-Cache | HIT | 从本地缓存返回,不消耗 Token |
X-Cache | MISS | 从上游天地图获取,消耗一次 Token |
X-Cache | ERR-418 | Token 配额耗尽,返回透明占位图 |
Cache-Control | public, max-age=2592000 | 浏览器端也可缓存 30 天 |