0

运行 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 来说是非常繁重的。奇怪的是,即使ows:WGS84BoundingBox在上述服务/层的 getCapabilities 中定义了,也会发生这种沉重的负担。也许 openlayers 正在对所有这数千个图块进行一些数学运算,也许是为了确定该图块是否在边界框内。Openlayers 不会在ows:WGS84BoundingBox. 如果在其中,它会请求缩放级别 11 并按预期显示在地图上。这里的主要问题是 CPU 税。我不担心有很多请求会对服务征税。

我可以通过将地图图层的 minzoom 属性设置为 11 来消除这个问题setMinZoom()。但是,我不知道确定 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,我认为这也是一个可以接受的答案。

4

1 回答 1

1

设置 maxResolution 而不是 minZoom 会更容易

如果您使用 optionsFromCapabilities,您可以获得瓷砖网格中使用的 maxResolution

        var source = new ol.source.WMTS(options);
        var layer = new ol.layer.Tile({
            source: source,
            maxResolution: options.tileGrid.getResolution(0)
        });

如果您想让它超过 1 或 2 个额外的缩放级别,请乘以 2 或 4

于 2020-08-26T19:14:08.310 回答