diff --git a/src/controls/print/print-resize.js b/src/controls/print/print-resize.js index 8e1e10fb7..64846568c 100644 --- a/src/controls/print/print-resize.js +++ b/src/controls/print/print-resize.js @@ -558,7 +558,9 @@ export default function PrintResize(options = {}) { const newSource = new ImageWMS(({ url: `${source.getUrl()}/export?`, - crossOrigin: 'anonymous', + // No other way to access source/layer crossOrigin parameter + // eslint-disable-next-line no-underscore-dangle + crossOrigin: source.crossOrigin_ || 'anonymous', projection, ratio: 1, params: { diff --git a/src/layer/agsmap.js b/src/layer/agsmap.js index 2d820272a..4db858a6f 100644 --- a/src/layer/agsmap.js +++ b/src/layer/agsmap.js @@ -19,6 +19,7 @@ const agsMap = function agsMap(layerOptions, viewer) { }; const layerSettings = { ...layerDefault, ...layerOptions }; const sourceSettings = { ...sourceDefault, ...viewer.getSource(layerOptions.source) }; + sourceSettings.crossOrigin = layerSettings.crossOrigin ? layerSettings.crossOrigin : sourceSettings.crossOrigin; sourceSettings.params = layerSettings.params || {}; sourceSettings.params.layers = `show:${layerSettings.id}`; diff --git a/src/layer/agstile.js b/src/layer/agstile.js index 14c619732..606df2408 100644 --- a/src/layer/agstile.js +++ b/src/layer/agstile.js @@ -6,7 +6,7 @@ function createSource(options) { return new TileArcGISRest({ attributions: options.attribution, projection: options.projection, - crossOrigin: 'anonymous', + crossOrigin: options.crossOrigin, params: options.params, url: options.url, tileGrid: options.tileGrid @@ -18,10 +18,13 @@ const agsTile = function agsTile(layerOptions, viewer) { layerType: 'tile', featureinfoLayer: undefined }; - const sourceDefault = {}; + const sourceDefault = { + crossOrigin: 'anonymous' + }; const agsOptions = Object.assign(agsDefault, layerOptions); const sourceOptions = Object.assign(sourceDefault, viewer.getMapSource()[layerOptions.source]); sourceOptions.attribution = agsOptions.attribution; + sourceOptions.crossOrigin = agsOptions.crossOrigin ? agsOptions.crossOrigin : sourceOptions.crossOrigin; sourceOptions.projection = viewer.getProjection(); sourceOptions.params = agsOptions.params || {}; sourceOptions.params.layers = `show:${agsOptions.id}`; diff --git a/src/layer/wms.js b/src/layer/wms.js index 94e7daf4d..d5f2e1d9f 100644 --- a/src/layer/wms.js +++ b/src/layer/wms.js @@ -9,7 +9,7 @@ function createTileSource(options) { attributions: options.attribution, url: options.url, gutter: options.gutter, - crossOrigin: 'anonymous', + crossOrigin: options.crossOrigin, projection: options.projection, tileGrid: options.tileGrid, params: { @@ -90,6 +90,7 @@ const wms = function wms(layerOptions, viewer) { featureinfoLayer: null }; const sourceDefault = { + crossOrigin: 'anonymous', version: '1.1.1', gutter: 0, format: 'image/png' @@ -99,6 +100,7 @@ const wms = function wms(layerOptions, viewer) { wmsOptions.name.split(':').pop(); const sourceOptions = Object.assign(sourceDefault, viewer.getMapSource()[layerOptions.source]); sourceOptions.attribution = wmsOptions.attribution; + sourceOptions.crossOrigin = wmsOptions.crossOrigin ? wmsOptions.crossOrigin : sourceOptions.crossOrigin; sourceOptions.projection = viewer.getProjection(); sourceOptions.id = wmsOptions.id; sourceOptions.format = wmsOptions.format ? wmsOptions.format : sourceOptions.format; diff --git a/src/layer/wmts.js b/src/layer/wmts.js index aa1b24f8b..50e57611c 100644 --- a/src/layer/wmts.js +++ b/src/layer/wmts.js @@ -5,7 +5,7 @@ import tile from './tile'; function createSource(options) { return new WMTSSource({ - crossOrigin: 'anonymous', + crossOrigin: options.crossOrigin, attributions: options.attribution, url: options.url, projection: options.projectionCode, @@ -28,8 +28,9 @@ const wmts = function wmts(layerOptions, viewer) { featureinfoLayer: undefined }; const sourceDefault = { - matrixSet: viewer.getProjectionCode(), - matrixIdsPrefix: `${viewer.getProjectionCode()}:`, + crossOrigin: 'anonymous', + matrixSet: layerOptions.matrixSet || viewer.getProjectionCode(), + matrixIdsPrefix: layerOptions.matrixIdsPrefix === false ? '' : `${viewer.getProjectionCode()}:`, format: 'image/png', resolutions: JSON.parse(JSON.stringify(viewer.getResolutions())), tileSize: [256, 256] @@ -42,6 +43,7 @@ const wmts = function wmts(layerOptions, viewer) { sourceOptions.format = wmtsOptions.format; } sourceOptions.attribution = wmtsOptions.attribution; + sourceOptions.crossOrigin = wmtsOptions.crossOrigin ? wmtsOptions.crossOrigin : sourceOptions.crossOrigin; sourceOptions.projectionCode = viewer.getProjectionCode(); sourceOptions.matrixIds = []; sourceOptions.resolutions.forEach((resolution, i) => { diff --git a/src/layer/xyz.js b/src/layer/xyz.js index 54928a4e6..f43b7266f 100644 --- a/src/layer/xyz.js +++ b/src/layer/xyz.js @@ -11,11 +11,15 @@ const xyz = function xyz(layerOptions, viewer) { layerType: 'tile', featureinfoLayer: undefined }; - const sourceDefault = { url: '' }; + const sourceDefault = { + crossOrigin: 'anonymous', + url: '' + }; const xyzOptions = Object.assign(xyzDefault, layerOptions); xyzOptions.sourceName = xyzOptions.id; const sourceOptions = Object.assign(sourceDefault, viewer.getMapSource()[layerOptions.source]); sourceOptions.attributions = xyzOptions.attribution; + sourceOptions.crossOrigin = xyzOptions.crossOrigin ? xyzOptions.crossOrigin : sourceOptions.crossOrigin; sourceOptions.projection = viewer.getProjectionCode() || 'EPSG:3857'; if (xyzOptions.tileGrid) { @@ -33,7 +37,7 @@ const xyz = function xyz(layerOptions, viewer) { if (xyzOptions.layerURL) { sourceOptions.url += xyzOptions.layerURL; } - sourceOptions.crossOrigin = 'anonymous'; + const xyzSource = createSource(sourceOptions); return tile(xyzOptions, xyzSource, viewer); };