Position tiles by offset instead of extent
This commit is contained in:
@@ -4,7 +4,7 @@
|
|||||||
import {getUid} from '../../util.js';
|
import {getUid} from '../../util.js';
|
||||||
import TileRange from '../../TileRange.js';
|
import TileRange from '../../TileRange.js';
|
||||||
import TileState from '../../TileState.js';
|
import TileState from '../../TileState.js';
|
||||||
import {createEmpty, getIntersection} from '../../extent.js';
|
import {createEmpty, getIntersection, getTopLeft} from '../../extent.js';
|
||||||
import {createCanvasContext2D} from '../../dom.js';
|
import {createCanvasContext2D} from '../../dom.js';
|
||||||
import CanvasLayerRenderer from './Layer.js';
|
import CanvasLayerRenderer from './Layer.js';
|
||||||
import {create as createTransform, compose as composeTransform} from '../../transform.js';
|
import {create as createTransform, compose as composeTransform} from '../../transform.js';
|
||||||
@@ -266,13 +266,17 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|||||||
const currentScale = currentResolution / tileResolution;
|
const currentScale = currentResolution / tileResolution;
|
||||||
const w = currentTilePixelSize[0] * currentScale;
|
const w = currentTilePixelSize[0] * currentScale;
|
||||||
const h = currentTilePixelSize[1] * currentScale;
|
const h = currentTilePixelSize[1] * currentScale;
|
||||||
|
const originTileCoord = tileGrid.getTileCoordForCoordAndZ(getTopLeft(canvasExtent), currentZ);
|
||||||
|
const originTileExtent = tileGrid.getTileCoordExtent(originTileCoord);
|
||||||
|
const originX = Math.round(tilePixelRatio * (originTileExtent[0] - canvasExtent[0]) / tileResolution);
|
||||||
|
const originY = Math.round(tilePixelRatio * (canvasExtent[3] - originTileExtent[3]) / tileResolution);
|
||||||
const tileGutter = tilePixelRatio * tileSource.getGutterForProjection(projection);
|
const tileGutter = tilePixelRatio * tileSource.getGutterForProjection(projection);
|
||||||
const tilesToDraw = tilesToDrawByZ[currentZ];
|
const tilesToDraw = tilesToDrawByZ[currentZ];
|
||||||
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 tileCoord = tile.tileCoord;
|
||||||
const x = Math.round(tilePixelRatio * (tileExtent[0] - canvasExtent[0]) / tileResolution);
|
const x = originX - (originTileCoord[1] - tileCoord[1]) * w;
|
||||||
const y = Math.round(tilePixelRatio * (canvasExtent[3] - tileExtent[3]) / tileResolution);
|
const y = originY + (originTileCoord[2] - tileCoord[2]) * h;
|
||||||
this.drawTileImage(tile, frameState, layerState, x, y, w, h, tileGutter, z === currentZ);
|
this.drawTileImage(tile, frameState, layerState, x, y, w, h, tileGutter, z === currentZ);
|
||||||
this.renderedTiles.push(tile);
|
this.renderedTiles.push(tile);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user