From cb7c15c7673011b5407eb688bce6ef5c1da94725 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Sat, 27 Aug 2016 19:58:38 +0200 Subject: [PATCH] Fix vector tile rotation on HiDPI devices --- src/ol/renderer/canvas/vectortilelayer.js | 9 +++--- src/ol/source/tile.js | 8 +++-- src/ol/source/tilearcgisrest.js | 2 +- src/ol/source/tilewms.js | 3 +- src/ol/source/vectortile.js | 12 +++++++- .../expected/vectortile-canvas-hidpi.png | Bin 0 -> 11415 bytes .../vectortile-canvas-rotated-hidpi.png | Bin 0 -> 19703 bytes .../expected/vectortile-canvas-rotated.png | Bin 0 -> 7477 bytes .../spec/ol/layer/vectortile.test.js | 29 +++++++++++++++++- 9 files changed, 52 insertions(+), 11 deletions(-) create mode 100644 test_rendering/spec/ol/layer/expected/vectortile-canvas-hidpi.png create mode 100644 test_rendering/spec/ol/layer/expected/vectortile-canvas-rotated-hidpi.png create mode 100644 test_rendering/spec/ol/layer/expected/vectortile-canvas-rotated.png diff --git a/src/ol/renderer/canvas/vectortilelayer.js b/src/ol/renderer/canvas/vectortilelayer.js index ce25d4eff3..780a0603b0 100644 --- a/src/ol/renderer/canvas/vectortilelayer.js +++ b/src/ol/renderer/canvas/vectortilelayer.js @@ -117,7 +117,7 @@ ol.renderer.canvas.VectorTileLayer.prototype.renderTileReplays_ = function( var size = frameState.size; var pixelScale = pixelRatio / resolution; var source = /** @type {ol.source.VectorTile} */ (layer.getSource()); - var tilePixelRatio = source.getTilePixelRatio(pixelRatio); + var tilePixelRatio = source.getTilePixelRatio(); var transform = this.getTransform(frameState, 0); @@ -207,7 +207,7 @@ ol.renderer.canvas.VectorTileLayer.prototype.createReplayGroup = function(tile, var resolution = tileGrid.getResolution(tileCoord[0]); var extent, reproject, tileResolution; if (pixelSpace) { - var tilePixelRatio = tileResolution = source.getTilePixelRatio(pixelRatio); + var tilePixelRatio = tileResolution = source.getTilePixelRatio(); var tileSize = ol.size.toSize(tileGrid.getTileSize(tileCoord[0])); extent = [0, 0, tileSize[0] * tilePixelRatio, tileSize[1] * tilePixelRatio]; } else { @@ -276,7 +276,6 @@ ol.renderer.canvas.VectorTileLayer.prototype.createReplayGroup = function(tile, * @inheritDoc */ ol.renderer.canvas.VectorTileLayer.prototype.forEachFeatureAtCoordinate = function(coordinate, frameState, callback, thisArg) { - var pixelRatio = frameState.pixelRatio; var resolution = frameState.viewState.resolution; var rotation = frameState.viewState.rotation; var layer = this.getLayer(); @@ -299,7 +298,7 @@ ol.renderer.canvas.VectorTileLayer.prototype.forEachFeatureAtCoordinate = functi } if (tile.getProjection().getUnits() === ol.proj.Units.TILE_PIXELS) { origin = ol.extent.getTopLeft(tileExtent); - tilePixelRatio = source.getTilePixelRatio(pixelRatio); + tilePixelRatio = source.getTilePixelRatio(); tileResolution = tileGrid.getResolution(tileCoord[0]) / tilePixelRatio; tileSpaceCoordinate = [ (coordinate[0] - origin[0]) / tileResolution, @@ -421,7 +420,7 @@ ol.renderer.canvas.VectorTileLayer.prototype.renderTileImage_ = function( tileContext.translate(width / 2, height / 2); var pixelSpace = tile.getProjection().getUnits() == ol.proj.Units.TILE_PIXELS; var pixelScale = pixelRatio / resolution; - var tilePixelRatio = source.getTilePixelRatio(pixelRatio); + var tilePixelRatio = source.getTilePixelRatio(); var tilePixelResolution = tileResolution / tilePixelRatio; var tileExtent = tileGrid.getTileCoordExtent( tile.getTileCoord(), this.tmpExtent); diff --git a/src/ol/source/tile.js b/src/ol/source/tile.js index 85c01333e8..1772e3a6c5 100644 --- a/src/ol/source/tile.js +++ b/src/ol/source/tile.js @@ -242,10 +242,14 @@ ol.source.Tile.prototype.getTileCacheForProjection = function(projection) { /** - * @param {number} pixelRatio Pixel ratio. + * Get the tile pixel ratio for this source. Subclasses may override this + * method, which is meant to return a supported pixel ratio that matches the + * provided `opt_pixelRatio` as close as possible. When no `opt_pixelRatio` is + * provided, it is meant to return `this.tilePixelRatio_`. + * @param {number=} opt_pixelRatio Pixel ratio. * @return {number} Tile pixel ratio. */ -ol.source.Tile.prototype.getTilePixelRatio = function(pixelRatio) { +ol.source.Tile.prototype.getTilePixelRatio = function(opt_pixelRatio) { return this.tilePixelRatio_; }; diff --git a/src/ol/source/tilearcgisrest.js b/src/ol/source/tilearcgisrest.js index 4e9e75f365..06ad9da371 100644 --- a/src/ol/source/tilearcgisrest.js +++ b/src/ol/source/tilearcgisrest.js @@ -121,7 +121,7 @@ ol.source.TileArcGISRest.prototype.getRequestUrl_ = function(tileCoord, tileSize * @inheritDoc */ ol.source.TileArcGISRest.prototype.getTilePixelRatio = function(pixelRatio) { - return pixelRatio; + return /** @type {number} */ (pixelRatio); }; diff --git a/src/ol/source/tilewms.js b/src/ol/source/tilewms.js index f3f143f8e5..ad19297155 100644 --- a/src/ol/source/tilewms.js +++ b/src/ol/source/tilewms.js @@ -271,7 +271,8 @@ ol.source.TileWMS.prototype.getRequestUrl_ = function(tileCoord, tileSize, tileE * @inheritDoc */ ol.source.TileWMS.prototype.getTilePixelRatio = function(pixelRatio) { - return (!this.hidpi_ || this.serverType_ === undefined) ? 1 : pixelRatio; + return (!this.hidpi_ || this.serverType_ === undefined) ? 1 : + /** @type {number} */ (pixelRatio); }; diff --git a/src/ol/source/vectortile.js b/src/ol/source/vectortile.js index a8f0b42590..cf972b0c39 100644 --- a/src/ol/source/vectortile.js +++ b/src/ol/source/vectortile.js @@ -104,12 +104,22 @@ ol.source.VectorTile.prototype.getTile = function(z, x, y, pixelRatio, projectio }; +/** + * @inheritDoc + */ +ol.source.VectorTile.prototype.getTilePixelRatio = function(opt_pixelRatio) { + return opt_pixelRatio == undefined ? + ol.source.UrlTile.prototype.getTilePixelRatio.call(this, opt_pixelRatio) : + opt_pixelRatio; +}; + + /** * @inheritDoc */ ol.source.VectorTile.prototype.getTilePixelSize = function(z, pixelRatio, projection) { var tileSize = ol.size.toSize(this.tileGrid.getTileSize(z)); - return [tileSize[0] * pixelRatio, tileSize[1] * pixelRatio]; + return [Math.round(tileSize[0] * pixelRatio), Math.round(tileSize[1] * pixelRatio)]; }; diff --git a/test_rendering/spec/ol/layer/expected/vectortile-canvas-hidpi.png b/test_rendering/spec/ol/layer/expected/vectortile-canvas-hidpi.png new file mode 100644 index 0000000000000000000000000000000000000000..0b864fea6239c673df7bda37de4ea9d3e086125f GIT binary patch literal 11415 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 LNkvXXu0mjfzTkSE literal 0 HcmV?d00001 diff --git a/test_rendering/spec/ol/layer/expected/vectortile-canvas-rotated.png b/test_rendering/spec/ol/layer/expected/vectortile-canvas-rotated.png new file mode 100644 index 0000000000000000000000000000000000000000..1323da23994e4c5b20e2c1ddada77d56d3848cd0 GIT binary patch literal 7477 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