Merge pull request #12466 from MoonE/get-vector-context-tile-layer

Fix getVectorContext on TileLayer with pixelRatio != 1
This commit is contained in:
MoonE
2021-07-04 23:30:34 +02:00
committed by GitHub
3 changed files with 49 additions and 2 deletions

View File

@@ -88,6 +88,8 @@ export function toContext(context, opt_options) {
* @api
*/
export function getVectorContext(event) {
// canvas may be at a different pixel ratio than frameState.pixelRatio
const canvasPixelRatio = event.inversePixelTransform[0];
const frameState = event.frameState;
const transform = multiplyTransform(
event.inversePixelTransform.slice(),
@@ -95,7 +97,7 @@ export function getVectorContext(event) {
);
const squaredTolerance = getSquaredTolerance(
frameState.viewState.resolution,
frameState.pixelRatio
canvasPixelRatio
);
let userTransform;
const userProjection = getUserProjection();
@@ -107,7 +109,7 @@ export function getVectorContext(event) {
}
return new CanvasImmediateRenderer(
event.context,
frameState.pixelRatio,
canvasPixelRatio,
frameState.extent,
transform,
frameState.viewState.rotation,

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

View File

@@ -0,0 +1,45 @@
import {Circle, Stroke, Style} from '../../../../src/ol/style.js';
import {Map, View} from '../../../../src/ol/index.js';
import {Point} from '../../../../src/ol/geom.js';
import {Tile as TileLayer} from '../../../../src/ol/layer.js';
import {XYZ} from '../../../../src/ol/source.js';
import {getVectorContext} from '../../../../src/ol/render.js';
import {useGeographic} from '../../../../src/ol/proj.js';
useGeographic();
const center = [8.6, 50.1];
const point = new Point(center);
const style = new Style({
image: new Circle({
radius: 40,
stroke: new Stroke({
width: 5,
color: 'red',
}),
}),
});
const tileLayer = new TileLayer({
source: new XYZ({
url: '/data/tiles/satellite/{z}/{x}/{y}.jpg',
transition: 0,
}),
});
new Map({
layers: [tileLayer],
target: 'map',
view: new View({
center: center,
zoom: 3,
}),
pixelRatio: 2,
});
tileLayer.on('postrender', function (evt) {
const vectorContext = getVectorContext(evt);
vectorContext.setStyle(style);
vectorContext.drawGeometry(point);
});
render();