服务运行中

天地图缓存代理
使用文档

本服务为天地图瓦片提供透明缓存代理。相同瓦片首次请求后即缓存 30 天, 大幅减少您的 Token 消耗,加快地图加载速度。 您只需携带自己的 tk 参数,其余与直接调用天地图接口完全一致。

您只需携带自己的 tk 参数,其余与直接调用天地图接口完全一致。

使用案例
maps.id5.fun EXIF 定位查看器 ·为了这盘醋包的饺子

BASE URL https://map-api.486486486.xyz/tianditu_proxy.php

简介

直接调用天地图官方接口时,每个 Token 免费额度约 1 万次/天。 对于高频地图应用,额度很快耗尽,导致地图瓦片无法加载。

本代理服务在服务器端缓存已请求的瓦片图片。当多个用户请求同一块地图区域时, 后续请求直接从缓存返回,不再消耗您的 Token 配额

缓存逻辑 相同图层 + 相同坐标(X/Y/L)的瓦片只向天地图请求一次,缓存 30 天。 这意味着只有第一个访问该瓦片的请求会消耗您的 Token,之后无论多少用户访问都不再计费。
接口兼容性 本代理完全兼容天地图官方接口参数,只需将请求域名替换为本代理地址即可,无需修改其他代码。

快速开始

1

申请天地图 Token

前往 upass.tianditu.gov.cn 注册账号并创建应用,获取 tk 参数。免费账号每个 Token 约 1 万次/天。

2

替换请求地址

将原有天地图请求中的 t{n}.tianditu.gov.cn 替换为本代理地址,保留所有原始参数(包括您的 tk)。

3

完成!享受缓存加速

第一次请求某个瓦片时会消耗 Token,之后 30 天内该瓦片由缓存提供,不再消耗配额。

获取 Token

天地图 Token(tk)由您自己申请,本代理不提供公共 Token。每个 Token 绑定您的账号和应用,用于天地图服务的鉴权计费。

1

注册天地图账号

访问 upass.tianditu.gov.cn,完成实名注册。

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_wcia_w 图层
跨域请求失败浏览器 CORS 拦截代理已配置 Access-Control-Allow-Origin: *,如仍报错请检查请求 URL 是否正确

响应头说明

响应头含义
X-CacheHIT从本地缓存返回,不消耗 Token
X-CacheMISS从上游天地图获取,消耗一次 Token
X-CacheERR-418Token 配额耗尽,返回透明占位图
Cache-Controlpublic, max-age=2592000浏览器端也可缓存 30 天