diff --git a/modules/geo-layers/src/mvt-layer/mvt-layer.js b/modules/geo-layers/src/mvt-layer/mvt-layer.js index b1e7ebb7e0a..0fb6dede904 100644 --- a/modules/geo-layers/src/mvt-layer/mvt-layer.js +++ b/modules/geo-layers/src/mvt-layer/mvt-layer.js @@ -97,20 +97,23 @@ export default class MVTLayer extends TileLayer { return Promise.reject('Invalid URL'); } let options = this.getLoadOptions(); + const {binary, fetch} = this.props; + const {signal, x, y, z} = tile; + const loaders = this.props.loaders[0]; options = { ...options, mvt: { ...(options && options.mvt), coordinates: this.context.viewport.resolution ? 'wgs84' : 'local', - tileIndex: {x: tile.x, y: tile.y, z: tile.z} + tileIndex: {x, y, z} // Local worker debug // workerUrl: `modules/mvt/dist/mvt-loader.worker.js` // Set worker to null to skip web workers // workerUrl: null }, - gis: this.props.binary ? {format: 'binary'} : {} + gis: binary ? {format: 'binary'} : {} }; - return load(url, this.props.loaders[0], options); + return fetch(url, {layer: this, loaders, options, signal}); } renderSubLayers(props) { diff --git a/modules/geo-layers/src/terrain-layer/terrain-layer.js b/modules/geo-layers/src/terrain-layer/terrain-layer.js index 12a8dc7ed99..2470dc7bfea 100644 --- a/modules/geo-layers/src/terrain-layer/terrain-layer.js +++ b/modules/geo-layers/src/terrain-layer/terrain-layer.js @@ -98,11 +98,17 @@ export default class TerrainLayer extends CompositeLayer { } } - loadTerrain({elevationData, bounds, elevationDecoder, meshMaxError, workerUrl}) { + loadTerrain({elevationData, bounds, elevationDecoder, meshMaxError, signal, workerUrl}) { + const loadOptions = this.getLoadOptions(); if (!elevationData) { return null; } const options = { + ...loadOptions, + fetch: { + ...(loadOptions && loadOptions.fetch), + signal + }, terrain: { bounds, meshMaxError, @@ -116,11 +122,11 @@ export default class TerrainLayer extends CompositeLayer { } getTiledTerrainData(tile) { - const {elevationData, texture, elevationDecoder, meshMaxError, workerUrl} = this.props; + const {elevationData, fetch, texture, elevationDecoder, meshMaxError, workerUrl} = this.props; const dataUrl = getURLFromTemplate(elevationData, tile); const textureUrl = getURLFromTemplate(texture, tile); - const {bbox, z} = tile; + const {bbox, signal, z} = tile; const viewport = new WebMercatorViewport({ longitude: (bbox.west + bbox.east) / 2, latitude: (bbox.north + bbox.south) / 2, @@ -135,11 +141,12 @@ export default class TerrainLayer extends CompositeLayer { bounds, elevationDecoder, meshMaxError, + signal, workerUrl }); const surface = textureUrl ? // If surface image fails to load, the tile should still be displayed - load(textureUrl).catch(_ => null) + fetch(textureUrl, {layer: this, signal}).catch(_ => null) : Promise.resolve(null); return Promise.all([terrain, surface]); diff --git a/modules/geo-layers/src/tile-layer/tile-layer.js b/modules/geo-layers/src/tile-layer/tile-layer.js index d6ceae31b18..a1e8284a36d 100644 --- a/modules/geo-layers/src/tile-layer/tile-layer.js +++ b/modules/geo-layers/src/tile-layer/tile-layer.js @@ -27,14 +27,14 @@ const defaultProps = { // Use load directly so we don't use ResourceManager fetch: { type: 'function', - value: (url, {layer, signal}) => { - const loadOptions = {...layer.getLoadOptions()}; + value: (url, {layer, loaders, options, signal}) => { + const loadOptions = options || layer.getLoadOptions(); loadOptions.fetch = { ...loadOptions.fetch, signal }; - return load(url, loadOptions); + return loaders ? load(url, loaders, loadOptions) : load(url, loadOptions); }, compare: false },