Merge pull request #12466 from MoonE/get-vector-context-tile-layer
Fix getVectorContext on TileLayer with pixelRatio != 1
This commit is contained in:
@@ -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,
|
||||
|
||||
BIN
test/rendering/cases/postrender-immediate/expected.png
Normal file
BIN
test/rendering/cases/postrender-immediate/expected.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 119 KiB |
45
test/rendering/cases/postrender-immediate/main.js
Normal file
45
test/rendering/cases/postrender-immediate/main.js
Normal 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();
|
||||
Reference in New Issue
Block a user