Merge pull request #509 from twpayne/use-high-resolution-tiles
Use high resolution tiles
This commit is contained in:
@@ -8,7 +8,6 @@ goog.require('ol.source.OpenStreetMap');
|
|||||||
var map = new ol.Map({
|
var map = new ol.Map({
|
||||||
layers: [
|
layers: [
|
||||||
new ol.layer.TileLayer({
|
new ol.layer.TileLayer({
|
||||||
preload: 4,
|
|
||||||
source: new ol.source.OpenStreetMap()
|
source: new ol.source.OpenStreetMap()
|
||||||
})
|
})
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ goog.require('ol.source.Stamen');
|
|||||||
var map = new ol.Map({
|
var map = new ol.Map({
|
||||||
layers: [
|
layers: [
|
||||||
new ol.layer.TileLayer({
|
new ol.layer.TileLayer({
|
||||||
preload: 4,
|
|
||||||
source: new ol.source.Stamen({
|
source: new ol.source.Stamen({
|
||||||
layer: 'watercolor'
|
layer: 'watercolor'
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -201,7 +201,7 @@ ol.renderer.canvas.TileLayer.prototype.renderFrame =
|
|||||||
tilesToDrawByZ, getTileIfLoaded);
|
tilesToDrawByZ, getTileIfLoaded);
|
||||||
|
|
||||||
var allTilesLoaded = true;
|
var allTilesLoaded = true;
|
||||||
var tile, tileState, x, y;
|
var childTileRange, fullyLoaded, tile, tileState, x, y;
|
||||||
for (x = tileRange.minX; x <= tileRange.maxX; ++x) {
|
for (x = tileRange.minX; x <= tileRange.maxX; ++x) {
|
||||||
for (y = tileRange.minY; y <= tileRange.maxY; ++y) {
|
for (y = tileRange.minY; y <= tileRange.maxY; ++y) {
|
||||||
|
|
||||||
@@ -215,7 +215,14 @@ ol.renderer.canvas.TileLayer.prototype.renderFrame =
|
|||||||
}
|
}
|
||||||
|
|
||||||
allTilesLoaded = false;
|
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);
|
tilesToDrawByZ, getTileIfLoaded);
|
||||||
|
|
||||||
var allTilesLoaded = true;
|
var allTilesLoaded = true;
|
||||||
var tile, tileState, x, y;
|
var childTileRange, fullyLoaded, tile, tileState, x, y;
|
||||||
for (x = tileRange.minX; x <= tileRange.maxX; ++x) {
|
for (x = tileRange.minX; x <= tileRange.maxX; ++x) {
|
||||||
for (y = tileRange.minY; y <= tileRange.maxY; ++y) {
|
for (y = tileRange.minY; y <= tileRange.maxY; ++y) {
|
||||||
|
|
||||||
@@ -130,7 +130,14 @@ ol.renderer.dom.TileLayer.prototype.renderFrame =
|
|||||||
}
|
}
|
||||||
|
|
||||||
allTilesLoaded = false;
|
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);
|
tilesToDrawByZ, getTileIfLoaded);
|
||||||
|
|
||||||
var allTilesLoaded = true;
|
var allTilesLoaded = true;
|
||||||
var tile, tileState, x, y;
|
var childTileRange, fullyLoaded, tile, tileState, x, y;
|
||||||
for (x = tileRange.minX; x <= tileRange.maxX; ++x) {
|
for (x = tileRange.minX; x <= tileRange.maxX; ++x) {
|
||||||
for (y = tileRange.minY; y <= tileRange.maxY; ++y) {
|
for (y = tileRange.minY; y <= tileRange.maxY; ++y) {
|
||||||
|
|
||||||
@@ -216,8 +216,14 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame =
|
|||||||
}
|
}
|
||||||
|
|
||||||
allTilesLoaded = false;
|
allTilesLoaded = false;
|
||||||
tileGrid.forEachTileCoordParentTileRange(
|
fullyLoaded = tileGrid.forEachTileCoordParentTileRange(
|
||||||
tile.tileCoord, findLoadedTiles);
|
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 {ol.TileCoord} tileCoord Tile coordinate.
|
||||||
* @param {function(this: T, number, ol.TileRange): boolean} callback Callback.
|
* @param {function(this: T, number, ol.TileRange): boolean} callback Callback.
|
||||||
* @param {T=} opt_obj Object.
|
* @param {T=} opt_obj Object.
|
||||||
|
* @return {boolean} Callback succeeded.
|
||||||
* @template T
|
* @template T
|
||||||
*/
|
*/
|
||||||
ol.tilegrid.TileGrid.prototype.forEachTileCoordParentTileRange =
|
ol.tilegrid.TileGrid.prototype.forEachTileCoordParentTileRange =
|
||||||
@@ -105,10 +106,11 @@ ol.tilegrid.TileGrid.prototype.forEachTileCoordParentTileRange =
|
|||||||
while (z >= 0) {
|
while (z >= 0) {
|
||||||
if (callback.call(
|
if (callback.call(
|
||||||
opt_obj, z, this.getTileRangeForExtentAndZ(tileCoordExtent, z))) {
|
opt_obj, z, this.getTileRangeForExtentAndZ(tileCoordExtent, z))) {
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
--z;
|
--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 {number} z Z.
|
||||||
* @param {ol.TileRange} tileRange Tile range.
|
* @param {ol.TileRange} tileRange Tile range.
|
||||||
|
|||||||
@@ -15,10 +15,16 @@ goog.require('ol.tilegrid.TileGrid');
|
|||||||
*/
|
*/
|
||||||
ol.tilegrid.XYZ = function(options) {
|
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 z;
|
||||||
var size = 2 * ol.projection.EPSG3857.HALF_SIZE / ol.DEFAULT_TILE_SIZE;
|
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);
|
resolutions[z] = size / Math.pow(2, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,6 +39,20 @@ ol.tilegrid.XYZ = function(options) {
|
|||||||
goog.inherits(ol.tilegrid.XYZ, ol.tilegrid.TileGrid);
|
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
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
@@ -44,7 +64,8 @@ ol.tilegrid.XYZ.prototype.forEachTileCoordParentTileRange =
|
|||||||
tileRange.minX = tileRange.maxX >>= 1;
|
tileRange.minX = tileRange.maxX >>= 1;
|
||||||
tileRange.minY = tileRange.maxY >>= 1;
|
tileRange.minY = tileRange.maxY >>= 1;
|
||||||
if (callback.call(opt_obj, z, tileRange)) {
|
if (callback.call(opt_obj, z, tileRange)) {
|
||||||
break;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user