Appearance
TMS
平台按 OSGeo Tile Map Service Specification 1.0.0 提供切片,适合 GDAL、Leaflet、OpenLayers 等按 TMS 编号取瓦片的客户端。TMS 与 WMTS、OGC API Tiles、MapServer 切片共用同一份缓存,同一位置取到的内容相同。启用方式、API Key 与异常的通用规则见 OGC 服务概览。
地址与启用
- 发布时勾选 TMS(不默认勾选)。矢量图层、栅格图层与切片包都可以。
- 未启用时返回 404,正文为
TileMapServerError「服务未启用 TMS」;服务已停止返回 503。 - 下表中
$T为https://map-demo.geobridge.cn/geobridge-mapserver/rest/geodata/services/<服务路径>/MapServer/tms,只有 GET。
| 地址 | 说明 |
|---|---|
$T | Services 文档(只有 1.0.0) |
$T/1.0.0 | TileMapService:列出全部 TileMap(标题、坐标系、profile、地址) |
$T/1.0.0/<TileMap> | TileMap:坐标系、范围、原点、瓦片格式与每级的分辨率 |
$T/1.0.0/<TileMap>/{z}/{x}/{y}.<扩展名> | 瓦片 |
TileMap
- 名称为
<服务名>@<矩阵集>@<格式>,如city-basemap@WebMercatorQuad@png、city-basemap@WorldCRS84Quad@jpg、city-roads@WebMercatorQuad@pbf(矢量瓦片)。jpeg与jpg、mvt与pbf等价。 - 别名:
global-mercator(WebMercatorQuad的第一种格式)、global-geodetic(WorldCRS84Quad的第一种格式)。 - 矩阵集与格式同 OGC API Tiles:
- 按需出图的服务:
WebMercatorQuad、WorldCRS84Quad、CGCS2000Quad,PNG 与 JPEG; - 预切服务:与其网格一致的内置矩阵集,格式为切片配置的格式;
- 开启了 VectorTileServer 的矢量服务另有
WebMercatorQuad的矢量瓦片(pbf)。
- 按需出图的服务:
profile:WebMercatorQuad为global-mercator,WorldCRS84Quad为global-geodetic,其余为local。BoundingBox与Origin为瓦片网格的范围与左下角(如global-geodetic为 −180,−90,180,90),客户端据此计算瓦片编号。
行号自下而上
TMS 的 y 从下往上数:y = 该级行数 − 1 − row(row 为 XYZ / WMTS 的行号,自上而下;Web 墨卡托与经纬度网格第 z 级都有 2^z 行)。在 XYZ 客户端中使用 TMS 地址时要设置翻转,见下文。
API Key
请求在查询参数中带了 token 时,TileMapService 与 TileMap 文档之间的链接会带上 token,但 TileMap 中每级的 href 不带——客户端会在它后面直接追加 /{x}/{y}.<扩展名>,带了查询串会拼出错误的地址。所以「API Key」级别的服务:
- 能用请求头的客户端(MapLibre 的
transformRequest、GDAL 的GDAL_HTTP_HEADERS、自己的程序)用X-GeoBridge-Token; - 不能用请求头的,在瓦片地址模板后自己加
?token=gb_xxx…。
客户端示例
GDAL:直接打开 TileMap 地址。
bash
gdalinfo 'https://map-demo.geobridge.cn/geobridge-mapserver/rest/geodata/services/city-basemap/MapServer/tms/1.0.0/city-basemap@WorldCRS84Quad@png'
# API Key 级别(GDAL 3.6 及以上)
GDAL_HTTP_HEADERS='X-GeoBridge-Token: gb_xxx…' gdalinfo '…/tms/1.0.0/city-basemap@WebMercatorQuad@png'MapLibre:数据源写 scheme: 'tms'。
js
map.addSource('tms', {
type: 'raster',
scheme: 'tms',
tileSize: 256,
tiles: ['https://map-demo.geobridge.cn/geobridge-mapserver/rest/geodata/services/city-basemap/MapServer/tms/1.0.0/city-basemap@WebMercatorQuad@png/{z}/{x}/{y}.png'],
})
map.addLayer({ id: 'tms', type: 'raster', source: 'tms' })OpenLayers:XYZ 源用 {-y}。
js
import TileLayer from 'ol/layer/Tile'
import XYZ from 'ol/source/XYZ'
const layer = new TileLayer({
source: new XYZ({
url: 'https://map-demo.geobridge.cn/geobridge-mapserver/rest/geodata/services/city-basemap/MapServer/tms/1.0.0/city-basemap@WebMercatorQuad@png/{z}/{x}/{-y}.png',
}),
})Leaflet:L.tileLayer(url, { tms: true }),地址写法同 MapLibre。
JS SDK 的 services.tmsUrl() 生成上面的瓦片模板。
错误
一律为 <TileMapServerError><Message>…</Message></TileMapServerError>(text/xml),用 HTTP 状态表示类别:400 参数错误,404 不存在、范围外或扩展名与 TileMap 的格式不符,503 暂不可用,500 内部错误;访问被拒绝时为 401、403。
已知限制
- 预切服务按切片方案推导的矩阵集(WMTS 中的
default028mm)各级底边不一致,不在 TMS 中列出,请用同网格的内置矩阵集,或用 WMTS。 - TileMap 只描述瓦片网格的范围,数据的实际范围请看 OGC API 瓦片集的
tileMatrixSetLimits。