Skip to content

WMTS ​

平台在每个服务的 MapServer 之下提供 WMTS 1.0.0(KVP 与 RESTful 两种编码):GetCapabilities、GetTile、GetFeatureInfo。WMTS 的瓦片与 MapServer 切片、TMS、OGC API Tiles 共用同一份缓存,同一位置取到的内容相同。启用方式、API Key 与异常的通用规则见 OGC 服务概览。

地址与启用 ​

  • 发布时勾选 WMTS。矢量图层、栅格图层与栅格切片包默认勾选。未启用时返回 404「服务未启用 WMTS」。
  • 下表中 $W 为 https://map-demo.geobridge.cn/geobridge-mapserver/rest/geodata/services/<服务路径>/MapServer/WMTS。
用途地址
能力文档(RESTful)$W/1.0.0/WMTSCapabilities.xml
能力文档(KVP)$W?SERVICE=WMTS&REQUEST=GetCapabilities;不带任何参数的 $W 同样返回能力文档
瓦片(RESTful)$W/tile/1.0.0/<图层>/<样式>/<矩阵集>/{TileMatrix}/{TileRow}/{TileCol}.<png|jpg|pbf>
瓦片(KVP)$W?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&LAYER=…&STYLE=default&FORMAT=image/png&TILEMATRIXSET=…&TILEMATRIX=…&TILEROW=…&TILECOL=…
GetFeatureInfo(RESTful)$W/tile/1.0.0/<图层>/<样式>/<矩阵集>/{TileMatrix}/{TileRow}/{TileCol}/{J}/{I}.<json|html|txt>
  • 瓦片地址请从能力文档每个图层的 ResourceURL 模板中读取,不要自己拼图层名:中文图层名在模板中已经过百分号编码。
  • KVP 的参数名不区分大小写;给了 SERVICE 或 REQUEST 时按标准校验:SERVICE=WMTS 必填,GetTile 与 GetFeatureInfo 的 VERSION=1.0.0 必填。
  • 只有 GET。能力文档带 ETag,内容未变时返回 304;也支持 Sections、AcceptVersions 与 UpdateSequence。
  • API Key 级别的服务:能力文档地址加 token=gb_xxx… 后,文档中的 KVP 地址与 ResourceURL 模板都会带上 token;也可以给每个请求加请求头 X-GeoBridge-Token。

图层、样式与格式 ​

服务图层格式
按需出图(未预切片,控制台发布的矢量与栅格服务默认如此)地图整体(标识为地图名)+ 每个子图层(标识为 WMS 图层名,分组展开;子图层的瓦片只画该图层)image/png(透明)、image/jpeg;服务器支持时另有 image/webp
预切片(含切片包)只有地图整体切片配置的格式:image/png、image/jpeg 或 application/vnd.mapbox-vector-tile(矢量切片)
  • 样式只有 default。
  • 能力文档中每个图层有经纬度范围(WGS84BoundingBox)、每个矩阵集坐标系下的 BoundingBox(4326、4490 纬度在前)、格式、可查询图层的 FeatureInfo 格式、矩阵集链接(预切服务带 TileMatrixSetLimits)与 ResourceURL。

矩阵集 ​

标识坐标系网格用于
GoogleMapsCompatibleEPSG:38570–24 级,第 z 级 2^z × 2^z,与 XYZ / MapLibre / OpenLayers 默认网格相同按需出图;与之同网格的预切服务
WebMercatorQuadEPSG:3857与 GoogleMapsCompatible 同一网格(OGC 2D-TMS 的标识)同上
WorldCRS84QuadCRS84(经纬度)0–20 级,第 z 级 2^(z+1) × 2^z,原点 (-180, 90)按需出图;同网格的 4326 预切
CGCS2000QuadEPSG:4490网格同 WorldCRS84Quad,左上角按 EPSG 轴序写作 90 -180按需出图;同网格的 4490 预切
default028mm服务坐标系由预切服务的切片方案推导(实际级别、分辨率、原点、瓦片尺寸),带 TileMatrixSetLimits预切服务
  • 矩阵标识(TileMatrix)为级别号 0、1、2…;比例尺分母按 OGC 约定的 0.28 mm 像素换算。
  • 按需出图的服务在前四种网格下都能出图,数据由平台重投影;能力文档不声明行列范围,数据范围外是透明瓦片。
  • 预切服务只声明与其实际网格一致的矩阵集(推导的 default028mm,以及级别与内置网格一致时的内置矩阵集);请求其他矩阵集为 InvalidParameterValue,超出 TileMatrixSetLimits 为 TileOutOfRange。

GetFeatureInfo ​

  • KVP:GetTile 的全部参数,加 I、J(瓦片内的像素列、行,从 0 开始)与 INFOFORMAT;RESTful 写法用扩展名表示格式。
  • INFOFORMAT:application/json(GeoJSON,属性中带 layer)、text/html、text/plain。识别规则同 WMS GetFeatureInfo(像素中心、容差 3 像素、只输出「输出字段」),每个查询图层最多 10 个要素。
  • 地图整体查询全部可查询的图层,子图层只查该图层;栅格图层不可查询。

客户端示例 ​

下面以 city-basemap 为例,CAPS 为能力文档地址:

bash
CAPS='https://map-demo.geobridge.cn/geobridge-mapserver/rest/geodata/services/city-basemap/MapServer/WMTS/1.0.0/WMTSCapabilities.xml'

QGIS:图层 → 添加图层 → 添加 WMS/WMTS 图层,新建连接,URL 填能力文档地址(API Key 级别加 ?token=gb_xxx…),连接后在「图块集」中选择图层与矩阵集。

ArcGIS Pro:插入 → 连接 → 新建 WMTS 服务器,URL 填能力文档地址。

GDAL

bash
# 列出图层与矩阵集(每个组合一个子数据集)
gdalinfo "WMTS:$CAPS"
# 按图层与矩阵集打开并转出
gdal_translate -of PNG -outsize 512 0 "WMTS:$CAPS,layer=<图层>,tilematrixset=WorldCRS84Quad" out.png

OpenLayers:读能力文档后用 optionsFromCapabilities,可用任一矩阵集(4326、4490 需要视图投影一致,4490 须先用 proj4 注册)。

js
import TileLayer from 'ol/layer/Tile'
import WMTSCapabilities from 'ol/format/WMTSCapabilities'
import WMTS, { optionsFromCapabilities } from 'ol/source/WMTS'

const text = await (await fetch(CAPS)).text()
const caps = new WMTSCapabilities().read(text)
const options = optionsFromCapabilities(caps, { layer: '<图层>', matrixSet: 'GoogleMapsCompatible', format: 'image/png' })
const layer = new TileLayer({ source: new WMTS(options) })

图层有多种格式时,OpenLayers 10 的 optionsFromCapabilities 会把全部格式的模板放进 urls,可能混用 PNG 与 JPEG;用 JS SDK 的 openlayers.wmtsSource() 可以只保留所选格式,并自动处理 API Key。

Cesium

js
const provider = new Cesium.WebMapTileServiceImageryProvider({
  url: 'https://map-demo.geobridge.cn/geobridge-mapserver/rest/geodata/services/city-basemap/MapServer/WMTS/tile/1.0.0/<图层>/{Style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png',
  layer: '<图层>',
  style: 'default',
  tileMatrixSetID: 'GoogleMapsCompatible',
})
viewer.imageryLayers.addImageryProvider(provider)

用 WorldCRS84Quad 或 CGCS2000Quad 时另给 tilingScheme: new Cesium.GeographicTilingScheme()。JS SDK 的 cesium.wmtsImageryProvider() 会读能力文档并自动选择网格与级别范围。

MapLibre:MapLibre 只支持 Web 墨卡托网格。用 GoogleMapsCompatible 或 WebMercatorQuad 的 RESTful 模板,把 {TileMatrix}/{TileRow}/{TileCol} 换成 {z}/{y}/{x}:

js
map.addSource('wmts', {
  type: 'raster',
  tileSize: 256,
  tiles: ['https://map-demo.geobridge.cn/geobridge-mapserver/rest/geodata/services/city-basemap/MapServer/WMTS/tile/1.0.0/<图层>/default/WebMercatorQuad/{z}/{y}/{x}.png'],
})
map.addLayer({ id: 'wmts', type: 'raster', source: 'wmts' })

JS SDK 的 maplibre.addWmtsService() 会读能力文档并完成上述转换。

异常 ​

OWS 1.1 ExceptionReport(text/xml):

代码情形状态
MissingParameterValue缺少 Service、Request、Version、Layer、Style、Format、TileMatrixSet、TileMatrix、TileRow、TileCol、I、J、InfoFormat400
InvalidParameterValue服务、版本不对;图层、样式、格式、矩阵集、矩阵不存在;行列号不是整数;图层不可查询400
TileOutOfRange行列号超出矩阵或 TileMatrixSetLimits400
PointIJOutOfRangeI、J 超出瓦片像素范围400
VersionNegotiationFailedAcceptVersions 中没有 1.0.0400
InvalidUpdateSequenceUpdateSequence 大于当前值或不是整数400
OperationNotSupported未知操作501
NoApplicableCode服务未配置切片(404);繁忙、超时(503,带 Retry-After: 5);其他(500)404 / 503 / 500

已知限制 ​

  • 只有 GET(KVP 与 RESTful),没有 SOAP。
  • 样式只有 default,不支持维度(时间、高程)。
  • 预切服务只有地图整体一个图层;按需出图的服务在能力文档中不声明行列范围。
  • 预切服务按切片方案推导的 default028mm 不是标准四叉树网格,MapLibre 与 Cesium 无法直接使用,请用 OpenLayers、QGIS 或 GDAL。