首页 > 解决方案 > 如果这些图块不存在,则阻止在 OpenLayers 3 中加载图块

问题描述

我在 xyz 文件夹结构中有一个平铺服务器和一个小图像,该图像仅覆盖世界的一部分。我已经设法阻止加载 Z,该地图上不存在的某些缩放级别(停止在 OpenLayers 3 tileloadstart 事件中加载图块)。现在我还需要限制 X 和 Y 的加载,因为许多文件夹和图块显然不存在。如何才能做到这一点?我能否管理在服务器端引发的某种错误,使 OpenLayers 明白不再请求这些图块,因为它们不存在?如果是这样,如何做到这一点?

标签: openlayers-3

解决方案


您可以通过指定范围来进一步限制切片格网。ol.tilegrid.TileGrid尽管您可以获得要使用的默认来源和分辨率,但您将需要使用ol.tilegrid.createXYZ

  var defaultTileGrid = ol.tilegrid.createXYZ({
    minZoom: 2,
    maxZoom: 8
  });

  var restrictedTileGrid = new ol.tilegrid.TileGrid({
    extent: restrictedExtent,
    minZoom: defaultTileGrid.getMinZoom(),
    origin: defaultTileGrid.getOrigin(0),
    resolutions: defaultTileGrid.getResolutions(),
  });

您还可以在图层上指定范围(但必须在视图投影中,这可能与 tilegrid 投影不同)。

如果您知道最大 Z 值处的最小和最大 X 和 Y 值,则可以将限制范围计算为

var restrictedExtent = ol.extent.extend(
  defaultTileGrid.getTileCoordExtent([maxZ, minX, minY]),
  defaultTileGrid.getTileCoordExtent([maxZ, maxX, maxY])
);

在 OpenLayers 6

或者

var restrictedExtent = ol.extent.extend(
  defaultTileGrid.getTileCoordExtent([maxZ, minX, -minY - 1]),
  defaultTileGrid.getTileCoordExtent([maxZ, maxX, -maxY - 1])
);

在早期版本中


推荐阅读