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
|
* @api
|
||||||
*/
|
*/
|
||||||
export function getVectorContext(event) {
|
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 frameState = event.frameState;
|
||||||
const transform = multiplyTransform(
|
const transform = multiplyTransform(
|
||||||
event.inversePixelTransform.slice(),
|
event.inversePixelTransform.slice(),
|
||||||
@@ -95,7 +97,7 @@ export function getVectorContext(event) {
|
|||||||
);
|
);
|
||||||
const squaredTolerance = getSquaredTolerance(
|
const squaredTolerance = getSquaredTolerance(
|
||||||
frameState.viewState.resolution,
|
frameState.viewState.resolution,
|
||||||
frameState.pixelRatio
|
canvasPixelRatio
|
||||||
);
|
);
|
||||||
let userTransform;
|
let userTransform;
|
||||||
const userProjection = getUserProjection();
|
const userProjection = getUserProjection();
|
||||||
@@ -107,7 +109,7 @@ export function getVectorContext(event) {
|
|||||||
}
|
}
|
||||||
return new CanvasImmediateRenderer(
|
return new CanvasImmediateRenderer(
|
||||||
event.context,
|
event.context,
|
||||||
frameState.pixelRatio,
|
canvasPixelRatio,
|
||||||
frameState.extent,
|
frameState.extent,
|
||||||
transform,
|
transform,
|
||||||
frameState.viewState.rotation,
|
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