OpenLayers 6.5 — изменение pixelRatio во время выполнения

в OpenLayers 5.3 мы использовали это, чтобы изменить pixelRatio всех слоев на карте:

this.map.pixelRatio_ = newRatio;
this.map.updateSize();

Однако в OpenLayers 6.5 это влияет только на векторные слои, а не, например, на слои листов с источником XYZ.

Есть ли новый способ достичь этого?

Спасибо за любой совет, Войтех


person Gal    schedule 11.02.2021    source источник


Ответы (1)


В итоге нам удалось решить проблему таким образом:

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_ источников слоев, отличных от вектора
  • обновить все затронутые слои
person Gal    schedule 23.02.2021