Merge pull request #509 from twpayne/use-high-resolution-tiles
Use high resolution tiles
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user