如何确定缩放高度以从 WMTS 服务器请求切片

问题描述

我正在设置一个 WMTS 客户端来使用 tileserver.PHP 中的图块。

要请求图块,我需要将标识符/图层、缩放高度、列和行传递给 WMTS RESTful 服务器,它会返回图块。

例如http://my ip.com/tileserver/tileserver.PHP?/index.json?/identifier/{z}/{x}/{y}.png

在我的测试环境中,我可以手动选择缩放级别,我的测试代码将正确计算 col(x) 和 row(y)。然后我可以使用这些信息来请求图像。

这一切都按预期工作。

但是,现在我需要练习如何以编程方式确定缩放高度(z)。例如。当用户放大或缩小某个区域时,我需要调整适当的缩放级别,进而以接近用户期望的缩放级别从 tile 服务器请求图像。

我假设,要锻炼正确的缩放级别:

  1. 确定用户的当前边界框(这将是 cad 程序中的模型空间)。我将使用边界框来获取它们所在位置的线性宽度/高度(在 CAD 中)。

  2. 使用显示器的屏幕像素大小来计算每米像素?我的方向是否正确?

谁能帮我弄清楚如何做到这一点?

解决方法

好的,终于知道答案是什么了。

我会在这里指出,因为其他人需要解决这个问题,他们不想浪费他们的生命和雇主的钱来解决这个问题。

TileSpan 正是我所追求的。 TileSpan 是从 tileserver 返回的图像(图块)的宽度

我将包括下面的基本计算。

我需要使用缩放级别来生成一个 TileSpan 大于目标区域宽度的图块。

我将迭代平铺矩阵以发现要使用的正确平铺矩阵。

  1. 从 tileserver 获取 Capabilities 文档
  2. 迭代适当的瓦片矩阵集并检查每个子元素(瓦片矩阵)
  3. 计算每个图块矩阵的 TileSpan 以找到包含第一个刚好大于感兴趣区域的 TileSpan 的图块矩阵。
  4. 计算列 (x) 和行 (y) 并使用缩放级别 (z) 或标识符,因为它在功能文档中被调用以请求图像。

以下是用于说明 TileSpan 的 Tile Matrix 计算:

参见第 22 页:https://portal.ogc.org/files/?artifact_id=35326[OpenGIS 网络地图切片服务实施标准][1]

pixelSpan = scaleDenominator × 0.00028  / metersPerUnit(crs);
tileSpanX = tileWidth × pixelSpan; 
tileSpanY = tileHeight × pixelSpan;
tileMatrixMaxX = tileMatrixMinX + tileSpanX × matrixWidth;
tileMatrixMinY = tileMatrixMaxY - tileSpanY × matrixHeight;

随着我的理解提高,我会更新这个答案。