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:
Tim Schaub
2014-08-18 23:26:36 -06:00
parent e97f79b4ab
commit ee487ca308
5 changed files with 25 additions and 22 deletions

View File

@@ -89,7 +89,9 @@ ol.source.BingMaps.prototype.handleImageryMetadataResponse =
var resource = response.resourceSets[0].resources[0];
goog.asserts.assert(resource.imageWidth == resource.imageHeight);
var sourceProjection = this.getProjection();
var tileGrid = new ol.tilegrid.XYZ({
extent: ol.tilegrid.extentFromProjection(sourceProjection),
minZoom: resource.zoomMin,
maxZoom: resource.zoomMax,
tileSize: resource.imageWidth
@@ -97,7 +99,6 @@ ol.source.BingMaps.prototype.handleImageryMetadataResponse =
this.tileGrid = tileGrid;
var culture = this.culture_;
var sourceProjection = this.getProjection();
this.tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform(
tileGrid.createTileCoordTransform(),
ol.TileUrlFunction.createFromTileUrlFunctions(

View File

@@ -54,10 +54,11 @@ ol.source.TileJSON.prototype.handleTileJSONResponse = function(tileJSON) {
var epsg4326Projection = ol.proj.get('EPSG:4326');
var sourceProjection = this.getProjection();
var extent;
if (goog.isDef(tileJSON.bounds)) {
var transform = ol.proj.getTransformFromProjections(
epsg4326Projection, this.getProjection());
epsg4326Projection, sourceProjection);
extent = ol.extent.applyTransform(tileJSON.bounds, transform);
}
@@ -67,6 +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({
extent: ol.tilegrid.extentFromProjection(sourceProjection),
maxZoom: maxZoom,
minZoom: minZoom
});

View File

@@ -17,13 +17,12 @@ goog.require('ol.tilegrid.XYZ');
* @api
*/
ol.source.XYZ = function(options) {
var projection = goog.isDef(options.projection) ?
options.projection : 'EPSG:3857';
var tileGrid = new ol.tilegrid.XYZ({
maxZoom: options.maxZoom,
projection: options.projection
extent: ol.tilegrid.extentFromProjection(projection),
maxZoom: options.maxZoom
});
goog.base(this, {

View File

@@ -7,6 +7,7 @@ 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.tilecoord');
goog.require('ol.tilegrid.TileGrid');
@@ -23,19 +24,16 @@ goog.require('ol.tilegrid.TileGrid');
* @api
*/
ol.tilegrid.XYZ = function(options) {
var projection = goog.isDef(options.projection) ?
options.projection : 'EPSG:3857';
var extent = ol.tilegrid.extentFromProjection(projection);
// TODO: accept a tileSize option
var tileSize = ol.DEFAULT_TILE_SIZE;
var extent = goog.isDef(options.extent) ?
options.extent : ol.proj.EPSG3857.EXTENT;
var resolutions = ol.tilegrid.resolutionsFromExtent(
extent, options.maxZoom, tileSize);
var origin = ol.extent.getCorner(extent, ol.extent.Corner.TOP_LEFT);
goog.base(this, {
minZoom: options.minZoom,
origin: origin,
origin: ol.extent.getCorner(extent, ol.extent.Corner.TOP_LEFT),
resolutions: resolutions,
tileSize: tileSize
});