From 214a384adf02a60524bdccab9fe7182a655513a1 Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Sat, 28 May 2022 11:36:35 +0100 Subject: [PATCH] Fix tile pyramid getData() --- src/ol/renderer/webgl/TileLayer.js | 33 ++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/src/ol/renderer/webgl/TileLayer.js b/src/ol/renderer/webgl/TileLayer.js index 58de80bad0..93b3f77e5b 100644 --- a/src/ol/renderer/webgl/TileLayer.js +++ b/src/ol/renderer/webgl/TileLayer.js @@ -18,7 +18,12 @@ import { scale as scaleTransform, translate as translateTransform, } from '../../transform.js'; -import {containsCoordinate, getIntersection, isEmpty} from '../../extent.js'; +import { + boundingExtent, + containsCoordinate, + getIntersection, + isEmpty, +} from '../../extent.js'; import { create as createMat4, fromTransform as mat4FromTransform, @@ -713,16 +718,28 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer { } } - const source = layer.getRenderSource(); - const tileGrid = source.getTileGridForProjection(viewState.projection); - if (!source.getWrapX()) { - const gridExtent = tileGrid.getExtent(); - if (gridExtent) { - if (!containsCoordinate(gridExtent, coordinate)) { - return null; + // determine last source suitable for rendering at coordinate + const sources = layer.getSources( + boundingExtent([coordinate]), + viewState.resolution + ); + let i, source, tileGrid; + for (i = sources.length - 1; i >= 0; --i) { + source = sources[i]; + if (source.getState() === State.READY) { + tileGrid = source.getTileGridForProjection(viewState.projection); + if (source.getWrapX()) { + break; + } + const gridExtent = tileGrid.getExtent(); + if (!gridExtent || containsCoordinate(gridExtent, coordinate)) { + break; } } } + if (i < 0) { + return null; + } const tileTextureCache = this.tileTextureCache_; for (