为什么 Openlayers 6 会导致比例错误?
Why does Openlayers 6 cause wrong scales?
我们编写了一个基于 openlayers 的地理门户,并发现我们的比例设置存在问题。
我们的地理门户中显示的比例尺似乎有误。当我们在我们的地理门户中连接一个 wms 时,最大比例分度为 1:5000,我们可以显示此 wms 直到 1:6500。
在 QGIS 中,WMS 会正确显示,直到 1:5000 然后消失。
我们已经检查了用于计算显示比例的 QGIS 源代码,并在我们的地理门户中对其进行了调整。
我们使用带有 utm32 投影的 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]
问题是 TileGrid
与 TileWms
-Source 的默认 Resolutions
和 Origin
。 (参见 )
在我们的地理门户中,我们有一个可编辑的 select 用于具有预定义比例的比例(例如 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 的分辨率?)
使用默认的图块网格,您的缩放级别将具有某种程度的任意分辨率,最初基于投影范围和缩放比例
2 的因数。显示的图块将来自最接近视图分辨率的缩放级别,因此根据服务器比例 limit
相对于图块分辨率的位置,可见数据的实际显示截止可能发生在 [=11] 之间的任何位置=] 和 limit/sqrt2
。
定义一个具有与服务器限制相关的已知分辨率的显式图块网格,与图层的 OpenLayers maxResolution
或 minResolution
选项结合使用,可以更精确地控制切割 -离题了。
我们编写了一个基于 openlayers 的地理门户,并发现我们的比例设置存在问题。
我们的地理门户中显示的比例尺似乎有误。当我们在我们的地理门户中连接一个 wms 时,最大比例分度为 1:5000,我们可以显示此 wms 直到 1:6500。
在 QGIS 中,WMS 会正确显示,直到 1:5000 然后消失。
我们已经检查了用于计算显示比例的 QGIS 源代码,并在我们的地理门户中对其进行了调整。
我们使用带有 utm32 投影的 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]
问题是 TileGrid
与 TileWms
-Source 的默认 Resolutions
和 Origin
。 (参见
在我们的地理门户中,我们有一个可编辑的 select 用于具有预定义比例的比例(例如 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 的分辨率?)
使用默认的图块网格,您的缩放级别将具有某种程度的任意分辨率,最初基于投影范围和缩放比例
2 的因数。显示的图块将来自最接近视图分辨率的缩放级别,因此根据服务器比例 limit
相对于图块分辨率的位置,可见数据的实际显示截止可能发生在 [=11] 之间的任何位置=] 和 limit/sqrt2
。
定义一个具有与服务器限制相关的已知分辨率的显式图块网格,与图层的 OpenLayers maxResolution
或 minResolution
选项结合使用,可以更精确地控制切割 -离题了。