Merge pull request #9357 from ahocevar/vectortile-view-resolution-2

Render vector tiles at the view resolution
This commit is contained in:
Andreas Hocevar
2019-03-25 17:44:31 +01:00
committed by GitHub
6 changed files with 67 additions and 23 deletions

View File

@@ -4,7 +4,7 @@
import {getUid} from '../../util.js';
import TileRange from '../../TileRange.js';
import TileState from '../../TileState.js';
import {createEmpty, getIntersection, getTopLeft} from '../../extent.js';
import {createEmpty, equals, getIntersection, getTopLeft} from '../../extent.js';
import CanvasLayerRenderer from './Layer.js';
import {apply as applyTransform, compose as composeTransform, makeInverse, toString as transformToString} from '../../transform.js';
@@ -21,6 +21,12 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
constructor(tileLayer) {
super(tileLayer);
/**
* Rendered extent has changed since the previous `renderFrame()` call
* @type {boolean}
*/
this.extentChanged = true;
/**
* @private
* @type {import("../../extent.js").Extent}
@@ -82,11 +88,12 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
* @param {number} z Tile coordinate z.
* @param {number} x Tile coordinate x.
* @param {number} y Tile coordinate y.
* @param {number} pixelRatio Pixel ratio.
* @param {import("../../proj/Projection.js").default} projection Projection.
* @param {import("../../PluggableMap.js").FrameState} frameState Frame state.
* @return {!import("../../Tile.js").default} Tile.
*/
getTile(z, x, y, pixelRatio, projection) {
getTile(z, x, y, frameState) {
const pixelRatio = frameState.pixelRatio;
const projection = frameState.viewState.projection;
const tileLayer = /** @type {import("../../layer/Tile.js").default} */ (this.getLayer());
const tileSource = tileLayer.getSource();
let tile = tileSource.getTile(z, x, y, pixelRatio, projection);
@@ -187,7 +194,7 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
this.newTiles_ = false;
for (let x = tileRange.minX; x <= tileRange.maxX; ++x) {
for (let y = tileRange.minY; y <= tileRange.maxY; ++y) {
const tile = this.getTile(z, x, y, pixelRatio, projection);
const tile = this.getTile(z, x, y, frameState);
if (this.isDrawableTile(tile)) {
const uid = getUid(this);
if (tile.getState() == TileState.LOADED) {
@@ -301,6 +308,7 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
this.renderedRevision = sourceRevision;
this.renderedResolution = tileResolution;
this.extentChanged = !this.renderedExtent_ || !equals(this.renderedExtent_, canvasExtent);
this.renderedExtent_ = canvasExtent;
this.manageTilePyramid(frameState, tileSource, tileGrid, pixelRatio,