1

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

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

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

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

这一切都按预期工作。

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

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

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

  2. 使用显示器的屏幕像素大小来锻炼每米像素?我是否朝着正确的方向前进?

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

4

1 回答 1

0

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

我会在这里注明,以防其他人需要解决这个问题,他们不想浪费他们生命中的几天和他们的雇主的钱来试图解决这个问题。

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

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

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

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

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

以下是 TileSpan 的 Tile Matrix 计算以澄清:

见第 22 页: https ://portal.ogc.org/files/?artifact_id=35326[OpenGIS Web Map Tile Service Implementation Standard][1]

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

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

于 2021-07-08T03:38:05.363 回答