过度缩放 OpenLayers 4 时重新设置样式功能

Restyle feature when overzooming OpenLayers 4

上图中,左边是使用openlayers 4.6.4 对本地mbtiles 数据进行的自建渲染。右边是类似内容的传单。

我 运行 遇到的问题是,我试图让道路的宽度(以橙色显示)保持一致或在过度缩放左侧图像的数据时放大,该图像具有最大图块细节级别为 14。最后,它看起来应该与右侧相似。

在 OpenLayers 的样式中,我目前正在根据缩放对线宽应用以下更改:

var zoomAdjustment = Math.max(0, (map.getView().getZoom() - 13) * 2); width += zoomAdjustment;

这有效,但需要进行调整。然而,问题是在达到 zoomLevel 14 后,要素不会重新加载或重新设置样式,因此无论在 zoomLevel 14 后放大或缩小,它都将保持一致的大小,而不是变大以表示道路本身的大小。

有没有办法 'redraw' 以某种方式放大特征,但保持其位置和几何形状不变?

到目前为止,我已经完成了以下工作: - 研究了样式和特征以及如何可能重绘它们,但是我通过阅读 API 了解如何重绘而变得更聪明 none。 - 尝试缩放宽度,但如上所述,它在找不到更多图块后不会继续缩放(由于数据加载方式的性质,这是合乎逻辑的)

我目前将尝试观察地图,并在更改缩放超过 14 后手动覆盖要素的样式。

其实只要观察地图每次调整缩放时覆盖样式就这么简单:

map.on('change', () => { 
     var zoomAdjustment = Math.max(0, (map.getView().getZoom() - 14) * 2);
     width += zoomAdjustment;
     map.getLayers().forEach((layer) => { 
        layer.setStyle(style);
     });
});