Sources may be configured with a projection, tile grids with an extent
An XYZ tile grid is constructed with an extent defining the bounds of the tile grid.
This commit is contained in:
+13
-10
@@ -5092,14 +5092,24 @@ olx.tilegrid.WMTSOptions.prototype.tileSizes;
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {{maxZoom: (number|undefined),
|
* @typedef {{extent: (ol.Extent|undefined),
|
||||||
* minZoom: (number|undefined),
|
* maxZoom: (number|undefined),
|
||||||
* projection: (ol.proj.ProjectionLike|undefined)}}
|
* minZoom: (number|undefined)}}
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
olx.tilegrid.XYZOptions;
|
olx.tilegrid.XYZOptions;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extent for the tile grid. The origin for an XYZ tile grid is the top-left
|
||||||
|
* corner of the extent. The zero level of the grid is defined by the
|
||||||
|
* resolution at which one 256 x 256 tile fits in the provided extent. If not
|
||||||
|
* provided, the extent of the EPSG:3857 projection is used.
|
||||||
|
* @type {ol.Extent|undefined}
|
||||||
|
*/
|
||||||
|
olx.tilegrid.XYZOptions.prototype.extent;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maximum zoom.
|
* Maximum zoom.
|
||||||
* @type {number|undefined}
|
* @type {number|undefined}
|
||||||
@@ -5114,13 +5124,6 @@ olx.tilegrid.XYZOptions.prototype.maxZoom;
|
|||||||
olx.tilegrid.XYZOptions.prototype.minZoom;
|
olx.tilegrid.XYZOptions.prototype.minZoom;
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Projection. Default is `'EPSG:3857'`.
|
|
||||||
* @type {ol.proj.ProjectionLike|undefined}
|
|
||||||
*/
|
|
||||||
olx.tilegrid.XYZOptions.prototype.projection;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {{resolutions: !Array.<number>}}
|
* @typedef {{resolutions: !Array.<number>}}
|
||||||
* @api
|
* @api
|
||||||
|
|||||||
@@ -89,7 +89,9 @@ ol.source.BingMaps.prototype.handleImageryMetadataResponse =
|
|||||||
var resource = response.resourceSets[0].resources[0];
|
var resource = response.resourceSets[0].resources[0];
|
||||||
|
|
||||||
goog.asserts.assert(resource.imageWidth == resource.imageHeight);
|
goog.asserts.assert(resource.imageWidth == resource.imageHeight);
|
||||||
|
var sourceProjection = this.getProjection();
|
||||||
var tileGrid = new ol.tilegrid.XYZ({
|
var tileGrid = new ol.tilegrid.XYZ({
|
||||||
|
extent: ol.tilegrid.extentFromProjection(sourceProjection),
|
||||||
minZoom: resource.zoomMin,
|
minZoom: resource.zoomMin,
|
||||||
maxZoom: resource.zoomMax,
|
maxZoom: resource.zoomMax,
|
||||||
tileSize: resource.imageWidth
|
tileSize: resource.imageWidth
|
||||||
@@ -97,7 +99,6 @@ ol.source.BingMaps.prototype.handleImageryMetadataResponse =
|
|||||||
this.tileGrid = tileGrid;
|
this.tileGrid = tileGrid;
|
||||||
|
|
||||||
var culture = this.culture_;
|
var culture = this.culture_;
|
||||||
var sourceProjection = this.getProjection();
|
|
||||||
this.tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform(
|
this.tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform(
|
||||||
tileGrid.createTileCoordTransform(),
|
tileGrid.createTileCoordTransform(),
|
||||||
ol.TileUrlFunction.createFromTileUrlFunctions(
|
ol.TileUrlFunction.createFromTileUrlFunctions(
|
||||||
|
|||||||
@@ -54,10 +54,11 @@ ol.source.TileJSON.prototype.handleTileJSONResponse = function(tileJSON) {
|
|||||||
|
|
||||||
var epsg4326Projection = ol.proj.get('EPSG:4326');
|
var epsg4326Projection = ol.proj.get('EPSG:4326');
|
||||||
|
|
||||||
|
var sourceProjection = this.getProjection();
|
||||||
var extent;
|
var extent;
|
||||||
if (goog.isDef(tileJSON.bounds)) {
|
if (goog.isDef(tileJSON.bounds)) {
|
||||||
var transform = ol.proj.getTransformFromProjections(
|
var transform = ol.proj.getTransformFromProjections(
|
||||||
epsg4326Projection, this.getProjection());
|
epsg4326Projection, sourceProjection);
|
||||||
extent = ol.extent.applyTransform(tileJSON.bounds, transform);
|
extent = ol.extent.applyTransform(tileJSON.bounds, transform);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,6 +68,7 @@ ol.source.TileJSON.prototype.handleTileJSONResponse = function(tileJSON) {
|
|||||||
var minZoom = tileJSON.minzoom || 0;
|
var minZoom = tileJSON.minzoom || 0;
|
||||||
var maxZoom = tileJSON.maxzoom || 22;
|
var maxZoom = tileJSON.maxzoom || 22;
|
||||||
var tileGrid = new ol.tilegrid.XYZ({
|
var tileGrid = new ol.tilegrid.XYZ({
|
||||||
|
extent: ol.tilegrid.extentFromProjection(sourceProjection),
|
||||||
maxZoom: maxZoom,
|
maxZoom: maxZoom,
|
||||||
minZoom: minZoom
|
minZoom: minZoom
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -17,13 +17,12 @@ goog.require('ol.tilegrid.XYZ');
|
|||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
ol.source.XYZ = function(options) {
|
ol.source.XYZ = function(options) {
|
||||||
|
|
||||||
var projection = goog.isDef(options.projection) ?
|
var projection = goog.isDef(options.projection) ?
|
||||||
options.projection : 'EPSG:3857';
|
options.projection : 'EPSG:3857';
|
||||||
|
|
||||||
var tileGrid = new ol.tilegrid.XYZ({
|
var tileGrid = new ol.tilegrid.XYZ({
|
||||||
maxZoom: options.maxZoom,
|
extent: ol.tilegrid.extentFromProjection(projection),
|
||||||
projection: options.projection
|
maxZoom: options.maxZoom
|
||||||
});
|
});
|
||||||
|
|
||||||
goog.base(this, {
|
goog.base(this, {
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ goog.require('ol.TileRange');
|
|||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.extent.Corner');
|
goog.require('ol.extent.Corner');
|
||||||
goog.require('ol.proj');
|
goog.require('ol.proj');
|
||||||
|
goog.require('ol.proj.EPSG3857');
|
||||||
goog.require('ol.tilecoord');
|
goog.require('ol.tilecoord');
|
||||||
goog.require('ol.tilegrid.TileGrid');
|
goog.require('ol.tilegrid.TileGrid');
|
||||||
|
|
||||||
@@ -23,19 +24,16 @@ goog.require('ol.tilegrid.TileGrid');
|
|||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
ol.tilegrid.XYZ = function(options) {
|
ol.tilegrid.XYZ = function(options) {
|
||||||
var projection = goog.isDef(options.projection) ?
|
// TODO: accept a tileSize option
|
||||||
options.projection : 'EPSG:3857';
|
|
||||||
var extent = ol.tilegrid.extentFromProjection(projection);
|
|
||||||
|
|
||||||
var tileSize = ol.DEFAULT_TILE_SIZE;
|
var tileSize = ol.DEFAULT_TILE_SIZE;
|
||||||
|
var extent = goog.isDef(options.extent) ?
|
||||||
|
options.extent : ol.proj.EPSG3857.EXTENT;
|
||||||
var resolutions = ol.tilegrid.resolutionsFromExtent(
|
var resolutions = ol.tilegrid.resolutionsFromExtent(
|
||||||
extent, options.maxZoom, tileSize);
|
extent, options.maxZoom, tileSize);
|
||||||
|
|
||||||
var origin = ol.extent.getCorner(extent, ol.extent.Corner.TOP_LEFT);
|
|
||||||
|
|
||||||
goog.base(this, {
|
goog.base(this, {
|
||||||
minZoom: options.minZoom,
|
minZoom: options.minZoom,
|
||||||
origin: origin,
|
origin: ol.extent.getCorner(extent, ol.extent.Corner.TOP_LEFT),
|
||||||
resolutions: resolutions,
|
resolutions: resolutions,
|
||||||
tileSize: tileSize
|
tileSize: tileSize
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user