在 Openlayers 中从同一源在 WMS 和 WMTS 图层之间切换时可见的 1 像素偏移



我们有一个自定义的类似OSM的瓦片源,我们使用Mapproxy作为WMTS和WMS服务,并在Openlayers查看器中展示。

我们添加了一个图层切换器控件以在 2 层之间轻拂,除了一个小的 1 像素偏移外,它们显示良好。在尝试使用"precompose"事件并设置 WMS 图层的"event.frameState.pixelRatio"来弥补偏移量后,我发现偏移量在某些缩放级别上是不同的。

例如,在缩放 3 和 6 时,我们必须应用 (0,-1( 偏移,对于缩放 7、10、11 等,我们必须对 WMS 图层应用 (0,1( 偏移以匹配 WMTS 图层。

我猜涉及一些舍入错误,这是 WMS 调用不可避免的?或者这个 1 像素偏移问题可以解决吗?

在QGIS中,当我引入两层时,它们看起来完美对齐。

作为实验,您可能希望了解从具有自定义切片 URL 的基本 XYZ 源构建的图层在每个源中的行为。 我没有您的图层的详细信息,但对于 WMTS,您将使用 tileUrlFunction 坐标 [0] 来索引矩阵 id,其中 [1] 和 [2] 提供列和行。 对于 WMS,除了 BBOX(可以从 tileUrlFunction 坐标计算(之外,url 中的参数可能会被固定下来。 以下是以这种方式实现的 WMTS 和 WMS 源的示例:

source1: new ol.source.XYZ({
attributions: [attribIGN],
tileGrid: new ol.tilegrid.TileGrid({ resolutions: resolutions,
origin: origin, tileSize: tileSize }),
tileUrlFunction: function(coordinate) {
return "https://wxs.ign.fr/" + keyIGN +
"/geoportail/wmts?layer=GEOGRAPHICALGRIDSYSTEMS.MAPS" +
"&style=normal&tilematrixset=PM&Service=WMTS&Request=GetTile&Version=1.0.0" +
"&Format=image%2Fjpeg&TileMatrix=" + ignMatrixIds[coordinate[0]] +
"&TileCol=" + coordinate[1] + "&TileRow=" + (-(coordinate[2]+1));
},
}),
source2: new ol.source.XYZ({
attributions: [attribOSM],
tileGrid: new ol.tilegrid.TileGrid({ resolutions: resolutions,
origin: origin, tileSize: tileSize }),
tileUrlFunction: function(coordinate) {
return "http://129.206.228.72/cached/osm?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&FORMAT=image%2Fpng" +
"&TRANSPARENT=true&LAYERS=osm_auto%3Aall&WIDTH=256&HEIGHT=256&SRS=EPSG%3A900913&STYLES=&BBOX=" +
this.getTileGrid().getTileCoordExtent(coordinate).toString();
},
}),

相关内容

  • 没有找到相关文章

最新更新