当WMTS getCapabilities TileMatrixSet没有列出低缩放级别的TileMatrix的

问题描述

运行OL版本6.4.3

我正在与具有这样的TileMatrixSet的WMTS服务进行交互:

<TileMatrixSet>
  <ows:Title>GoogleMapsCompatible</ows:Title>
  <ows:Abstract>GoogleMapsCompatible EPSG:3857</ows:Abstract>
  <ows:Identifier>GoogleMapsCompatible</ows:Identifier>
  <ows:SupportedCRS>urn:ogc:def:crs:EPSG::3857</ows:SupportedCRS>

然后列出与缩放级别11到18对应的TileMatrix。

示例:

<TileMatrix>
  <ows:Identifier>11</ows:Identifier>
  <ScaleDenominator>272989.38673277345</ScaleDenominator>
  <TopLeftCorner>-20037508.34278925 20037508.34278925</TopLeftCorner>
  <TileWidth>256</TileWidth>
  <TileHeight>256</TileHeight>
  <MatrixWidth>2048</MatrixWidth>
  <MatrixHeight>2048</MatrixHeight>
</TileMatrix>

就像我说的那样,仅列出了11到18,因此缺少0-10。这似乎很不正常。当在0到10之间缩小时,openlayers似乎要尝试做的是用缩放级别11的图块填充屏幕。这就是在缩放级别0时成千上万的图块。这在浏览器CPU上非常费力。奇怪的是,即使在以上服务/层的getCapabilities中定义了ows:WGS84BoundingBox,也会发生这种繁重的工作。也许openlayers在所有这数千个图块上执行了一些数学运算,也许是为了确定该图块是否在边界框内。 Openlayers不在ows:WGS84BoundingBox之外执行网络请求。如果在该范围内,它将请求缩放级别11并按预期显示在地图上。这里的主要问题是CPU负担。我不担心会对很多请求收税。

我可以通过使用setMinZoom()将地图图层的minzoom属性设置为11来消除此问题。但是,我不知道确定minzoom应该为11的好方法。在TileMatrixSet中,不能保证ows:Identifier等于缩放级别。我想这只是个名字。我应该使用比例分母做一些数学运算吗?

也就是说,我也不希望在缩放到低于缩放级别11时数据会消失。请注意,对于上述服务/图层,在缩放级别11时,数据可以放入一个256x256的图块中。我想我可以根据自己的喜好减去大约2个缩放级别:layer.setMinZoom(max(0,min_zoom_available-2))

我相信一种为自己重现大量CPU负担的方法,采用https://openlayers.org/en/latest/examples/wmts.html并将第14-16行修改为:

var resolutions = new Array(4);
var matrixIds = new Array(4);
for (var z = 10; z < 14; ++z) {

然后缩小到较低的缩放级别。由于示例代码中的Demographics/USA_Population_Density服务是全局的,因此无法模拟确切的情况。也许您可以以某种方式修改范围。

如果答案是我由于不符合规格/标准而需要推迟服务提供商,那是可以接受的答案。特别是如果我可以找到这样的标准。或者,如果有getCapabilities属性,服务提供商可以设置openlayers(或我的应用代码)可以读取以便设置minzoom,我认为这也是一个可以接受的答案。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)