Merge pull request #509 from twpayne/use-high-resolution-tiles

Use high resolution tiles
This commit is contained in:
Tom Payne
2013-04-09 06:34:45 -07:00
7 changed files with 68 additions and 12 deletions

View File

@@ -201,7 +201,7 @@ ol.renderer.canvas.TileLayer.prototype.renderFrame =
tilesToDrawByZ, getTileIfLoaded);
var allTilesLoaded = true;
var tile, tileState, x, y;
var childTileRange, fullyLoaded, tile, tileState, x, y;
for (x = tileRange.minX; x <= tileRange.maxX; ++x) {
for (y = tileRange.minY; y <= tileRange.maxY; ++y) {
@@ -215,7 +215,14 @@ ol.renderer.canvas.TileLayer.prototype.renderFrame =
}
allTilesLoaded = false;
tileGrid.forEachTileCoordParentTileRange(tile.tileCoord, findLoadedTiles);
fullyLoaded = tileGrid.forEachTileCoordParentTileRange(
tile.tileCoord, findLoadedTiles);
if (!fullyLoaded) {
childTileRange = tileGrid.getTileCoordChildTileRange(tile.tileCoord);
if (!goog.isNull(childTileRange)) {
findLoadedTiles(z + 1, childTileRange);
}
}
}
}

View File

@@ -115,7 +115,7 @@ ol.renderer.dom.TileLayer.prototype.renderFrame =
tilesToDrawByZ, getTileIfLoaded);
var allTilesLoaded = true;
var tile, tileState, x, y;
var childTileRange, fullyLoaded, tile, tileState, x, y;
for (x = tileRange.minX; x <= tileRange.maxX; ++x) {
for (y = tileRange.minY; y <= tileRange.maxY; ++y) {
@@ -130,7 +130,14 @@ ol.renderer.dom.TileLayer.prototype.renderFrame =
}
allTilesLoaded = false;
tileGrid.forEachTileCoordParentTileRange(tile.tileCoord, findLoadedTiles);
fullyLoaded = tileGrid.forEachTileCoordParentTileRange(
tile.tileCoord, findLoadedTiles);
if (!fullyLoaded) {
childTileRange = tileGrid.getTileCoordChildTileRange(tile.tileCoord);
if (!goog.isNull(childTileRange)) {
findLoadedTiles(z + 1, childTileRange);
}
}
}

View File

@@ -199,7 +199,7 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame =
tilesToDrawByZ, getTileIfLoaded);
var allTilesLoaded = true;
var tile, tileState, x, y;
var childTileRange, fullyLoaded, tile, tileState, x, y;
for (x = tileRange.minX; x <= tileRange.maxX; ++x) {
for (y = tileRange.minY; y <= tileRange.maxY; ++y) {
@@ -216,8 +216,14 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame =
}
allTilesLoaded = false;
tileGrid.forEachTileCoordParentTileRange(
fullyLoaded = tileGrid.forEachTileCoordParentTileRange(
tile.tileCoord, findLoadedTiles);
if (!fullyLoaded) {
childTileRange = tileGrid.getTileCoordChildTileRange(tile.tileCoord);
if (!goog.isNull(childTileRange)) {
findLoadedTiles(z + 1, childTileRange);
}
}
}

View File

@@ -96,6 +96,7 @@ ol.tilegrid.TileGrid = function(options) {
* @param {ol.TileCoord} tileCoord Tile coordinate.
* @param {function(this: T, number, ol.TileRange): boolean} callback Callback.
* @param {T=} opt_obj Object.
* @return {boolean} Callback succeeded.
* @template T
*/
ol.tilegrid.TileGrid.prototype.forEachTileCoordParentTileRange =
@@ -105,10 +106,11 @@ ol.tilegrid.TileGrid.prototype.forEachTileCoordParentTileRange =
while (z >= 0) {
if (callback.call(
opt_obj, z, this.getTileRangeForExtentAndZ(tileCoordExtent, z))) {
return;
return true;
}
--z;
}
return false;
};
@@ -164,6 +166,21 @@ ol.tilegrid.TileGrid.prototype.getResolutions = function() {
};
/**
* @param {ol.TileCoord} tileCoord Tile coordinate.
* @return {ol.TileRange} Tile range.
*/
ol.tilegrid.TileGrid.prototype.getTileCoordChildTileRange =
function(tileCoord) {
if (tileCoord.z < this.resolutions_.length) {
var tileCoordExtent = this.getTileCoordExtent(tileCoord);
return this.getTileRangeForExtentAndZ(tileCoordExtent, tileCoord.z + 1);
} else {
return null;
}
};
/**
* @param {number} z Z.
* @param {ol.TileRange} tileRange Tile range.

View File

@@ -15,10 +15,16 @@ goog.require('ol.tilegrid.TileGrid');
*/
ol.tilegrid.XYZ = function(options) {
var resolutions = new Array(options.maxZoom + 1);
/**
* @private
* @type {number}
*/
this.maxZoom_ = options.maxZoom;
var resolutions = new Array(this.maxZoom_ + 1);
var z;
var size = 2 * ol.projection.EPSG3857.HALF_SIZE / ol.DEFAULT_TILE_SIZE;
for (z = 0; z <= options.maxZoom; ++z) {
for (z = 0; z <= this.maxZoom_; ++z) {
resolutions[z] = size / Math.pow(2, z);
}
@@ -33,6 +39,20 @@ ol.tilegrid.XYZ = function(options) {
goog.inherits(ol.tilegrid.XYZ, ol.tilegrid.TileGrid);
/**
* @inheritDoc
*/
ol.tilegrid.XYZ.prototype.getTileCoordChildTileRange = function(tileCoord) {
if (tileCoord.z < this.maxZoom_) {
return new ol.TileRange(
tileCoord.x << 1, tileCoord.y << 1,
tileCoord.x + 1 << 1, tileCoord.y + 1 << 1);
} else {
return null;
}
};
/**
* @inheritDoc
*/
@@ -44,7 +64,8 @@ ol.tilegrid.XYZ.prototype.forEachTileCoordParentTileRange =
tileRange.minX = tileRange.maxX >>= 1;
tileRange.minY = tileRange.maxY >>= 1;
if (callback.call(opt_obj, z, tileRange)) {
break;
return true;
}
}
return false;
};