diff --git a/externs/olx.js b/externs/olx.js index b7abb24f37..e2cd7a93f5 100644 --- a/externs/olx.js +++ b/externs/olx.js @@ -3602,6 +3602,7 @@ olx.source; * key: string, * imagerySet: string, * maxZoom: (number|undefined), + * reprojectionErrorThreshold: (number|undefined), * tileLoadFunction: (ol.TileLoadFunctionType|undefined), * wrapX: (boolean|undefined)}} * @api @@ -3642,6 +3643,14 @@ olx.source.BingMapsOptions.prototype.imagerySet; olx.source.BingMapsOptions.prototype.maxZoom; +/** + * Maximum allowed reprojection error. + * @type {number|undefined} + * @api + */ +olx.source.BingMapsOptions.prototype.reprojectionErrorThreshold; + + /** * Optional function to load a tile given a URL. * @type {ol.TileLoadFunctionType|undefined} @@ -3761,6 +3770,7 @@ olx.source.TileUTFGridOptions.prototype.url; * logo: (string|olx.LogoOptions|undefined), * opaque: (boolean|undefined), * projection: ol.proj.ProjectionLike, + * reprojectionErrorThreshold: (number|undefined), * state: (ol.source.State|string|undefined), * tileClass: (function(new: ol.ImageTile, ol.TileCoord, * ol.TileState, string, ?string, @@ -3819,6 +3829,14 @@ olx.source.TileImageOptions.prototype.opaque; olx.source.TileImageOptions.prototype.projection; +/** + * Maximum allowed reprojection error. + * @type {number|undefined} + * @api + */ +olx.source.TileImageOptions.prototype.reprojectionErrorThreshold; + + /** * Source state. * @type {ol.source.State|string|undefined} @@ -4076,6 +4094,7 @@ olx.source.ImageMapGuideOptions.prototype.params; /** * @typedef {{layer: string, + * reprojectionErrorThreshold: (number|undefined), * tileLoadFunction: (ol.TileLoadFunctionType|undefined), * url: (string|undefined)}} * @api @@ -4091,6 +4110,14 @@ olx.source.MapQuestOptions; olx.source.MapQuestOptions.prototype.layer; +/** + * Maximum allowed reprojection error. + * @type {number|undefined} + * @api + */ +olx.source.MapQuestOptions.prototype.reprojectionErrorThreshold; + + /** * Optional function to load a tile given a URL. * @type {ol.TileLoadFunctionType|undefined} @@ -4144,6 +4171,7 @@ olx.source.TileDebugOptions.prototype.wrapX; * @typedef {{attributions: (Array.|undefined), * crossOrigin: (null|string|undefined), * maxZoom: (number|undefined), + * reprojectionErrorThreshold: (number|undefined), * tileLoadFunction: (ol.TileLoadFunctionType|undefined), * url: (string|undefined), * wrapX: (boolean|undefined)}} @@ -4182,6 +4210,14 @@ olx.source.OSMOptions.prototype.crossOrigin; olx.source.OSMOptions.prototype.maxZoom; +/** + * Maximum allowed reprojection error. + * @type {number|undefined} + * @api + */ +olx.source.OSMOptions.prototype.reprojectionErrorThreshold; + + /** * Optional function to load a tile given a URL. * @type {ol.TileLoadFunctionType|undefined} @@ -4538,6 +4574,7 @@ olx.source.ImageWMSOptions.prototype.url; * minZoom: (number|undefined), * maxZoom: (number|undefined), * opaque: (boolean|undefined), + * reprojectionErrorThreshold: (number|undefined), * tileLoadFunction: (ol.TileLoadFunctionType|undefined), * url: (string|undefined)}} * @api @@ -4577,6 +4614,14 @@ olx.source.StamenOptions.prototype.maxZoom; olx.source.StamenOptions.prototype.opaque; +/** + * Maximum allowed reprojection error. + * @type {number|undefined} + * @api + */ +olx.source.StamenOptions.prototype.reprojectionErrorThreshold; + + /** * Optional function to load a tile given a URL. * @type {ol.TileLoadFunctionType|undefined} @@ -4683,6 +4728,7 @@ olx.source.ImageStaticOptions.prototype.url; * logo: (string|olx.LogoOptions|undefined), * tileGrid: (ol.tilegrid.TileGrid|undefined), * projection: ol.proj.ProjectionLike, + * reprojectionErrorThreshold: (number|undefined), * tileLoadFunction: (ol.TileLoadFunctionType|undefined), * url: (string|undefined), * urls: (Array.|undefined), @@ -4754,6 +4800,14 @@ olx.source.TileArcGISRestOptions.prototype.tileGrid; olx.source.TileArcGISRestOptions.prototype.projection; +/** + * Maximum allowed reprojection error. + * @type {number|undefined} + * @api + */ +olx.source.TileArcGISRestOptions.prototype.reprojectionErrorThreshold; + + /** * Optional function to load a tile given a URL. * @type {ol.TileLoadFunctionType|undefined} @@ -4791,6 +4845,7 @@ olx.source.TileArcGISRestOptions.prototype.urls; /** * @typedef {{attributions: (Array.|undefined), * crossOrigin: (null|string|undefined), + * reprojectionErrorThreshold: (number|undefined), * tileLoadFunction: (ol.TileLoadFunctionType|undefined), * url: string, * wrapX: (boolean|undefined)}} @@ -4821,6 +4876,14 @@ olx.source.TileJSONOptions.prototype.attributions; olx.source.TileJSONOptions.prototype.crossOrigin; +/** + * Maximum allowed reprojection error. + * @type {number|undefined} + * @api + */ +olx.source.TileJSONOptions.prototype.reprojectionErrorThreshold; + + /** * Optional function to load a tile given a URL. * @type {ol.TileLoadFunctionType|undefined} @@ -4855,6 +4918,7 @@ olx.source.TileJSONOptions.prototype.wrapX; * tileGrid: (ol.tilegrid.TileGrid|undefined), * maxZoom: (number|undefined), * projection: ol.proj.ProjectionLike, + * reprojectionErrorThreshold: (number|undefined), * serverType: (ol.source.wms.ServerType|string|undefined), * tileLoadFunction: (ol.TileLoadFunctionType|undefined), * url: (string|undefined), @@ -4955,6 +5019,14 @@ olx.source.TileWMSOptions.prototype.maxZoom; olx.source.TileWMSOptions.prototype.projection; +/** + * Maximum allowed reprojection error. + * @type {number|undefined} + * @api + */ +olx.source.TileWMSOptions.prototype.reprojectionErrorThreshold; + + /** * The type of the remote WMS server. Currently only used when `hidpi` is * `true`. Default is `undefined`. @@ -5120,6 +5192,7 @@ olx.source.VectorOptions.prototype.wrapX; * logo: (string|olx.LogoOptions|undefined), * tileGrid: ol.tilegrid.WMTS, * projection: ol.proj.ProjectionLike, + * reprojectionErrorThreshold: (number|undefined), * requestEncoding: (ol.source.WMTSRequestEncoding|string|undefined), * layer: string, * style: string, @@ -5185,6 +5258,14 @@ olx.source.WMTSOptions.prototype.tileGrid; olx.source.WMTSOptions.prototype.projection; +/** + * Maximum allowed reprojection error. + * @type {number|undefined} + * @api + */ +olx.source.WMTSOptions.prototype.reprojectionErrorThreshold; + + /** * Request encoding. Default is `KVP`. * @type {ol.source.WMTSRequestEncoding|string|undefined} @@ -5311,6 +5392,7 @@ olx.source.WMTSOptions.prototype.wrapX; * crossOrigin: (null|string|undefined), * logo: (string|olx.LogoOptions|undefined), * projection: ol.proj.ProjectionLike, + * reprojectionErrorThreshold: (number|undefined), * maxZoom: (number|undefined), * minZoom: (number|undefined), * tileGrid: (ol.tilegrid.TileGrid|undefined), @@ -5362,6 +5444,14 @@ olx.source.XYZOptions.prototype.logo; olx.source.XYZOptions.prototype.projection; +/** + * Maximum allowed reprojection error. + * @type {number|undefined} + * @api + */ +olx.source.XYZOptions.prototype.reprojectionErrorThreshold; + + /** * Optional max zoom level. Default is `18`. * @type {number|undefined} @@ -5452,6 +5542,7 @@ olx.source.XYZOptions.prototype.wrapX; * @typedef {{attributions: (Array.|undefined), * crossOrigin: (null|string|undefined), * logo: (string|olx.LogoOptions|undefined), + * reprojectionErrorThreshold: (number|undefined), * url: !string, * tierSizeCalculation: (string|undefined), * size: ol.Size}} @@ -5488,6 +5579,14 @@ olx.source.ZoomifyOptions.prototype.crossOrigin; olx.source.ZoomifyOptions.prototype.logo; +/** + * Maximum allowed reprojection error. + * @type {number|undefined} + * @api + */ +olx.source.ZoomifyOptions.prototype.reprojectionErrorThreshold; + + /** * Prefix of URL template. * @type {!string} diff --git a/src/ol/reproj/tile.js b/src/ol/reproj/tile.js index 44984a403a..cdfbaf79d7 100644 --- a/src/ol/reproj/tile.js +++ b/src/ol/reproj/tile.js @@ -28,10 +28,12 @@ goog.require('ol.reproj.Triangulation'); * @param {number} y * @param {number} pixelRatio * @param {function(number, number, number, number) : ol.Tile} getTileFunction + * @param {number=} opt_errorThreshold * @param {boolean=} opt_renderEdges */ ol.reproj.Tile = function(sourceProj, sourceTileGrid, targetProj, targetTileGrid, z, x, y, pixelRatio, getTileFunction, + opt_errorThreshold, opt_renderEdges) { goog.base(this, [z, x, y], ol.TileState.IDLE); @@ -111,7 +113,8 @@ ol.reproj.Tile = function(sourceProj, sourceTileGrid, var targetResolution = targetTileGrid.getResolution(z); - var errorThresholdInPixels = ol.DEFAULT_RASTER_REPROJ_ERROR_THRESHOLD; + var errorThresholdInPixels = goog.isDef(opt_errorThreshold) ? + opt_errorThreshold : ol.DEFAULT_RASTER_REPROJ_ERROR_THRESHOLD; // in source units var errorThreshold = targetResolution * errorThresholdInPixels * diff --git a/src/ol/source/bingmapssource.js b/src/ol/source/bingmapssource.js index 998d439442..8c42d1b152 100644 --- a/src/ol/source/bingmapssource.js +++ b/src/ol/source/bingmapssource.js @@ -29,6 +29,7 @@ ol.source.BingMaps = function(options) { crossOrigin: 'anonymous', opaque: true, projection: ol.proj.get('EPSG:3857'), + reprojectionErrorThreshold: options.reprojectionErrorThreshold, state: ol.source.State.LOADING, tileLoadFunction: options.tileLoadFunction, wrapX: options.wrapX !== undefined ? options.wrapX : true diff --git a/src/ol/source/mapquestsource.js b/src/ol/source/mapquestsource.js index 69ecc336b7..49e5241b24 100644 --- a/src/ol/source/mapquestsource.js +++ b/src/ol/source/mapquestsource.js @@ -40,6 +40,7 @@ ol.source.MapQuest = function(opt_options) { crossOrigin: 'anonymous', logo: 'https://developer.mapquest.com/content/osm/mq_logo.png', maxZoom: layerConfig.maxZoom, + reprojectionErrorThreshold: options.reprojectionErrorThreshold, opaque: true, tileLoadFunction: options.tileLoadFunction, url: url diff --git a/src/ol/source/osmsource.js b/src/ol/source/osmsource.js index af17595c5e..f00859485e 100644 --- a/src/ol/source/osmsource.js +++ b/src/ol/source/osmsource.js @@ -36,6 +36,7 @@ ol.source.OSM = function(opt_options) { crossOrigin: crossOrigin, opaque: true, maxZoom: options.maxZoom !== undefined ? options.maxZoom : 19, + reprojectionErrorThreshold: options.reprojectionErrorThreshold, tileLoadFunction: options.tileLoadFunction, url: url, wrapX: options.wrapX diff --git a/src/ol/source/stamensource.js b/src/ol/source/stamensource.js index f49f2d8b98..733542835e 100644 --- a/src/ol/source/stamensource.js +++ b/src/ol/source/stamensource.js @@ -109,6 +109,7 @@ ol.source.Stamen = function(options) { // FIXME uncomment the following when tilegrid supports minZoom //minZoom: providerConfig.minZoom, opaque: layerConfig.opaque, + reprojectionErrorThreshold: options.reprojectionErrorThreshold, tileLoadFunction: options.tileLoadFunction, url: url }); diff --git a/src/ol/source/tilearcgisrestsource.js b/src/ol/source/tilearcgisrestsource.js index 3a105fe646..76ba2c336e 100644 --- a/src/ol/source/tilearcgisrestsource.js +++ b/src/ol/source/tilearcgisrestsource.js @@ -41,6 +41,7 @@ ol.source.TileArcGISRest = function(opt_options) { crossOrigin: options.crossOrigin, logo: options.logo, projection: options.projection, + reprojectionErrorThreshold: options.reprojectionErrorThreshold, tileGrid: options.tileGrid, tileLoadFunction: options.tileLoadFunction, tileUrlFunction: goog.bind(this.tileUrlFunction_, this), diff --git a/src/ol/source/tileimagesource.js b/src/ol/source/tileimagesource.js index 5e3d987962..fa79dc4ca3 100644 --- a/src/ol/source/tileimagesource.js +++ b/src/ol/source/tileimagesource.js @@ -85,6 +85,12 @@ ol.source.TileImage = function(options) { */ this.tileGridForProjection = {}; + /** + * @private + * @type {number|undefined} + */ + this.reprojectionErrorThreshold_ = options.reprojectionErrorThreshold; + /** * @private * @type {boolean} @@ -204,7 +210,8 @@ ol.source.TileImage.prototype.getTile = projection, targetTileGrid, z, x, y, pixelRatio, goog.bind(function(z, x, y, pixelRatio) { return this.getTileInternal(z, x, y, pixelRatio, sourceProjection); - }, this), this.renderReprojectionEdges_); + }, this), this.reprojectionErrorThreshold_, + this.renderReprojectionEdges_); cache.set(tileCoordKey, tile); return tile; diff --git a/src/ol/source/tilejsonsource.js b/src/ol/source/tilejsonsource.js index e1c3f854fc..bf82741004 100644 --- a/src/ol/source/tilejsonsource.js +++ b/src/ol/source/tilejsonsource.js @@ -34,6 +34,7 @@ ol.source.TileJSON = function(options) { attributions: options.attributions, crossOrigin: options.crossOrigin, projection: ol.proj.get('EPSG:3857'), + reprojectionErrorThreshold: options.reprojectionErrorThreshold, state: ol.source.State.LOADING, tileLoadFunction: options.tileLoadFunction, wrapX: options.wrapX !== undefined ? options.wrapX : true diff --git a/src/ol/source/tilewmssource.js b/src/ol/source/tilewmssource.js index e3ad0ed0d3..265b607a2d 100644 --- a/src/ol/source/tilewmssource.js +++ b/src/ol/source/tilewmssource.js @@ -45,6 +45,7 @@ ol.source.TileWMS = function(opt_options) { logo: options.logo, opaque: !transparent, projection: options.projection, + reprojectionErrorThreshold: options.reprojectionErrorThreshold, tileGrid: options.tileGrid, tileLoadFunction: options.tileLoadFunction, tileUrlFunction: goog.bind(this.tileUrlFunction_, this), diff --git a/src/ol/source/wmtssource.js b/src/ol/source/wmtssource.js index c80e745752..854f1062d5 100644 --- a/src/ol/source/wmtssource.js +++ b/src/ol/source/wmtssource.js @@ -185,6 +185,7 @@ ol.source.WMTS = function(options) { crossOrigin: options.crossOrigin, logo: options.logo, projection: options.projection, + reprojectionErrorThreshold: options.reprojectionErrorThreshold, tileClass: options.tileClass, tileGrid: tileGrid, tileLoadFunction: options.tileLoadFunction, diff --git a/src/ol/source/xyzsource.js b/src/ol/source/xyzsource.js index 1863cdb574..17c1f46ed7 100644 --- a/src/ol/source/xyzsource.js +++ b/src/ol/source/xyzsource.js @@ -49,6 +49,7 @@ ol.source.XYZ = function(options) { crossOrigin: options.crossOrigin, logo: options.logo, projection: projection, + reprojectionErrorThreshold: options.reprojectionErrorThreshold, tileGrid: tileGrid, tileLoadFunction: options.tileLoadFunction, tilePixelRatio: options.tilePixelRatio, diff --git a/src/ol/source/zoomifysource.js b/src/ol/source/zoomifysource.js index f9533a74b0..bcddc08af1 100644 --- a/src/ol/source/zoomifysource.js +++ b/src/ol/source/zoomifysource.js @@ -124,6 +124,7 @@ ol.source.Zoomify = function(opt_options) { attributions: options.attributions, crossOrigin: options.crossOrigin, logo: options.logo, + reprojectionErrorThreshold: options.reprojectionErrorThreshold, tileClass: ol.source.ZoomifyTile_, tileGrid: tileGrid, tileUrlFunction: tileUrlFunction