OpenLayers 6.5 - 在运行时更改 pixelRatio
OpenLayers 6.5 - Change pixelRatio during runtime
在 OpenLayers 5.3 中,我们曾经这样做来更改地图中所有图层的像素比率:
this.map.pixelRatio_ = newRatio;
this.map.updateSize();
但是,在 OpenLayers 6.5 中,这仅影响矢量图层,而不影响例如具有 XYZ 源的图块层。
有没有新的方法来实现这个?
感谢 Vojtech 的任何建议
最后我们是这样解决问题的:
this.map.pixelRatio_ = pixelRatio;
this.map.getLayers().forEach((layer) => {
if(layer.getVisible()) {
if (layer.getSource().tilePixelRatio_ !== undefined) {
layer.getSource().tilePixelRatio_ = pixelRatio;
layer.getSource().refresh();
}
else {
if (layer instanceof layerVector) {
let source = layer.getSource();
if (source instanceof Cluster) {
source.getSource().changed();
}
else {
source.changed();
}
}
else {
let source = layer.getSource();
if(source instanceof ImageWMS || source instanceof TileWMS) {
let params = source.getParams();
params["XX"] = getNextRefreshCounter(); // this method generates unique number each time it is called
source.updateParams(params);
}
}
}
});
this.map.refs.layer.map.updateSize();
基本上有必要:
- 更新 属性 pixelRatio_ 地图(对于矢量图层)
- 还更新 属性 tilePixelRatio_ 图层源而非矢量
- 刷新所有受影响的图层
在 OpenLayers 5.3 中,我们曾经这样做来更改地图中所有图层的像素比率:
this.map.pixelRatio_ = newRatio;
this.map.updateSize();
但是,在 OpenLayers 6.5 中,这仅影响矢量图层,而不影响例如具有 XYZ 源的图块层。
有没有新的方法来实现这个?
感谢 Vojtech 的任何建议
最后我们是这样解决问题的:
this.map.pixelRatio_ = pixelRatio;
this.map.getLayers().forEach((layer) => {
if(layer.getVisible()) {
if (layer.getSource().tilePixelRatio_ !== undefined) {
layer.getSource().tilePixelRatio_ = pixelRatio;
layer.getSource().refresh();
}
else {
if (layer instanceof layerVector) {
let source = layer.getSource();
if (source instanceof Cluster) {
source.getSource().changed();
}
else {
source.changed();
}
}
else {
let source = layer.getSource();
if(source instanceof ImageWMS || source instanceof TileWMS) {
let params = source.getParams();
params["XX"] = getNextRefreshCounter(); // this method generates unique number each time it is called
source.updateParams(params);
}
}
}
});
this.map.refs.layer.map.updateSize();
基本上有必要:
- 更新 属性 pixelRatio_ 地图(对于矢量图层)
- 还更新 属性 tilePixelRatio_ 图层源而非矢量
- 刷新所有受影响的图层