WMTS 的切片坐标系统和其组织方式可参考图 23:
图 23 WMTS 的坐标系统和组织方式
如果知道一个请求的边界范围,可以根据以下的算法获取切片的序号:
// 计算切片序号范围
epsilon = 1e-6[1] //一个不影响坐标精度的小数值
tileMinCol = floor((bBoxMinX - tileMatrixMinX) / tileSpanX + epsilon)
tileMaxCol = floor((bBoxMaxX - tileMatrixMinX) / tileSpanX - epsilon)
tileMinRow = floor((tileMatrixMaxY - bBoxMaxY) / tileSpanY + epsilon)
tileMaxRow = floor((tileMatrixMaxY - bBoxMinY) / tileSpanY - epsilon)
// 避免超出范围
if (tileMinCol < 0) tileMinCol = 0
if (tileMaxCol >= matrixWidth) tileMaxCol = matrixWidth-1
if (tileMinRow < 0) tileMinRow = 0
if (tileMaxRow >= matrixHeight) tileMaxRow = matrixHeight-1
在一个 WMTS 服务中包括以下 3 个操作:
1. GetCapabilities(获取服务的元信息)
2. GetTile(获取切片)
3. GetFeatureInfo(可选,获取点选的要素信息)可以看到这些操作和WMS 的操作非常的异曲同工。
标准文档如是说,但我视得这个地方应该取一负值。