ToB企服应用市场:ToB评测及商务社交产业平台
标题:
GIS OGC之WMTS舆图服务,通过Capabilities XML描述文档,获取matrixIds,or
[打印本页]
作者:
杀鸡焉用牛刀
时间:
2024-9-24 12:48
标题:
GIS OGC之WMTS舆图服务,通过Capabilities XML描述文档,获取matrixIds,or
GIS OGC之WMTS舆图服务,通过Capabilities XML描述文档,获取matrixIds,origin,计算resolutions
需求:如何根据WMTS服务的Capabilities描述文档得到,openlayers调用wmts服务时的matrixIds,origin和resolutions参数
方法:
GoogleMapsCompatible (EPSG:3857)、GoogleCRS84Quad (EPSG:4326)、CGCS2000(EPSG:4490)(4490与4326差别很小,可以直接利用4326)可以直接查Web舆图切片(瓦片)服务(WMTS)简朴配置文件给出的通用比例尺分辨率(2.3.1节,2.2.2节)
其他或自定义坐标系(投影),通过WMTS服务的Capabilities描述文档中ows:Identifier、TopLeftCorner、ScaleDenominator节点进行计算(2.3.3节)
1 OGC
OGC ——开放地理空间信息联盟(Open Geospatial Consortium), 是一个国际组织,致力于制定和推广开放的地理空间标准和规范。这些标准涵盖了地理信息系统(GIS)、遥感、舆图服务和其他地理空间技术。OGC的目标是提高差别系统和应用之间的数据互操纵性和共享性。而这些所谓的标准实在就是一些接口或编码的技术文档,差别的厂商、各种 GIS 产物都可以对照这些文档来定义开放服务的接口、空间数据存储的编码、空间操纵的方法。
OGC 已经是一个比较“官方”的标准化机构了,它不但包括了 ESRI、Google、Oracle 等业界强势企业作为其成员,同时还和 W3C、ISO、IEEE 等协会或组织结成合作同伴关系。因此,OGC 的标准固然并不带有强制性,但是因为其配景和汗青的缘故原由,它所制定的标准自然地具有一定的权威性。
OGC 目前提供的标准多达几十种,包括我们常用到的 WMS、WFS、WCS、WMTS 等等,另有一些地理数据信息的描述文档,比如 KML(Keyhole标志语言)、SFS(简朴对象描述)、GML(地理标志语言)、SLD(地理数据符号化)等。
服务全称
WMS
Web Map Service(网络舆图服务)
WFS
Web Feature Service(网络要素服务)
WCS
Web Coverage Service(网络覆盖服务)
WMTS
Web Map Tile Service(网络舆图切片(瓦片)服务)WMTS 是 OGC 首个支持 restful 风格的服务标准
2 WMTS
2.1 定义
WMTS(Web Map Tile Service)官网解释是"wmts定义了一组接口,用于利用具有预定义内容、范围和分辨率的分块图像对空间参考数据的舆图分块进行基于Web的哀求",
简朴说来
wmts是 OGC 提出的可视化标准之一,用于在网络上高效地分发和显示舆图切片(瓦片)。WMTS 通过将舆图分割成固定大小的切片(瓦片)(tiles),并允许客户端按需哀求这些切片(瓦片),从而实现了舆图数据的快速加载和高效的缓存机制。
2.2 规范分析
起首在OGC官网下载WMTS实现标准文档(OpenGIS Web Map Tile Service Implementation Standard)
2.2.1 实现操纵
GetCapabilities(必须实现,以是wmts都会有Capabilities文档用于说明各种参数)
GetCapabilities操纵获取Capabilities文档,该文档描述了如何识别WMTS资源或生成WMTS哀求操纵。元数据的重要内容是TileMatrixSet摘要信息和具体内容,如界限框、支持的坐标参考系(CRS)、是否有已知的刻度集以及关于多个级别的TileMatrix数据。假如有一个可选的“主题”部分,则无需为层属性指定任何继承规则。
GetTile(必须实现,以是才气让客户端哀求到切片(瓦片))
GetTile操纵获取切片(瓦片)资源,以预定义格式哀求特定tileMatrix集的特定tileMatrix。图块资源表示一个图层的舆图表达结果的一小块。
GetFeatureInfo(可选)
GetFeatureInfo操纵获取要素信息(FeatureInfo)资源。该资源提供了图块舆图中某一特定像素位置处地物要素的信息,与 WMS 中 GetFeatureInfo 操纵的行为相似,以文本形式通过提供比如专题属性名称及其取值的方式返回相关信息。
2.2.2 Capabilities文档
2.2.3.1 Capabilities文档布局
Capabilities文档是xml布局形式,文档描述了服务中可用的资源以及对接该服务的必备条件,以下这几个节点信息是从本领文件中必要获取的对接WMTS服务的关键参数。
以天舆图Capabilities文档为例,重点解释contents下的节点
2.2.3.1.1 layer(图层)
WMTS文档定义
天舆图Capabilities文档
概念解释Title图层名Identifier图层标识符WGS84BoundingBox,BoundingBox图层舆图范围(纬度,经度)Style图层的样式TileMatrixSetLink矩阵集链接,这部分只提供比例尺集合的标识符,然后必要到TileMatrixSet中去索引到对应的比例尺集合 根据差别服务还大概有Format、ResourceURL等字段
2.2.3.1.2 TileMatrixSet(切片(瓦片)矩阵集)
WMTS规定利用切片(瓦片)矩阵集(Tile Matrix Set)来表示切割后的舆图,如下图所示。切片(瓦片)就是包罗地理数据的矩形影像,一幅舆图按一定的切片(瓦片)大小被切割成多个切片(瓦片),形成切片(瓦片)矩阵,一个或多个切片(瓦片)矩阵即组成切片(瓦片)矩阵集。差别的切片(瓦片)矩阵具有差别的分辨率,每个切片(瓦片)矩阵由切片(瓦片)矩阵标识符(一般为切片(瓦片)矩阵的序号,分辨率最低的一层为第0层,依次递增)进行标识。
可以看到,差别级别的切片(瓦片)组合起来雷同金字塔型矩阵,切片(瓦片)数量由少逐渐变多,分辨率(resolution)由粗略到精细,比例尺(scale denominator)由高到低
切片(瓦片)矩阵中的每个切片(瓦片)由切片(瓦片)的行列号来标识,行列号分别从切片(瓦片)矩阵左上角点所在的切片(瓦片)开始算起,起始行列值是(0,0),依次向下向右增加,如下图,也就是取切片(瓦片)的索引号。
概念解释举例左上角(TopLeftCorner)WMTS 标准中,TopLeftCorner 是描述矩阵集(TileMatrixSet)的左上角坐标的字符序列,由坐标X和坐标Y组成。航空和海运部门通常期望纬度在经度之前。固然没有标准明确规定纬度必须在经度之前,但是一般来说都会采取纬度在经度之前的顺序。比如:天舆图Capabilities文档中的矩阵会合<TopLeftCorner>90.0 -180.0</TopLeftCorner>中应该是先纬度后经度的顺序界限框的左上角坐标(TileMatrixmMinX,TileMatrixMaxY)留意界限框的原点是左下角矩阵的宽(MatrixWidth)和高(MatrixHeight)在row方向和col方向上的切片(瓦片)数切片(瓦片)的行(TileRow)和列(TileCol)行列值分别从切片(瓦片)矩阵左上角点所在的切片(瓦片)开始算起,起始行列值是(0,0),依次向下向右增加切片(瓦片)的宽(TileWidth)和高(TileHeight)一般是256*256,512*512
WMTS文档定义
天舆图Capabilities文档
概念解释Identifier当前级别矩阵的IDTopLeftCorner当前切片(瓦片)的左上角位置,此处是经纬度直投影TileWidth、TileHeight切片(瓦片)的像素长宽,即 256 × 256 像素MatrixWidth、MatrixHeight代表这一级切片(瓦片)横向纵向跨度有多少个切片(瓦片)ScaleDenominator比例尺分母(直译,其值是一个像素代表的实际距离与像素尺寸的比值)
2.3 分辨率(resolution)获取
WMTS 服务器只提供有限种坐标系和有限种比例尺的服务,为了提高客户端和服务器的互操纵本领,WMTS 提出通用比例尺集(Well-known scale set)的概念。通用比例尺集是 WMTS 服务器之间的一个协定,由一个公共的坐标参考系统和一组公共的比例尺集合组成。
通用比例尺集有:
GoogleCRS84Quad
GoogleMapsCompatible
GlobalCRS84Scale
GlobalCRS84Pixel
// 天地图经纬度投影分辨率可以直接使用
const GoogleCRS84QuadResolution = [1.40625000000000, 0.703125000000000, 0.351562500000000, 0.175781250000000,
0.0878906250000000, 0.0439453125000000, 0.0219726562500000, 0.0109863281250000,
0.00549316406250000, 0.00274658203125000, 0.00137329101562500, 0.000686645507812500,
0.000343322753906250, 0.000171661376953125, 0.0000858306884765625,
0.0000429153442382812, 0.0000214576721191406, 0.0000107288360595703, 0.00000536441802978516
];
// 天地图莫卡托投影分辨率可以直接使用
const GoogleMapsCompatibleResolutions = [156543.0339280410, 78271.51696402048, 39135.75848201023,
19567.87924100512, 9783.939620502561, 4891.969810251280, 2445.984905125640,
1222.992452562820, 611.4962262814100, 305.7481131407048, 152.8740565703525,
76.43702828517624, 38.21851414258813, 19.10925707129406, 9.554628535647032,
4.777314267823516, 2.388657133911758, 1.194328566955879, 0.5971642834779395
];
const GlobalCRS84PixelResolution= [240000, 120000, 60000, 40000,
20000, 10000, 4000, 2000,
1000, 500, 166, 100,
33, 16, 10, 3,
1, 0.33
];
const GlobalCRS84ScaleResolutions = [1.25764139776733, 0.628820698883665, 0.251528279553466,
0.125764139776733, 0.0628820698883665, 0.0251528279553466, 0.0125764139776733, 0.00628820698883665,
0.00251528279553466, 0.00125764139776733, 0.000628820698883665, 0.000251528279553466,
0.000125764139776733, 0.0000628820698883665, 0.0000251528279553466, 0.0000125764139776733,
0.00000628820698883665, 0.00000251528279553466, 0.00000125764139776733, 0.000000628820698883665,
0.00000025152827955346
];
复制代码
根据Web舆图切片(瓦片)服务(WMTS)简朴配置文件,可以查到两种投影的分辨率
2.3.1 GoogleMapsCompatible(EPSG::3857)
<TileMatrixSet>
<ows:Title>Google Maps Compatible for the World</ows:Title>
<ows:Identifier>WorldWebMercatorQuad</ows:Identifier>
<ows:BoundingBox crs=“urn:ogc:def:crs:EPSG::3857”>
<ows:LowerCorner>-20037508.3427892 -20037508.3427892</ows:LowerCorner>
<ows:UpperCorner>20037508.3427892 20037508.3427892</ows:UpperCorner>
</ows:BoundingBox>
<ows:SupportedCRS>
urn:ogc:def:crs:EPSG::3857
</ows:SupportedCRS>
<WellKnownScaleSet>
urn:ogc:def:wkss:OGC:1.0:GoogleMapsCompatible
</WellKnownScaleSet>
<TileMatrix>
<ows:Identifier>0</ows:Identifier>
<ScaleDenominator>559082264.0287178</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>1</MatrixWidth>
<MatrixHeight>1</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>1</ows:Identifier>
<ScaleDenominator>279541132.0143589</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>2</MatrixWidth>
<MatrixHeight>2</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>2</ows:Identifier>
<ScaleDenominator>139770566.0071794</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>4</MatrixWidth>
<MatrixHeight>4</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>3</ows:Identifier>
<ScaleDenominator>69885283.00358972</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>8</MatrixWidth>
<MatrixHeight>8</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>4</ows:Identifier>
<ScaleDenominator>34942641.50179486</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>16</MatrixWidth>
<MatrixHeight>16</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>5</ows:Identifier>
<ScaleDenominator>17471320.75089743</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>32</MatrixWidth>
<MatrixHeight>32</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>6</ows:Identifier>
<ScaleDenominator>8735660.375448715</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>64</MatrixWidth>
<MatrixHeight>64</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>7</ows:Identifier>
<ScaleDenominator>4367830.187724357</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>128</MatrixWidth>
<MatrixHeight>128</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>8</ows:Identifier>
<ScaleDenominator>2183915.093862179</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>256</MatrixWidth>
<MatrixHeight>256</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>9</ows:Identifier>
<ScaleDenominator>1091957.546931089</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>512</MatrixWidth>
<MatrixHeight>512</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>10</ows:Identifier>
<ScaleDenominator>545978.7734655447</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>1024</MatrixWidth>
<MatrixHeight>1024</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>11</ows:Identifier>
<ScaleDenominator>272989.3867327723</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>2048</MatrixWidth>
<MatrixHeight>2048</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>12</ows:Identifier>
<ScaleDenominator>136494.6933663862</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>4096</MatrixWidth>
<MatrixHeight>4096</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>13</ows:Identifier>
<ScaleDenominator>68247.34668319309</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>8192</MatrixWidth>
<MatrixHeight>8192</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>14</ows:Identifier>
<ScaleDenominator>34123.67334159654</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>16384</MatrixWidth>
<MatrixHeight>16384</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>15</ows:Identifier>
<ScaleDenominator>17061.83667079827</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>32768</MatrixWidth>
<MatrixHeight>32768</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>16</ows:Identifier>
<ScaleDenominator>8530.918335399136</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>65536</MatrixWidth>
<MatrixHeight>65536</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>17</ows:Identifier>
<ScaleDenominator>4265.459167699568</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>131072</MatrixWidth>
<MatrixHeight>131072</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>18</ows:Identifier>
<ScaleDenominator>2132.729583849784</ScaleDenominator>
<TopLeftCorner>
-20037508.3427892 20037508.3427892
</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>262114</MatrixWidth>
<MatrixHeight>262114</MatrixHeight>
</TileMatrix>
</TileMatrixSet>
复制代码
参数如下:
CRS: urn
gc:def:crs:EPSG:6.18:3:3857
WGS 84 / Pseudo-Mercator
BBOX LowerCorner: -20037508.3427892 -20037508.3427892
BBOX UpperCorner: 20037508.3427892 20037508.3427892
WellKnownScaleSet:
urn
gc:def:wkss:OGC:1.0:GoogleMapsCompatible
TopLeftCorner: -20037508.3427892 20037508.3427892
TileWidth: 256
TileHeight: 256
Zoom level idScale DenominatorPixel Size (m)Matrix WidthMatrix Height0559082264.0287178156543.0339280410111279541132.014358978271.51696402048222139770566.007179439135.7584820102344369885283.0035897219567.8792410051288434942641.501794869783.9396205025611616517471320.750897434891.969810251280323268735660.3754487152445.984905125640646474367830.1877243571222.99245256282012812882183915.093862179611.496226281410025625691091957.546931089305.748113140704851251210545978.7734655447152.87405657035251024102411272989.386732772376.437028285176242048204812136494.693366386238.21851414258813409640961368247.3466831930919.10925707129406819281921434123.673341596549.55462853564703216384163841517061.836670798274.7773142678235163276832768168530.9183353991362.3886571339117586553665536174265.4591676995681.194328566955879131072131072182132.7295838497840.5971642834779395262144262144 此中:
Pixel Size单元是米(m)
TopLeftCorner即为ol中的origin数组
各级Zoom level id集合起来即为ol中的matrixIds数组
各级Pixel Size (m)集合起来即为ol中的resolutions数组
天舆图莫卡托投影固然各级Scale Denominator和上面GoogleMapsCompatible(EPSG的各级Scale Denominator不一样,但是计算出来的分辨率是一样的,也就是上面Pixel Size (degrees)数组(因为都是EPSG:3857)
2.3.2 GoogleCRS84Quad (可以明确为EPSG:4326)
<TileMatrixSet>
<ows:Title>CRS84 for the World</ows:Title>
<ows:Identifier>WorldCRS84Quad</ows:Identifier>
<ows:BoundingBox crs=“urn:ogc:def:crs:OGC:1.3:CRS84”>
<ows:LowerCorner>-180 -90</ows:LowerCorner>
<ows:UpperCorner>180 90</ows:UpperCorner>
</ows:BoundingBox>
<ows:SupportedCRS>
urn:ogc:def:crs:OGC:1.3:CRS84
</ows:SupportedCRS>
<WellKnownScaleSet>
urn:ogc:def:wkss:OGC:1.0:GoogleCRS84Quad
</WellKnownScaleSet>
<TileMatrix>
<ows:Identifier>-1</ows:Identifier>
<ScaleDenominator>559082264.0287178</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>1</MatrixWidth>
<MatrixHeight>1</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>0</ows:Identifier>
<ScaleDenominator>279541132.0143589</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>2</MatrixWidth>
<MatrixHeight>1</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>1</ows:Identifier>
<ScaleDenominator>139770566.0071794</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>4</MatrixWidth>
<MatrixHeight>2</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>2</ows:Identifier>
<ScaleDenominator>69885283.00358972</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>8</MatrixWidth>
<MatrixHeight>4</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>3</ows:Identifier>
<ScaleDenominator>34942641.50179486</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>16</MatrixWidth>
<MatrixHeight>8</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>4</ows:Identifier>
<ScaleDenominator>17471320.75089743</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>32</MatrixWidth>
<MatrixHeight>16</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>5</ows:Identifier>
<ScaleDenominator>8735660.375448715</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>64</MatrixWidth>
<MatrixHeight>32</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>6</ows:Identifier>
<ScaleDenominator>4367830.187724357</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>128</MatrixWidth>
<MatrixHeight>64</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>7</ows:Identifier>
<ScaleDenominator>2183915.093862179</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>256</MatrixWidth>
<MatrixHeight>128</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>8</ows:Identifier>
<ScaleDenominator>1091957.546931089</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>512</MatrixWidth>
<MatrixHeight>256</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>9</ows:Identifier>
<ScaleDenominator>545978.7734655447</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>1024</MatrixWidth>
<MatrixHeight>512</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>10</ows:Identifier>
<ScaleDenominator>272989.3867327723</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>2048</MatrixWidth>
<MatrixHeight>1024</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>11</ows:Identifier>
<ScaleDenominator>136494.6933663862</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>4096</MatrixWidth>
<MatrixHeight>2048</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>12</ows:Identifier>
<ScaleDenominator>68247.34668319309</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>8192</MatrixWidth>
<MatrixHeight>4096</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>13</ows:Identifier>
<ScaleDenominator>34123.67334159654</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>16384</MatrixWidth>
<MatrixHeight>8192</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>14</ows:Identifier>
<ScaleDenominator>17061.83667079827</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>32768</MatrixWidth>
<MatrixHeight>16384</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>15</ows:Identifier>
<ScaleDenominator>8530.918335399136</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>65536</MatrixWidth>
<MatrixHeight>32768</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>16</ows:Identifier>
<ScaleDenominator>4265.459167699568</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>131072</MatrixWidth>
<MatrixHeight>65536</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>17</ows:Identifier>
<ScaleDenominator>2132.729583849784</ScaleDenominator>
<TopLeftCorner>-180 90</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>262144</MatrixWidth>
<MatrixHeight>131072</MatrixHeight>
</TileMatrix>
</TileMatrixSet>
复制代码
参数如下:
CRS: urn
gc:def:crs:OGC:1.3:CRS84 CRS84
BBOX LowerCorner: -180 -90
BBOX UpperCorner: 180 90
WellKnownScaleSet: urn
gc:def:wkss:OGC:1.0:GoogleCRS84Quad
TopLeftCorner: -180 90
TileWidth: 256
TileHeight: 256
Zoom level idScale DenominatorPixel Size (degrees)Matrix WidthMatrix Height-1559082264.02871781.40625000000000110279541132.01435890.703125000000000211139770566.00717940.35156250000000042269885283.003589720.17578125000000084334942641.501794868.78906250000000 *10-2168417471320.750897434.39453125000000 *10-2321658735660.3754487152.19726562500000 *10-2643264367830.1877243571.09863281250000 *10-21286472183915.0938621795.49316406250000 *10-325612881091957.5469310892.74658203125000 *10-35122569545978.77346554471.37329101562500 *10-3102451210272989.38673277236.86645507812500 *10-42048102411136494.69336638623.43322753906250 *10-4409620481268247.346683193091.71661376953125 *10-4819240961334123.673341596548.58306884765625 *10-51638481921417061.836670798274.29153442382812 *10-53276816384158530.9183353991362.14576721191406 *10-56553632768164265.4591676995681.07288360595703 *10-513107265536172132.7295838497845.36441802978516 *10-6262144131072 此中:
Pixel Size单元是度(degrees)
TopLeftCorner即为ol中的origin数组
各级Zoom level id集合起来即为ol中的matrixIds数组
各级Pixel Size (degrees)集合起来即为ol中的resolutions数组
天舆图经纬度投影固然各级Scale Denominator和上面GoogleCRS84Quad的各级Scale Denominator不一样,但是计算出来的分辨率是一样的(因为都是EPSG:4326),也就是上面Pixel Size (degrees)数组
2.3.3 自定义坐标系(投影)
2.3.3.1 检察Capabilities描述文档
根据前面的规范分析,WMTS服务必须实现GetCapabilities操纵,也就是一定有一个描述文档,一般访问路径是如许的格式http://example.com/wmts?request=GetCapabilities,检察中的TileMatrixSet节点下参数,如下图:
TopLeftCorner即为ol中的origin数组(留意,假如是经纬度投影,顺序是纬度经度,origin顺序是经度纬度)
各级ows:Identifier集合起来即为ol中的matrixIds数组(根据文档,ows:Identifier为-1的可以删除)
ScaleDenominator集合起来经过计算后才气得到ol中的resolutions数组
**分辨率(resolution)的计算**:
由此,可以计算出每一级的分辨率,比如天舆图经纬度投影,
<Capabilities xmlns="http://www.opengis.net/wmts/1.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/wmts/1.0 http://schemas.opengis.net/wmts/1.0.0/wmtsGetCapabilities_response.xsd" version="1.0.0">
<script/>
<ows:ServiceIdentification>
<ows:Title>在线地图服务</ows:Title>
<ows:Abstract>基于OGC标准的地图服务</ows:Abstract>
<ows:Keywords>
<ows:Keyword>OGC</ows:Keyword>
</ows:Keywords>
<ows:ServiceType codeSpace="wmts"/>
<ows:ServiceTypeVersion>1.0.0</ows:ServiceTypeVersion>
<ows:Fees>none</ows:Fees>
<ows:AccessConstraints>none</ows:AccessConstraints>
</ows:ServiceIdentification>
<ows:ServiceProvider>
<ows:ProviderName>国家基础地理信息中心</ows:ProviderName>
<ows:ProviderSite>http://www.tianditu.gov.cn</ows:ProviderSite>
<ows:ServiceContact>
<ows:IndividualName>Mr Wang</ows:IndividualName>
<ows:PositionName>Software Engineer</ows:PositionName>
<ows:ContactInfo>
<ows:Phone>
<ows:Voice>010-63881203</ows:Voice>
<ows:Facsimile>010-63881203</ows:Facsimile>
</ows:Phone>
<ows:Address>
<ows:DeliveryPoint>北京市海淀区莲花池西路28号</ows:DeliveryPoint>
<ows:City>北京市</ows:City>
<ows:AdministrativeArea>北京市</ows:AdministrativeArea>
<ows:Country>中国</ows:Country>
<ows:PostalCode>100830</ows:PostalCode>
<ows:ElectronicMailAddress>tdt@ngcc.cn</ows:ElectronicMailAddress>
</ows:Address>
<ows:OnlineResource xlink:type="simple" xlink:href="http://www.tianditu.gov.cn"/>
</ows:ContactInfo>
</ows:ServiceContact>
</ows:ServiceProvider>
<ows:OperationsMetadata>
<ows:Operation name="GetCapabilities">
<ows:DCP>
<ows:HTTP>
<ows:Get xlink:href="http://t0.tianditu.gov.cn/img_c/wmts?">
<ows:Constraint name="GetEncoding">
<ows:AllowedValues>
<ows:Value>KVP</ows:Value>
</ows:AllowedValues>
</ows:Constraint>
</ows:Get>
</ows:HTTP>
</ows:DCP>
</ows:Operation>
<ows:Operation name="GetTile">
<ows:DCP>
<ows:HTTP>
<ows:Get xlink:href="http://t0.tianditu.gov.cn/img_c/wmts?">
<ows:Constraint name="GetEncoding">
<ows:AllowedValues>
<ows:Value>KVP</ows:Value>
</ows:AllowedValues>
</ows:Constraint>
</ows:Get>
</ows:HTTP>
</ows:DCP>
</ows:Operation>
</ows:OperationsMetadata>
<Contents>
<Layer>
<ows:Title>img</ows:Title>
<ows:Abstract>img</ows:Abstract>
<ows:Identifier>img</ows:Identifier>
<ows:WGS84BoundingBox>
<ows:LowerCorner>-180.0 -90.0</ows:LowerCorner>
<ows:UpperCorner>180.0 90.0</ows:UpperCorner>
</ows:WGS84BoundingBox>
<ows:BoundingBox>
<ows:LowerCorner>-180.0 -90.0</ows:LowerCorner>
<ows:UpperCorner>180.0 90.0</ows:UpperCorner>
</ows:BoundingBox>
<Style>
<ows:Identifier>default</ows:Identifier>
</Style>
<Format>tiles</Format>
<TileMatrixSetLink>
<TileMatrixSet>c</TileMatrixSet>
</TileMatrixSetLink>
</Layer>
<TileMatrixSet>
<ows:Identifier>c</ows:Identifier>
<ows:SupportedCRS>urn:ogc:def:crs:EPSG::4490</ows:SupportedCRS>
<TileMatrix>
<ows:Identifier>1</ows:Identifier>
<ScaleDenominator>2.958293554545656E8</ScaleDenominator>
<TopLeftCorner>90.0 -180.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>2</MatrixWidth>
<MatrixHeight>1</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>2</ows:Identifier>
<ScaleDenominator>1.479146777272828E8</ScaleDenominator>
<TopLeftCorner>90.0 -180.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>4</MatrixWidth>
<MatrixHeight>2</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>3</ows:Identifier>
<ScaleDenominator>7.39573388636414E7</ScaleDenominator>
<TopLeftCorner>90.0 -180.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>8</MatrixWidth>
<MatrixHeight>4</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>4</ows:Identifier>
<ScaleDenominator>3.69786694318207E7</ScaleDenominator>
<TopLeftCorner>90.0 -180.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>16</MatrixWidth>
<MatrixHeight>8</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>5</ows:Identifier>
<ScaleDenominator>1.848933471591035E7</ScaleDenominator>
<TopLeftCorner>90.0 -180.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>32</MatrixWidth>
<MatrixHeight>16</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>6</ows:Identifier>
<ScaleDenominator>9244667.357955175</ScaleDenominator>
<TopLeftCorner>90.0 -180.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>64</MatrixWidth>
<MatrixHeight>32</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>7</ows:Identifier>
<ScaleDenominator>4622333.678977588</ScaleDenominator>
<TopLeftCorner>90.0 -180.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>128</MatrixWidth>
<MatrixHeight>64</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>8</ows:Identifier>
<ScaleDenominator>2311166.839488794</ScaleDenominator>
<TopLeftCorner>90.0 -180.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>256</MatrixWidth>
<MatrixHeight>128</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>9</ows:Identifier>
<ScaleDenominator>1155583.419744397</ScaleDenominator>
<TopLeftCorner>90.0 -180.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>512</MatrixWidth>
<MatrixHeight>256</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>10</ows:Identifier>
<ScaleDenominator>577791.7098721985</ScaleDenominator>
<TopLeftCorner>90.0 -180.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>1024</MatrixWidth>
<MatrixHeight>512</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>11</ows:Identifier>
<ScaleDenominator>288895.85493609926</ScaleDenominator>
<TopLeftCorner>90.0 -180.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>2048</MatrixWidth>
<MatrixHeight>1024</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>12</ows:Identifier>
<ScaleDenominator>144447.92746804963</ScaleDenominator>
<TopLeftCorner>90.0 -180.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>4096</MatrixWidth>
<MatrixHeight>2048</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>13</ows:Identifier>
<ScaleDenominator>72223.96373402482</ScaleDenominator>
<TopLeftCorner>90.0 -180.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>8192</MatrixWidth>
<MatrixHeight>4096</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>14</ows:Identifier>
<ScaleDenominator>36111.98186701241</ScaleDenominator>
<TopLeftCorner>90.0 -180.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>16384</MatrixWidth>
<MatrixHeight>8192</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>15</ows:Identifier>
<ScaleDenominator>18055.990933506204</ScaleDenominator>
<TopLeftCorner>90.0 -180.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>32768</MatrixWidth>
<MatrixHeight>16384</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>16</ows:Identifier>
<ScaleDenominator>9027.995466753102</ScaleDenominator>
<TopLeftCorner>90.0 -180.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>65536</MatrixWidth>
<MatrixHeight>32768</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>17</ows:Identifier>
<ScaleDenominator>4513.997733376551</ScaleDenominator>
<TopLeftCorner>90.0 -180.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>131072</MatrixWidth>
<MatrixHeight>65536</MatrixHeight>
</TileMatrix>
<TileMatrix>
<ows:Identifier>18</ows:Identifier>
<ScaleDenominator>2256.998866688275</ScaleDenominator>
<TopLeftCorner>90.0 -180.0</TopLeftCorner>
<TileWidth>256</TileWidth>
<TileHeight>256</TileHeight>
<MatrixWidth>262144</MatrixWidth>
<MatrixHeight>131072</MatrixHeight>
</TileMatrix>
</TileMatrixSet>
</Contents>
</Capabilities>
复制代码
可以得到ol的wmts参数:
const origin= [90,-180]
const matrixIds= [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
const resolutions=[
2.958293554545656e8, 1.479146777272828e8, 7.39573388636414e7, 3.69786694318207e7,
1.848933471591035e7, 9244667.357955175, 4622333.678977588, 2311166.839488794,
1155583.419744397, 577791.7098721985, 288895.85493609926, 144447.92746804963,
72223.96373402482, 36111.98186701241, 18055.990933506204, 9027.995466753102,
4513.997733376551, 2256.998866688275
].map(item=> 0.0254 * item / (96 * (Math.PI * 2 * 6378137 / 360)))
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4