Work with high dpi tiles
This commit is contained in:
@@ -49,6 +49,12 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|||||||
*/
|
*/
|
||||||
this.renderedExtent_ = null;
|
this.renderedExtent_ = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.renderedPixelRatio_ = 1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @protected
|
* @protected
|
||||||
* @type {number}
|
* @type {number}
|
||||||
@@ -179,8 +185,8 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|||||||
width = height = size;
|
width = height = size;
|
||||||
}
|
}
|
||||||
|
|
||||||
const dx = tileResolution * width / 2;
|
const dx = tileResolution * width / 2 / tilePixelRatio;
|
||||||
const dy = tileResolution * height / 2;
|
const dy = tileResolution * height / 2 / tilePixelRatio;
|
||||||
const canvasExtent = [
|
const canvasExtent = [
|
||||||
viewCenter[0] - dx,
|
viewCenter[0] - dx,
|
||||||
viewCenter[1] - dy,
|
viewCenter[1] - dy,
|
||||||
@@ -266,8 +272,8 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|||||||
for (const tileCoordKey in tilesToDraw) {
|
for (const tileCoordKey in tilesToDraw) {
|
||||||
const tile = tilesToDraw[tileCoordKey];
|
const tile = tilesToDraw[tileCoordKey];
|
||||||
const tileExtent = tileGrid.getTileCoordExtent(tile.getTileCoord(), tmpExtent);
|
const tileExtent = tileGrid.getTileCoordExtent(tile.getTileCoord(), tmpExtent);
|
||||||
const x = (tileExtent[0] - canvasExtent[0]) / tileResolution;
|
const x = tilePixelRatio * (tileExtent[0] - canvasExtent[0]) / tileResolution;
|
||||||
const y = (canvasExtent[3] - tileExtent[3]) / tileResolution;
|
const y = tilePixelRatio * (canvasExtent[3] - tileExtent[3]) / tileResolution;
|
||||||
const w = currentTilePixelSize[0] * currentScale;
|
const w = currentTilePixelSize[0] * currentScale;
|
||||||
const h = currentTilePixelSize[1] * currentScale;
|
const h = currentTilePixelSize[1] * currentScale;
|
||||||
this.drawTileImage(tile, frameState, layerState, x, y, w, h, tileGutter, z === currentZ);
|
this.drawTileImage(tile, frameState, layerState, x, y, w, h, tileGutter, z === currentZ);
|
||||||
@@ -277,6 +283,7 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|||||||
|
|
||||||
this.renderedRevision = sourceRevision;
|
this.renderedRevision = sourceRevision;
|
||||||
this.renderedResolution = tileResolution;
|
this.renderedResolution = tileResolution;
|
||||||
|
this.renderedPixelRatio_ = tilePixelRatio;
|
||||||
this.renderedExtent_ = canvasExtent;
|
this.renderedExtent_ = canvasExtent;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -326,7 +333,7 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const rotation = frameState.viewState.rotation;
|
const rotation = frameState.viewState.rotation;
|
||||||
const scale = this.renderedResolution / frameState.viewState.resolution;
|
const scale = this.renderedResolution / frameState.viewState.resolution / this.renderedPixelRatio_;
|
||||||
|
|
||||||
const transform = 'rotate(' + rotation + 'rad) scale(' + scale + ')';
|
const transform = 'rotate(' + rotation + 'rad) scale(' + scale + ')';
|
||||||
if (transform !== canvas.style.transform) {
|
if (transform !== canvas.style.transform) {
|
||||||
|
|||||||
Reference in New Issue
Block a user