Replace ol.tilegrid.XYZ with an ol.tilegrid.createXYZ function
This commit is contained in:
@@ -5,7 +5,6 @@ goog.require('ol.layer.Tile');
|
|||||||
goog.require('ol.proj');
|
goog.require('ol.proj');
|
||||||
goog.require('ol.source.OSM');
|
goog.require('ol.source.OSM');
|
||||||
goog.require('ol.source.TileDebug');
|
goog.require('ol.source.TileDebug');
|
||||||
goog.require('ol.tilegrid.XYZ');
|
|
||||||
|
|
||||||
|
|
||||||
var map = new ol.Map({
|
var map = new ol.Map({
|
||||||
@@ -16,9 +15,7 @@ var map = new ol.Map({
|
|||||||
new ol.layer.Tile({
|
new ol.layer.Tile({
|
||||||
source: new ol.source.TileDebug({
|
source: new ol.source.TileDebug({
|
||||||
projection: 'EPSG:3857',
|
projection: 'EPSG:3857',
|
||||||
tileGrid: new ol.tilegrid.XYZ({
|
tileGrid: ol.tilegrid.createXYZ({maxZoom: 22})
|
||||||
maxZoom: 22
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -7,13 +7,12 @@ goog.require('ol.source.TileVector');
|
|||||||
goog.require('ol.style.Fill');
|
goog.require('ol.style.Fill');
|
||||||
goog.require('ol.style.Stroke');
|
goog.require('ol.style.Stroke');
|
||||||
goog.require('ol.style.Style');
|
goog.require('ol.style.Style');
|
||||||
goog.require('ol.tilegrid.XYZ');
|
|
||||||
|
|
||||||
var waterLayer = new ol.layer.Vector({
|
var waterLayer = new ol.layer.Vector({
|
||||||
source: new ol.source.TileVector({
|
source: new ol.source.TileVector({
|
||||||
format: new ol.format.TopoJSON(),
|
format: new ol.format.TopoJSON(),
|
||||||
projection: 'EPSG:3857',
|
projection: 'EPSG:3857',
|
||||||
tileGrid: new ol.tilegrid.XYZ({
|
tileGrid: ol.tilegrid.createXYZ({
|
||||||
maxZoom: 19
|
maxZoom: 19
|
||||||
}),
|
}),
|
||||||
url: 'http://{a-c}.tile.openstreetmap.us/' +
|
url: 'http://{a-c}.tile.openstreetmap.us/' +
|
||||||
@@ -31,7 +30,7 @@ var roadLayer = new ol.layer.Vector({
|
|||||||
source: new ol.source.TileVector({
|
source: new ol.source.TileVector({
|
||||||
format: new ol.format.TopoJSON(),
|
format: new ol.format.TopoJSON(),
|
||||||
projection: 'EPSG:3857',
|
projection: 'EPSG:3857',
|
||||||
tileGrid: new ol.tilegrid.XYZ({
|
tileGrid: ol.tilegrid.createXYZ({
|
||||||
maxZoom: 19
|
maxZoom: 19
|
||||||
}),
|
}),
|
||||||
url: 'http://{a-c}.tile.openstreetmap.us/' +
|
url: 'http://{a-c}.tile.openstreetmap.us/' +
|
||||||
@@ -87,7 +86,7 @@ var buildingLayer = new ol.layer.Vector({
|
|||||||
defaultProjection: 'EPSG:4326'
|
defaultProjection: 'EPSG:4326'
|
||||||
}),
|
}),
|
||||||
projection: 'EPSG:3857',
|
projection: 'EPSG:3857',
|
||||||
tileGrid: new ol.tilegrid.XYZ({
|
tileGrid: ol.tilegrid.createXYZ({
|
||||||
maxZoom: 19
|
maxZoom: 19
|
||||||
}),
|
}),
|
||||||
url: 'http://{a-c}.tile.openstreetmap.us/' +
|
url: 'http://{a-c}.tile.openstreetmap.us/' +
|
||||||
@@ -106,7 +105,7 @@ var landuseLayer = new ol.layer.Vector({
|
|||||||
defaultProjection: 'EPSG:4326'
|
defaultProjection: 'EPSG:4326'
|
||||||
}),
|
}),
|
||||||
projection: 'EPSG:3857',
|
projection: 'EPSG:3857',
|
||||||
tileGrid: new ol.tilegrid.XYZ({
|
tileGrid: ol.tilegrid.createXYZ({
|
||||||
maxZoom: 19
|
maxZoom: 19
|
||||||
}),
|
}),
|
||||||
url: 'http://{a-c}.tile.openstreetmap.us/' +
|
url: 'http://{a-c}.tile.openstreetmap.us/' +
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ goog.require('ol.loadingstrategy');
|
|||||||
goog.require('ol.proj');
|
goog.require('ol.proj');
|
||||||
goog.require('ol.source.Vector');
|
goog.require('ol.source.Vector');
|
||||||
goog.require('ol.source.XYZ');
|
goog.require('ol.source.XYZ');
|
||||||
goog.require('ol.tilegrid.XYZ');
|
|
||||||
|
|
||||||
|
|
||||||
var serviceUrl = 'http://services.arcgis.com/rOo16HdIMeOBI4Mb/arcgis/rest/' +
|
var serviceUrl = 'http://services.arcgis.com/rOo16HdIMeOBI4Mb/arcgis/rest/' +
|
||||||
@@ -45,7 +44,7 @@ var vectorSource = new ol.source.Vector({
|
|||||||
}
|
}
|
||||||
}});
|
}});
|
||||||
},
|
},
|
||||||
strategy: ol.loadingstrategy.tile(new ol.tilegrid.XYZ({
|
strategy: ol.loadingstrategy.tile(ol.tilegrid.createXYZ({
|
||||||
tileSize: 512
|
tileSize: 512
|
||||||
}))
|
}))
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ goog.require('ol.source.XYZ');
|
|||||||
goog.require('ol.style.Fill');
|
goog.require('ol.style.Fill');
|
||||||
goog.require('ol.style.Stroke');
|
goog.require('ol.style.Stroke');
|
||||||
goog.require('ol.style.Style');
|
goog.require('ol.style.Style');
|
||||||
goog.require('ol.tilegrid.XYZ');
|
|
||||||
|
|
||||||
|
|
||||||
var serviceUrl = 'http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/' +
|
var serviceUrl = 'http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/' +
|
||||||
@@ -91,7 +90,7 @@ var vectorSource = new ol.source.Vector({
|
|||||||
}
|
}
|
||||||
}});
|
}});
|
||||||
},
|
},
|
||||||
strategy: ol.loadingstrategy.tile(new ol.tilegrid.XYZ({
|
strategy: ol.loadingstrategy.tile(ol.tilegrid.createXYZ({
|
||||||
tileSize: 512
|
tileSize: 512
|
||||||
}))
|
}))
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ goog.require('ol.style.Circle');
|
|||||||
goog.require('ol.style.Fill');
|
goog.require('ol.style.Fill');
|
||||||
goog.require('ol.style.Stroke');
|
goog.require('ol.style.Stroke');
|
||||||
goog.require('ol.style.Style');
|
goog.require('ol.style.Style');
|
||||||
goog.require('ol.tilegrid.XYZ');
|
|
||||||
|
|
||||||
var styles = {
|
var styles = {
|
||||||
'amenity': {
|
'amenity': {
|
||||||
@@ -102,7 +101,7 @@ var vectorSource = new ol.source.Vector({
|
|||||||
vectorSource.addFeatures(features);
|
vectorSource.addFeatures(features);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
strategy: ol.loadingstrategy.tile(new ol.tilegrid.XYZ({
|
strategy: ol.loadingstrategy.tile(ol.tilegrid.createXYZ({
|
||||||
maxZoom: 19
|
maxZoom: 19
|
||||||
}))
|
}))
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ goog.require('ol.source.BingMaps');
|
|||||||
goog.require('ol.source.Vector');
|
goog.require('ol.source.Vector');
|
||||||
goog.require('ol.style.Stroke');
|
goog.require('ol.style.Stroke');
|
||||||
goog.require('ol.style.Style');
|
goog.require('ol.style.Style');
|
||||||
goog.require('ol.tilegrid.XYZ');
|
|
||||||
|
|
||||||
|
|
||||||
// format used to parse WFS GetFeature responses
|
// format used to parse WFS GetFeature responses
|
||||||
@@ -24,7 +23,7 @@ var vectorSource = new ol.source.Vector({
|
|||||||
// parameter to the URL
|
// parameter to the URL
|
||||||
$.ajax({url: url, dataType: 'jsonp', jsonp: false});
|
$.ajax({url: url, dataType: 'jsonp', jsonp: false});
|
||||||
},
|
},
|
||||||
strategy: ol.loadingstrategy.tile(new ol.tilegrid.XYZ({
|
strategy: ol.loadingstrategy.tile(ol.tilegrid.createXYZ({
|
||||||
maxZoom: 19
|
maxZoom: 19
|
||||||
}))
|
}))
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ var map = new ol.Map({
|
|||||||
target: 'map',
|
target: 'map',
|
||||||
layers: [
|
layers: [
|
||||||
new ol.layer.Tile({
|
new ol.layer.Tile({
|
||||||
/* ol.source.XYZ and ol.tilegrid.XYZ have no resolutions config */
|
/* ol.source.XYZ and ol.tilegrid.TileGrid have no resolutions config */
|
||||||
source: new ol.source.TileImage({
|
source: new ol.source.TileImage({
|
||||||
attributions: [attribution],
|
attributions: [attribution],
|
||||||
tileUrlFunction: function(tileCoord, pixelRatio, projection) {
|
tileUrlFunction: function(tileCoord, pixelRatio, projection) {
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ goog.require('ol.proj');
|
|||||||
goog.require('ol.source.State');
|
goog.require('ol.source.State');
|
||||||
goog.require('ol.source.TileImage');
|
goog.require('ol.source.TileImage');
|
||||||
goog.require('ol.tilecoord');
|
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 maxZoom = this.maxZoom_ == -1 ? resource.zoomMax : this.maxZoom_;
|
||||||
|
|
||||||
var sourceProjection = this.getProjection();
|
var sourceProjection = this.getProjection();
|
||||||
var tileGrid = new ol.tilegrid.XYZ({
|
var extent = ol.tilegrid.extentFromProjection(sourceProjection);
|
||||||
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,
|
minZoom: resource.zoomMin,
|
||||||
maxZoom: maxZoom,
|
maxZoom: maxZoom,
|
||||||
tileSize: resource.imageWidth == resource.imageHeight ?
|
tileSize: tileSize
|
||||||
resource.imageWidth : [resource.imageWidth, resource.imageHeight]
|
|
||||||
});
|
});
|
||||||
this.tileGrid = tileGrid;
|
this.tileGrid = tileGrid;
|
||||||
|
|
||||||
var culture = this.culture_;
|
var culture = this.culture_;
|
||||||
this.tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform(
|
this.tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform(
|
||||||
tileGrid.createTileCoordTransform(),
|
ol.tilegrid.createOriginTopLeftTileCoordTransform(tileGrid),
|
||||||
ol.TileUrlFunction.createFromTileUrlFunctions(
|
ol.TileUrlFunction.createFromTileUrlFunctions(
|
||||||
goog.array.map(
|
goog.array.map(
|
||||||
resource.imageUrlSubdomains,
|
resource.imageUrlSubdomains,
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ goog.require('ol.extent');
|
|||||||
goog.require('ol.proj');
|
goog.require('ol.proj');
|
||||||
goog.require('ol.source.State');
|
goog.require('ol.source.State');
|
||||||
goog.require('ol.source.TileImage');
|
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 minZoom = tileJSON.minzoom || 0;
|
||||||
var maxZoom = tileJSON.maxzoom || 22;
|
var maxZoom = tileJSON.maxzoom || 22;
|
||||||
var tileGrid = new ol.tilegrid.XYZ({
|
var tileGrid = ol.tilegrid.createXYZ({
|
||||||
extent: ol.tilegrid.extentFromProjection(sourceProjection),
|
extent: ol.tilegrid.extentFromProjection(sourceProjection),
|
||||||
maxZoom: maxZoom,
|
maxZoom: maxZoom,
|
||||||
minZoom: minZoom
|
minZoom: minZoom
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ goog.require('ol.extent');
|
|||||||
goog.require('ol.proj');
|
goog.require('ol.proj');
|
||||||
goog.require('ol.source.State');
|
goog.require('ol.source.State');
|
||||||
goog.require('ol.source.Tile');
|
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 minZoom = tileJSON.minzoom || 0;
|
||||||
var maxZoom = tileJSON.maxzoom || 22;
|
var maxZoom = tileJSON.maxzoom || 22;
|
||||||
var tileGrid = new ol.tilegrid.XYZ({
|
var tileGrid = ol.tilegrid.createXYZ({
|
||||||
extent: ol.tilegrid.extentFromProjection(sourceProjection),
|
extent: ol.tilegrid.extentFromProjection(sourceProjection),
|
||||||
maxZoom: maxZoom,
|
maxZoom: maxZoom,
|
||||||
minZoom: minZoom
|
minZoom: minZoom
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ goog.provide('ol.source.XYZ');
|
|||||||
goog.require('ol.Attribution');
|
goog.require('ol.Attribution');
|
||||||
goog.require('ol.TileUrlFunction');
|
goog.require('ol.TileUrlFunction');
|
||||||
goog.require('ol.source.TileImage');
|
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) ?
|
var projection = goog.isDef(options.projection) ?
|
||||||
options.projection : 'EPSG:3857';
|
options.projection : 'EPSG:3857';
|
||||||
|
|
||||||
var tileGrid = new ol.tilegrid.XYZ({
|
var tileGrid = ol.tilegrid.createXYZ({
|
||||||
extent: ol.tilegrid.extentFromProjection(projection),
|
extent: ol.tilegrid.extentFromProjection(projection),
|
||||||
maxZoom: options.maxZoom,
|
maxZoom: options.maxZoom,
|
||||||
tileSize: options.tileSize
|
tileSize: options.tileSize
|
||||||
@@ -42,7 +41,8 @@ ol.source.XYZ = function(options) {
|
|||||||
* @private
|
* @private
|
||||||
* @type {ol.TileCoordTransformType}
|
* @type {ol.TileCoordTransformType}
|
||||||
*/
|
*/
|
||||||
this.tileCoordTransform_ = tileGrid.createTileCoordTransform();
|
this.tileCoordTransform_ =
|
||||||
|
ol.tilegrid.createOriginTopLeftTileCoordTransform(tileGrid);
|
||||||
|
|
||||||
if (goog.isDef(options.tileUrlFunction)) {
|
if (goog.isDef(options.tileUrlFunction)) {
|
||||||
this.setTileUrlFunction(options.tileUrlFunction);
|
this.setTileUrlFunction(options.tileUrlFunction);
|
||||||
|
|||||||
@@ -534,36 +534,48 @@ ol.tilegrid.getForProjection = function(projection) {
|
|||||||
*/
|
*/
|
||||||
ol.tilegrid.createForExtent =
|
ol.tilegrid.createForExtent =
|
||||||
function(extent, opt_maxZoom, opt_tileSize, opt_corner) {
|
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) ?
|
var corner = goog.isDef(opt_corner) ?
|
||||||
opt_corner : ol.extent.Corner.BOTTOM_LEFT;
|
opt_corner : ol.extent.Corner.BOTTOM_LEFT;
|
||||||
|
|
||||||
var resolutions = ol.tilegrid.resolutionsFromExtent(
|
var resolutions = ol.tilegrid.resolutionsFromExtent(
|
||||||
extent, opt_maxZoom, ol.size.toSize(tileSize));
|
extent, opt_maxZoom, opt_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];
|
|
||||||
}
|
|
||||||
|
|
||||||
return new ol.tilegrid.TileGrid({
|
return new ol.tilegrid.TileGrid({
|
||||||
|
extent: extent,
|
||||||
origin: ol.extent.getCorner(extent, corner),
|
origin: ol.extent.getCorner(extent, corner),
|
||||||
resolutions: resolutions,
|
resolutions: resolutions,
|
||||||
tileSize: goog.isDef(opt_tileSize) ? opt_tileSize : ol.DEFAULT_TILE_SIZE,
|
tileSize: opt_tileSize
|
||||||
widths: widths
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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.
|
* Create a resolutions array from an extent. A zoom factor of 2 is assumed.
|
||||||
* @param {ol.Extent} extent Extent.
|
* @param {ol.Extent} extent Extent.
|
||||||
* @param {number=} opt_maxZoom Maximum zoom level (default is
|
* @param {number=} opt_maxZoom Maximum zoom level (default is
|
||||||
* ol.DEFAULT_MAX_ZOOM).
|
* 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.
|
* @return {!Array.<number>} Resolutions array.
|
||||||
*/
|
*/
|
||||||
ol.tilegrid.resolutionsFromExtent =
|
ol.tilegrid.resolutionsFromExtent =
|
||||||
@@ -574,8 +586,8 @@ ol.tilegrid.resolutionsFromExtent =
|
|||||||
var height = ol.extent.getHeight(extent);
|
var height = ol.extent.getHeight(extent);
|
||||||
var width = ol.extent.getWidth(extent);
|
var width = ol.extent.getWidth(extent);
|
||||||
|
|
||||||
var tileSize = goog.isDef(opt_tileSize) ?
|
var tileSize = ol.size.toSize(goog.isDef(opt_tileSize) ?
|
||||||
opt_tileSize : ol.size.toSize(ol.DEFAULT_TILE_SIZE);
|
opt_tileSize : ol.DEFAULT_TILE_SIZE);
|
||||||
var maxResolution = Math.max(
|
var maxResolution = Math.max(
|
||||||
width / tileSize[0], height / tileSize[1]);
|
width / tileSize[0], height / tileSize[1]);
|
||||||
|
|
||||||
@@ -643,12 +655,8 @@ ol.tilegrid.createOriginTopLeftTileCoordTransform = function(tileGrid) {
|
|||||||
}
|
}
|
||||||
var z = tileCoord[0];
|
var z = tileCoord[0];
|
||||||
var fullTileRange = tileGrid.getFullTileRange(z);
|
var fullTileRange = tileGrid.getFullTileRange(z);
|
||||||
var height;
|
var height = (goog.isNull(fullTileRange) || fullTileRange.minY < 0) ?
|
||||||
if (goog.isNull(fullTileRange) || fullTileRange.minY < 0) {
|
0 : fullTileRange.getHeight();
|
||||||
height = 0;
|
|
||||||
} else {
|
|
||||||
height = fullTileRange.getHeight();
|
|
||||||
}
|
|
||||||
return ol.tilecoord.createOrUpdate(
|
return ol.tilecoord.createOrUpdate(
|
||||||
z, tileCoord[1], height - tileCoord[2] - 1, opt_tileCoord);
|
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;
|
|
||||||
};
|
|
||||||
@@ -442,6 +442,32 @@ describe('ol.tilegrid.TileGrid', function() {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('createXYZ()', function() {
|
||||||
|
|
||||||
|
it('uses defaults', function() {
|
||||||
|
var tileGrid = ol.tilegrid.createXYZ();
|
||||||
|
expect(tileGrid.getExtent()).to.eql(
|
||||||
|
ol.proj.get('EPSG:3857').getExtent());
|
||||||
|
expect(tileGrid.getMinZoom()).to.equal(0);
|
||||||
|
expect(tileGrid.getMaxZoom()).to.equal(ol.DEFAULT_MAX_ZOOM);
|
||||||
|
expect(tileGrid.getTileSize()).to.equal(ol.DEFAULT_TILE_SIZE);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('respects configuration options', function() {
|
||||||
|
var tileGrid = ol.tilegrid.createXYZ({
|
||||||
|
extent: [10, 20, 30, 40],
|
||||||
|
minZoom: 1,
|
||||||
|
maxZoom: 2,
|
||||||
|
tileSize: 128
|
||||||
|
});
|
||||||
|
expect(tileGrid.getExtent()).to.eql([10, 20, 30, 40]);
|
||||||
|
expect(tileGrid.getMinZoom()).to.equal(1);
|
||||||
|
expect(tileGrid.getMaxZoom()).to.equal(2);
|
||||||
|
expect(tileGrid.getTileSize()).to.equal(128);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
describe('getForProjection', function() {
|
describe('getForProjection', function() {
|
||||||
|
|
||||||
it('gets the default tile grid for a projection', function() {
|
it('gets the default tile grid for a projection', function() {
|
||||||
|
|||||||
@@ -1,168 +0,0 @@
|
|||||||
goog.provide('ol.test.tilegrid.XYZ');
|
|
||||||
|
|
||||||
|
|
||||||
describe('ol.tilegrid.XYZ', function() {
|
|
||||||
|
|
||||||
var xyzTileGrid;
|
|
||||||
beforeEach(function() {
|
|
||||||
xyzTileGrid = new ol.tilegrid.XYZ({
|
|
||||||
maxZoom: 22
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('#getTileCoordChildTileRange()', function() {
|
|
||||||
|
|
||||||
it('returns the tile range for one zoom level deeper', function() {
|
|
||||||
var range;
|
|
||||||
|
|
||||||
range = xyzTileGrid.getTileCoordChildTileRange([0, 0, 0]);
|
|
||||||
expect(range.minX).to.be(0);
|
|
||||||
expect(range.maxX).to.be(1);
|
|
||||||
expect(range.minY).to.be(0);
|
|
||||||
expect(range.maxY).to.be(1);
|
|
||||||
|
|
||||||
range = xyzTileGrid.getTileCoordChildTileRange([0, 1, 0]);
|
|
||||||
expect(range.minX).to.be(2);
|
|
||||||
expect(range.maxX).to.be(3);
|
|
||||||
expect(range.minY).to.be(0);
|
|
||||||
expect(range.maxY).to.be(1);
|
|
||||||
|
|
||||||
range = xyzTileGrid.getTileCoordChildTileRange([0, 0, 1]);
|
|
||||||
expect(range.minX).to.be(0);
|
|
||||||
expect(range.maxX).to.be(1);
|
|
||||||
expect(range.minY).to.be(2);
|
|
||||||
expect(range.maxY).to.be(3);
|
|
||||||
|
|
||||||
range = xyzTileGrid.getTileCoordChildTileRange([0, -1, 0]);
|
|
||||||
expect(range.minX).to.be(-2);
|
|
||||||
expect(range.maxX).to.be(-1);
|
|
||||||
expect(range.minY).to.be(0);
|
|
||||||
expect(range.maxY).to.be(1);
|
|
||||||
|
|
||||||
range = xyzTileGrid.getTileCoordChildTileRange([0, 0, -1]);
|
|
||||||
expect(range.minX).to.be(0);
|
|
||||||
expect(range.maxX).to.be(1);
|
|
||||||
expect(range.minY).to.be(-2);
|
|
||||||
expect(range.maxY).to.be(-1);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('returns null for z > maxZoom', function() {
|
|
||||||
var max = xyzTileGrid.maxZoom;
|
|
||||||
var range = xyzTileGrid.getTileCoordChildTileRange([max + 1, 0, 0]);
|
|
||||||
expect(range).to.be(null);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('is like ol.tilegrid.TileGrid#getTileCoordChildTileRange()', function() {
|
|
||||||
var superMethod = ol.tilegrid.TileGrid.prototype
|
|
||||||
.getTileCoordChildTileRange.bind(xyzTileGrid);
|
|
||||||
|
|
||||||
var coord, selfRange, superRange;
|
|
||||||
|
|
||||||
coord = [0, 0, 0];
|
|
||||||
selfRange = xyzTileGrid.getTileCoordChildTileRange(coord);
|
|
||||||
superRange = superMethod(coord);
|
|
||||||
expect(selfRange.minX).to.be(superRange.minX);
|
|
||||||
expect(selfRange.maxX).to.be(superRange.maxX);
|
|
||||||
expect(selfRange.minY).to.be(superRange.minY);
|
|
||||||
expect(selfRange.maxY).to.be(superRange.maxY);
|
|
||||||
|
|
||||||
coord = [1, 2, 3];
|
|
||||||
selfRange = xyzTileGrid.getTileCoordChildTileRange(coord);
|
|
||||||
superRange = superMethod(coord);
|
|
||||||
expect(selfRange.minX).to.be(superRange.minX);
|
|
||||||
expect(selfRange.maxX).to.be(superRange.maxX);
|
|
||||||
expect(selfRange.minY).to.be(superRange.minY);
|
|
||||||
expect(selfRange.maxY).to.be(superRange.maxY);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('forEachTileCoordParentTileRange', function() {
|
|
||||||
|
|
||||||
it('iterates as expected', function() {
|
|
||||||
|
|
||||||
var tileCoord = [5, 11, 21];
|
|
||||||
var zs = [], tileRanges = [];
|
|
||||||
xyzTileGrid.forEachTileCoordParentTileRange(
|
|
||||||
tileCoord,
|
|
||||||
function(z, tileRange) {
|
|
||||||
zs.push(z);
|
|
||||||
tileRanges.push(new ol.TileRange(
|
|
||||||
tileRange.minX, tileRange.maxX,
|
|
||||||
tileRange.minY, tileRange.maxY));
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(zs.length).to.eql(5);
|
|
||||||
expect(tileRanges.length).to.eql(5);
|
|
||||||
|
|
||||||
expect(zs[0]).to.eql(4);
|
|
||||||
expect(tileRanges[0].minX).to.eql(5);
|
|
||||||
expect(tileRanges[0].maxX).to.eql(5);
|
|
||||||
expect(tileRanges[0].minY).to.eql(10);
|
|
||||||
expect(tileRanges[0].maxY).to.eql(10);
|
|
||||||
|
|
||||||
expect(zs[1]).to.eql(3);
|
|
||||||
expect(tileRanges[1].minX).to.eql(2);
|
|
||||||
expect(tileRanges[1].maxX).to.eql(2);
|
|
||||||
expect(tileRanges[1].minY).to.eql(5);
|
|
||||||
expect(tileRanges[1].maxY).to.eql(5);
|
|
||||||
|
|
||||||
expect(zs[2]).to.eql(2);
|
|
||||||
expect(tileRanges[2].minX).to.eql(1);
|
|
||||||
expect(tileRanges[2].maxX).to.eql(1);
|
|
||||||
expect(tileRanges[2].minY).to.eql(2);
|
|
||||||
expect(tileRanges[2].maxY).to.eql(2);
|
|
||||||
|
|
||||||
expect(zs[3]).to.eql(1);
|
|
||||||
expect(tileRanges[3].minX).to.eql(0);
|
|
||||||
expect(tileRanges[3].maxX).to.eql(0);
|
|
||||||
expect(tileRanges[3].minY).to.eql(1);
|
|
||||||
expect(tileRanges[3].maxY).to.eql(1);
|
|
||||||
|
|
||||||
expect(zs[4]).to.eql(0);
|
|
||||||
expect(tileRanges[4].minX).to.eql(0);
|
|
||||||
expect(tileRanges[4].maxX).to.eql(0);
|
|
||||||
expect(tileRanges[4].minY).to.eql(0);
|
|
||||||
expect(tileRanges[4].maxY).to.eql(0);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('getResolution', function() {
|
|
||||||
|
|
||||||
it('returns the correct resolution at the equator', function() {
|
|
||||||
// @see http://msdn.microsoft.com/en-us/library/aa940990.aspx
|
|
||||||
expect(xyzTileGrid.getResolution(0)).to.roughlyEqual(156543.04, 1e-2);
|
|
||||||
expect(xyzTileGrid.getResolution(1)).to.roughlyEqual(78271.52, 1e-2);
|
|
||||||
expect(xyzTileGrid.getResolution(2)).to.roughlyEqual(39135.76, 1e-2);
|
|
||||||
expect(xyzTileGrid.getResolution(3)).to.roughlyEqual(19567.88, 1e-2);
|
|
||||||
expect(xyzTileGrid.getResolution(4)).to.roughlyEqual(9783.94, 1e-2);
|
|
||||||
expect(xyzTileGrid.getResolution(5)).to.roughlyEqual(4891.97, 1e-2);
|
|
||||||
expect(xyzTileGrid.getResolution(6)).to.roughlyEqual(2445.98, 1e-2);
|
|
||||||
expect(xyzTileGrid.getResolution(7)).to.roughlyEqual(1222.99, 1e-2);
|
|
||||||
expect(xyzTileGrid.getResolution(8)).to.roughlyEqual(611.50, 1e-2);
|
|
||||||
expect(xyzTileGrid.getResolution(9)).to.roughlyEqual(305.75, 1e-2);
|
|
||||||
expect(xyzTileGrid.getResolution(10)).to.roughlyEqual(152.87, 1e-2);
|
|
||||||
expect(xyzTileGrid.getResolution(11)).to.roughlyEqual(76.44, 1e-2);
|
|
||||||
expect(xyzTileGrid.getResolution(12)).to.roughlyEqual(38.22, 1e-2);
|
|
||||||
expect(xyzTileGrid.getResolution(13)).to.roughlyEqual(19.11, 1e-2);
|
|
||||||
expect(xyzTileGrid.getResolution(14)).to.roughlyEqual(9.55, 1e-2);
|
|
||||||
expect(xyzTileGrid.getResolution(15)).to.roughlyEqual(4.78, 1e-2);
|
|
||||||
expect(xyzTileGrid.getResolution(16)).to.roughlyEqual(2.39, 1e-2);
|
|
||||||
expect(xyzTileGrid.getResolution(17)).to.roughlyEqual(1.19, 1e-2);
|
|
||||||
expect(xyzTileGrid.getResolution(18)).to.roughlyEqual(0.60, 1e-2);
|
|
||||||
expect(xyzTileGrid.getResolution(19)).to.roughlyEqual(0.30, 1e-2);
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
goog.require('ol.TileCoord');
|
|
||||||
goog.require('ol.TileRange');
|
|
||||||
goog.require('ol.tilegrid.TileGrid');
|
|
||||||
goog.require('ol.tilegrid.XYZ');
|
|
||||||
@@ -55,8 +55,8 @@ describe('ol.rendering.layer.Image', function() {
|
|||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
source = new ol.source.ImageStatic({
|
source = new ol.source.ImageStatic({
|
||||||
url: 'spec/ol/data/tiles/osm/5/5/12.png',
|
url: 'spec/ol/data/tiles/osm/5/5/12.png',
|
||||||
imageExtent: new ol.tilegrid.XYZ({}).getTileCoordExtent(
|
imageExtent: ol.tilegrid.createXYZ().getTileCoordExtent(
|
||||||
[5, 5, -12 - 1]),
|
[5, 5, 32 - 12 - 1]),
|
||||||
projection: ol.proj.get('EPSG:3857')
|
projection: ol.proj.get('EPSG:3857')
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -91,4 +91,3 @@ goog.require('ol.Map');
|
|||||||
goog.require('ol.View');
|
goog.require('ol.View');
|
||||||
goog.require('ol.layer.Image');
|
goog.require('ol.layer.Image');
|
||||||
goog.require('ol.source.ImageStatic');
|
goog.require('ol.source.ImageStatic');
|
||||||
goog.require('ol.tilegrid.XYZ');
|
|
||||||
|
|||||||
Reference in New Issue
Block a user