本地层属性,可在渲染过程中禁用临时(模糊)的替代图像
你好。 我正在提交一个功能请求,以允许开发人员在每个图层基础上原生地禁用“临时图块”回退机制(低分辨率图块的模糊拉伸部分)。 问题/用例 我们正在构建一个高度定制的地图应用程序,使用本地异步 IndexedDB 缓存和 PMTiles 来处理向量数据。 我们还大量使用程序化视图动画(例如,在用户搜索期间将地图视图跳转到特定坐标)。 由于我们的数据通过 tileLoadFunction 以异步方式加载,因此在图块解析期间通常会出现 30-50 毫秒的延迟。 在快速程序化视图更改期间,OpenLayers 会积极地搜索图块网格(findAltTiles_)并在等待期间将低分辨率父图块拉伸到画布上。 由于我们管理自己的背景样式和过渡,这种强制模糊拉伸会产生一种粗糙、干扰性的视觉效果。 我们宁愿在 50 毫秒内不绘制任何内容(留下裸露的地图背景),以便允许我们清晰的向量图块在缓存解析完成后“捕捉”到。 当前限制 目前,VectorTileLayer(或任何 TileLayer)中没有配置选项来指示“等待目标图块,或不进行渲染”。 引擎严格规定了临时图块回退。 建议的解决方案 为 Layer 配置属性引入一个简单的布尔标志,例如 disableInterimTiles(或 useInterimTiles: false)。 我们目前已对我们的编译后的 ol.js 文件进行了修补,以测试此特定行为,结果非常清晰,且对性能没有影响。 在 Canvas Tile Renderer 的 renderFrame 方法中,我们将父图块搜索循环包装在对层属性的检查中: // 在 renderFrame 中,当它搜索替代图块时: if (this.findAltTiles_(c, n, u + 1, S)) { continue; } const r = c.getMinZoom(); // 建议的检查: if (!l.get('disableInterimTiles')) { for (let t = u - 1; t >= r; --t) { if (this.findAltTiles_(c, n, t, S)) { break; } } } 结论 团队是否愿意添加一个原生标志来支持此功能? 我们知道渲染循环经过高度优化,属于受保护的领域。 如果您同意此概念是有效的,但更喜欢通过特定的 renderMode 或替代架构来实现,我们完全愿意接受反馈,并很乐意根据您的架构指导提交一个正式的 Pull Request。 谢谢您的时间! Paweł
内容来源: openlayers/openlayers