3

We are using openlayers and in version 5.3 we were using this construction:

map.once('postcompose', async(event) => {
  let canvas = event.context.canvas;
  // doing something with canvas
}

But in openLayers 6.0 the argument context is undefined for event (which of course broke our application).

I read here that:

Layers are no longer composed to a single Canvas element. Instead, they are added to the map viewport as individual elements.

So how do I get the canvas of a single layer?

I also read here that:

Canvas context. Not available when the event is dispatched by the map. Only available when a Canvas renderer is used, null otherwise.

Is it somehow possible to set canvas renderer to all the layers so that CanvasRenderingContext2D is not undefined for the 'postcompose' event?

geocodezip
  • 158,664
  • 13
  • 220
  • 245
Gal
  • 182
  • 3
  • 12
  • 1
    each layer has it own canvas, which can be used in `layer.on('postrender', ....);` – Mike Nov 22 '19 at 14:21

1 Answers1

5

With ol6 use postrender event on layers and new getVectorContext function provides access to the immediate vector rendering API.
See https://github.com/openlayers/openlayers/releases/tag/v6.0.0

To get render context on a single layer:

import {getVectorContext} from 'ol/render';

// construct your map and layers as usual

layer.on('postrender', function(event) {
  const vectorContext = getVectorContext(event);
  // use any of the drawing methods on the vector context
});
Viglino Jean-Marc
  • 1,371
  • 8
  • 6