Replace ol.tilegrid.XYZ with an ol.tilegrid.createXYZ function
This commit is contained in:
@@ -12,7 +12,6 @@ goog.require('ol.proj');
|
||||
goog.require('ol.source.State');
|
||||
goog.require('ol.source.TileImage');
|
||||
goog.require('ol.tilecoord');
|
||||
goog.require('ol.tilegrid.XYZ');
|
||||
|
||||
|
||||
|
||||
@@ -103,18 +102,20 @@ ol.source.BingMaps.prototype.handleImageryMetadataResponse =
|
||||
var maxZoom = this.maxZoom_ == -1 ? resource.zoomMax : this.maxZoom_;
|
||||
|
||||
var sourceProjection = this.getProjection();
|
||||
var tileGrid = new ol.tilegrid.XYZ({
|
||||
extent: ol.tilegrid.extentFromProjection(sourceProjection),
|
||||
var extent = ol.tilegrid.extentFromProjection(sourceProjection);
|
||||
var tileSize = resource.imageWidth == resource.imageHeight ?
|
||||
resource.imageWidth : [resource.imageWidth, resource.imageHeight];
|
||||
var tileGrid = ol.tilegrid.createXYZ({
|
||||
extent: extent,
|
||||
minZoom: resource.zoomMin,
|
||||
maxZoom: maxZoom,
|
||||
tileSize: resource.imageWidth == resource.imageHeight ?
|
||||
resource.imageWidth : [resource.imageWidth, resource.imageHeight]
|
||||
tileSize: tileSize
|
||||
});
|
||||
this.tileGrid = tileGrid;
|
||||
|
||||
var culture = this.culture_;
|
||||
this.tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform(
|
||||
tileGrid.createTileCoordTransform(),
|
||||
ol.tilegrid.createOriginTopLeftTileCoordTransform(tileGrid),
|
||||
ol.TileUrlFunction.createFromTileUrlFunctions(
|
||||
goog.array.map(
|
||||
resource.imageUrlSubdomains,
|
||||
|
||||
@@ -17,7 +17,6 @@ goog.require('ol.extent');
|
||||
goog.require('ol.proj');
|
||||
goog.require('ol.source.State');
|
||||
goog.require('ol.source.TileImage');
|
||||
goog.require('ol.tilegrid.XYZ');
|
||||
|
||||
|
||||
|
||||
@@ -69,7 +68,7 @@ ol.source.TileJSON.prototype.handleTileJSONResponse = function(tileJSON) {
|
||||
}
|
||||
var minZoom = tileJSON.minzoom || 0;
|
||||
var maxZoom = tileJSON.maxzoom || 22;
|
||||
var tileGrid = new ol.tilegrid.XYZ({
|
||||
var tileGrid = ol.tilegrid.createXYZ({
|
||||
extent: ol.tilegrid.extentFromProjection(sourceProjection),
|
||||
maxZoom: maxZoom,
|
||||
minZoom: minZoom
|
||||
|
||||
@@ -13,7 +13,6 @@ goog.require('ol.extent');
|
||||
goog.require('ol.proj');
|
||||
goog.require('ol.source.State');
|
||||
goog.require('ol.source.Tile');
|
||||
goog.require('ol.tilegrid.XYZ');
|
||||
|
||||
|
||||
|
||||
@@ -122,7 +121,7 @@ ol.source.TileUTFGrid.prototype.handleTileJSONResponse = function(tileJSON) {
|
||||
}
|
||||
var minZoom = tileJSON.minzoom || 0;
|
||||
var maxZoom = tileJSON.maxzoom || 22;
|
||||
var tileGrid = new ol.tilegrid.XYZ({
|
||||
var tileGrid = ol.tilegrid.createXYZ({
|
||||
extent: ol.tilegrid.extentFromProjection(sourceProjection),
|
||||
maxZoom: maxZoom,
|
||||
minZoom: minZoom
|
||||
|
||||
@@ -3,7 +3,6 @@ goog.provide('ol.source.XYZ');
|
||||
goog.require('ol.Attribution');
|
||||
goog.require('ol.TileUrlFunction');
|
||||
goog.require('ol.source.TileImage');
|
||||
goog.require('ol.tilegrid.XYZ');
|
||||
|
||||
|
||||
|
||||
@@ -20,7 +19,7 @@ ol.source.XYZ = function(options) {
|
||||
var projection = goog.isDef(options.projection) ?
|
||||
options.projection : 'EPSG:3857';
|
||||
|
||||
var tileGrid = new ol.tilegrid.XYZ({
|
||||
var tileGrid = ol.tilegrid.createXYZ({
|
||||
extent: ol.tilegrid.extentFromProjection(projection),
|
||||
maxZoom: options.maxZoom,
|
||||
tileSize: options.tileSize
|
||||
@@ -42,7 +41,8 @@ ol.source.XYZ = function(options) {
|
||||
* @private
|
||||
* @type {ol.TileCoordTransformType}
|
||||
*/
|
||||
this.tileCoordTransform_ = tileGrid.createTileCoordTransform();
|
||||
this.tileCoordTransform_ =
|
||||
ol.tilegrid.createOriginTopLeftTileCoordTransform(tileGrid);
|
||||
|
||||
if (goog.isDef(options.tileUrlFunction)) {
|
||||
this.setTileUrlFunction(options.tileUrlFunction);
|
||||
|
||||
@@ -534,36 +534,48 @@ ol.tilegrid.getForProjection = function(projection) {
|
||||
*/
|
||||
ol.tilegrid.createForExtent =
|
||||
function(extent, opt_maxZoom, opt_tileSize, opt_corner) {
|
||||
var tileSize = goog.isDef(opt_tileSize) ?
|
||||
ol.size.toSize(opt_tileSize) : ol.size.toSize(ol.DEFAULT_TILE_SIZE);
|
||||
|
||||
var corner = goog.isDef(opt_corner) ?
|
||||
opt_corner : ol.extent.Corner.BOTTOM_LEFT;
|
||||
|
||||
var resolutions = ol.tilegrid.resolutionsFromExtent(
|
||||
extent, opt_maxZoom, ol.size.toSize(tileSize));
|
||||
|
||||
var widths = new Array(resolutions.length);
|
||||
var extentWidth = ol.extent.getWidth(extent);
|
||||
for (var z = resolutions.length - 1; z >= 0; --z) {
|
||||
widths[z] = extentWidth / tileSize[0] / resolutions[z];
|
||||
}
|
||||
extent, opt_maxZoom, opt_tileSize);
|
||||
|
||||
return new ol.tilegrid.TileGrid({
|
||||
extent: extent,
|
||||
origin: ol.extent.getCorner(extent, corner),
|
||||
resolutions: resolutions,
|
||||
tileSize: goog.isDef(opt_tileSize) ? opt_tileSize : ol.DEFAULT_TILE_SIZE,
|
||||
widths: widths
|
||||
tileSize: opt_tileSize
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Creates a tile grid with a standard XYZ tiling scheme.
|
||||
* @param {olx.tilegrid.XYZOptions=} opt_options Tile grid options.
|
||||
* @return {ol.tilegrid.TileGrid} Tile grid instance.
|
||||
* @api
|
||||
*/
|
||||
ol.tilegrid.createXYZ = function(opt_options) {
|
||||
var options = /** @type {olx.tilegrid.TileGridOptions} */ ({});
|
||||
goog.object.extend(options, goog.isDef(opt_options) ?
|
||||
opt_options : /** @type {olx.tilegrid.XYZOptions} */ ({}));
|
||||
if (!goog.isDef(options.extent)) {
|
||||
options.extent = ol.proj.get('EPSG:3857').getExtent();
|
||||
}
|
||||
options.resolutions = ol.tilegrid.resolutionsFromExtent(
|
||||
options.extent, options.maxZoom, options.tileSize);
|
||||
delete options.maxZoom;
|
||||
return new ol.tilegrid.TileGrid(options);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Create a resolutions array from an extent. A zoom factor of 2 is assumed.
|
||||
* @param {ol.Extent} extent Extent.
|
||||
* @param {number=} opt_maxZoom Maximum zoom level (default is
|
||||
* ol.DEFAULT_MAX_ZOOM).
|
||||
* @param {ol.Size=} opt_tileSize Tile size (default uses ol.DEFAULT_TILE_SIZE).
|
||||
* @param {number|ol.Size=} opt_tileSize Tile size (default uses
|
||||
* ol.DEFAULT_TILE_SIZE).
|
||||
* @return {!Array.<number>} Resolutions array.
|
||||
*/
|
||||
ol.tilegrid.resolutionsFromExtent =
|
||||
@@ -574,8 +586,8 @@ ol.tilegrid.resolutionsFromExtent =
|
||||
var height = ol.extent.getHeight(extent);
|
||||
var width = ol.extent.getWidth(extent);
|
||||
|
||||
var tileSize = goog.isDef(opt_tileSize) ?
|
||||
opt_tileSize : ol.size.toSize(ol.DEFAULT_TILE_SIZE);
|
||||
var tileSize = ol.size.toSize(goog.isDef(opt_tileSize) ?
|
||||
opt_tileSize : ol.DEFAULT_TILE_SIZE);
|
||||
var maxResolution = Math.max(
|
||||
width / tileSize[0], height / tileSize[1]);
|
||||
|
||||
@@ -643,12 +655,8 @@ ol.tilegrid.createOriginTopLeftTileCoordTransform = function(tileGrid) {
|
||||
}
|
||||
var z = tileCoord[0];
|
||||
var fullTileRange = tileGrid.getFullTileRange(z);
|
||||
var height;
|
||||
if (goog.isNull(fullTileRange) || fullTileRange.minY < 0) {
|
||||
height = 0;
|
||||
} else {
|
||||
height = fullTileRange.getHeight();
|
||||
}
|
||||
var height = (goog.isNull(fullTileRange) || fullTileRange.minY < 0) ?
|
||||
0 : fullTileRange.getHeight();
|
||||
return ol.tilecoord.createOrUpdate(
|
||||
z, tileCoord[1], height - tileCoord[2] - 1, opt_tileCoord);
|
||||
}
|
||||
|
||||
@@ -1,130 +0,0 @@
|
||||
goog.provide('ol.tilegrid.XYZ');
|
||||
|
||||
goog.require('goog.math');
|
||||
goog.require('ol');
|
||||
goog.require('ol.TileCoord');
|
||||
goog.require('ol.TileRange');
|
||||
goog.require('ol.extent');
|
||||
goog.require('ol.extent.Corner');
|
||||
goog.require('ol.proj');
|
||||
goog.require('ol.proj.EPSG3857');
|
||||
goog.require('ol.size');
|
||||
goog.require('ol.tilecoord');
|
||||
goog.require('ol.tilegrid.TileGrid');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @classdesc
|
||||
* Set the grid pattern for sources accessing XYZ tiled-image servers.
|
||||
*
|
||||
* @constructor
|
||||
* @extends {ol.tilegrid.TileGrid}
|
||||
* @param {olx.tilegrid.XYZOptions} options XYZ options.
|
||||
* @struct
|
||||
* @api
|
||||
*/
|
||||
ol.tilegrid.XYZ = function(options) {
|
||||
var extent = goog.isDef(options.extent) ?
|
||||
options.extent : ol.proj.EPSG3857.EXTENT;
|
||||
var tileSize;
|
||||
if (goog.isDef(options.tileSize)) {
|
||||
tileSize = ol.size.toSize(options.tileSize);
|
||||
}
|
||||
var resolutions = ol.tilegrid.resolutionsFromExtent(
|
||||
extent, options.maxZoom, tileSize);
|
||||
|
||||
goog.base(this, {
|
||||
minZoom: options.minZoom,
|
||||
origin: ol.extent.getCorner(extent, ol.extent.Corner.TOP_LEFT),
|
||||
resolutions: resolutions,
|
||||
tileSize: options.tileSize
|
||||
});
|
||||
|
||||
};
|
||||
goog.inherits(ol.tilegrid.XYZ, ol.tilegrid.TileGrid);
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.tilegrid.XYZ.prototype.createTileCoordTransform = function(opt_options) {
|
||||
var options = goog.isDef(opt_options) ? opt_options : {};
|
||||
var minZ = this.minZoom;
|
||||
var maxZ = this.maxZoom;
|
||||
/** @type {Array.<ol.TileRange>} */
|
||||
var tileRangeByZ = null;
|
||||
if (goog.isDef(options.extent)) {
|
||||
tileRangeByZ = new Array(maxZ + 1);
|
||||
var z;
|
||||
for (z = 0; z <= maxZ; ++z) {
|
||||
if (z < minZ) {
|
||||
tileRangeByZ[z] = null;
|
||||
} else {
|
||||
tileRangeByZ[z] = this.getTileRangeForExtentAndZ(options.extent, z);
|
||||
}
|
||||
}
|
||||
}
|
||||
return (
|
||||
/**
|
||||
* @param {ol.TileCoord} tileCoord Tile coordinate.
|
||||
* @param {ol.proj.Projection} projection Projection.
|
||||
* @param {ol.TileCoord=} opt_tileCoord Destination tile coordinate.
|
||||
* @return {ol.TileCoord} Tile coordinate.
|
||||
*/
|
||||
function(tileCoord, projection, opt_tileCoord) {
|
||||
var z = tileCoord[0];
|
||||
if (z < minZ || maxZ < z) {
|
||||
return null;
|
||||
}
|
||||
var n = Math.pow(2, z);
|
||||
var x = tileCoord[1];
|
||||
var y = tileCoord[2];
|
||||
if (y < -n || -1 < y) {
|
||||
return null;
|
||||
}
|
||||
if (!goog.isNull(tileRangeByZ)) {
|
||||
if (!tileRangeByZ[z].containsXY(x, y)) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return ol.tilecoord.createOrUpdate(z, x, -y - 1, opt_tileCoord);
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.tilegrid.XYZ.prototype.getTileCoordChildTileRange =
|
||||
function(tileCoord, opt_tileRange) {
|
||||
if (tileCoord[0] < this.maxZoom) {
|
||||
var doubleX = 2 * tileCoord[1];
|
||||
var doubleY = 2 * tileCoord[2];
|
||||
return ol.TileRange.createOrUpdate(
|
||||
doubleX, doubleX + 1,
|
||||
doubleY, doubleY + 1,
|
||||
opt_tileRange);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.tilegrid.XYZ.prototype.forEachTileCoordParentTileRange =
|
||||
function(tileCoord, callback, opt_this, opt_tileRange) {
|
||||
var tileRange = ol.TileRange.createOrUpdate(
|
||||
0, tileCoord[1], 0, tileCoord[2], opt_tileRange);
|
||||
var z;
|
||||
for (z = tileCoord[0] - 1; z >= this.minZoom; --z) {
|
||||
tileRange.minX = tileRange.maxX >>= 1;
|
||||
tileRange.minY = tileRange.maxY >>= 1;
|
||||
if (callback.call(opt_this, z, tileRange)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
Reference in New Issue
Block a user