首页 > 解决方案 > 为什么 Openlayers 6 会导致错误的比例?

问题描述

我们编写了一个基于 openlayers 的地理门户,并发现我们的比例设置存在问题。

我们地理门户中显示的比例似乎是错误的。当我们在地理门户中连接一个最大比例为 1:5000 的 wms 时,我们可以将这个 wms 显示到 1:6500。

在 QGIS 中,WMS 会正确显示直到 1:5000,然后消失。

我们已经检查了用于计算显示比例的 QGIS 源代码,并在我们的地理门户中进行了调整。

我们使用带有 utm32-projection 的 Openlayers 6.1.1。

有人有类似的问题或对此有任何建议吗?

[编辑]

对于地图,我们使用基于人类可读比例的自定义分辨率,通过以下函数转换:

scaleToResolution = function( 
    scale,
    map_units,
    dpi
) {

    scale = scale || 0;
    map_units = map_units || 1;
    dpi = dpi || 1;

    var inch_per_meter = 1/0.0254;

    return scale / map_units / inch_per_meter / dpi;

};

dpi 取决于设备。

[编辑 2]

问题在于默认TileGridResolutions和-Source。(见Mike 的回答OriginTileWms

在我们的地理门户中,我们为具有预定义比例的比例(例如 1:5000、1:10000 ...)提供了可编辑的选择。此外,用户可以为地图的自定义视图输入自己的比例。(例如 1:5321)。这适用于 Openlayers ImageWms、XYZ 和 WMTS。

对于 TileWms Openlayers,在输入自定义比例时选择最接近(预定义)的 TileWms 分辨率。(这是合乎逻辑的)

例如

predefined scale    custom scale

...
1:20000

1:10000

                    1:8345  -->  1:10000 (openlayers choice)
                    1:5321  -->  1:5000 (openlayers choice)

1:5000

1:2500
...

当我从 TileWMS 切换到 ImageWMs (Single Tile) 时,Openlayers 请求自定义比例。我希望 OpenLayers 请求 TileWms 的自定义比例(就像 QGIS 一样)。

那可能吗?(例如,每次用户输入或选择比例时设置 TileGrid 的分辨率?)

标签: openlayersscale

解决方案


使用默认平铺网格,您将具有最初基于投影范围和缩放因子 2 的任意分辨率的缩放级别。显示的图块将来自最接近视图分辨率的缩放级别,因此根据服务器比例limit相对于图块分辨率的位置,可见数据的实际显示截断可能出现在limit*sqrt2和之间的任何位置limit/sqrt2在此处输入图像描述

使用与服务器限制相关的已知分辨率定义显式切片网格,与 OpenLayersmaxResolutionminResolution图层选项结合使用,可以更精确地控制截止点。


推荐阅读