openlayers - 为什么 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]
问题在于默认TileGrid
值Resolutions
和-Source。(见Mike 的回答)Origin
TileWms
在我们的地理门户中,我们为具有预定义比例的比例(例如 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 的分辨率?)
解决方案
推荐阅读
- spring - 配置问题:找不到 XML 模式命名空间的 Spring NamespaceHandler [http://www.springframework.org/schema/p]
- android - Unity 中的 Google 登录问题
- swift - SwiftUI:NavigationBarItem 前导不显示
- angular - 解决promise后如何加载html页面?
- java - java中的句子/字符串到二维数组
- php - 此路由不支持 GET 方法。支持的方法:PATCH
- c++ - 将 MT4/MT5 自定义指标插入交易视图?
- javascript - 从 Swift 调用 Javascript 函数返回未定义
- groovy - 闭包属性后执行
- java - 我有一个包含字符串的列表。如何在每一个上使用 .split()(使用 forEach)?