Move closure out of loop, and use loop rather than forEachTileCoord
This commit is contained in:
@@ -85,17 +85,41 @@ ol.renderer.dom.TileLayer.prototype.renderFrame =
|
|||||||
|
|
||||||
var view2DState = frameState.view2DState;
|
var view2DState = frameState.view2DState;
|
||||||
var z = tileGrid.getZForResolution(view2DState.resolution);
|
var z = tileGrid.getZForResolution(view2DState.resolution);
|
||||||
|
var tileRange = tileGrid.getTileRangeForExtentAndResolution(
|
||||||
|
frameState.extent, view2DState.resolution);
|
||||||
var tileResolution = tileGrid.getResolution(z);
|
var tileResolution = tileGrid.getResolution(z);
|
||||||
|
|
||||||
/** @type {Object.<number, Object.<string, ol.Tile>>} */
|
/** @type {Object.<number, Object.<string, ol.Tile>>} */
|
||||||
var tilesToDrawByZ = {};
|
var tilesToDrawByZ = {};
|
||||||
|
tilesToDrawByZ[z] = {};
|
||||||
|
|
||||||
var tileRange = tileGrid.getTileRangeForExtentAndResolution(
|
var findInterimTiles = function(z, tileRange) {
|
||||||
frameState.extent, view2DState.resolution);
|
// FIXME this could be more efficient about filling partial holes
|
||||||
|
var fullyCovered = true;
|
||||||
|
var tile, tileCoord, tileCoordKey, x, y;
|
||||||
|
for (x = tileRange.minX; x <= tileRange.maxX; ++x) {
|
||||||
|
for (y = tileRange.minY; y <= tileRange.maxY; ++y) {
|
||||||
|
tileCoord = new ol.TileCoord(z, x, y);
|
||||||
|
tileCoordKey = tileCoord.toString();
|
||||||
|
if (tilesToDrawByZ[z] && tilesToDrawByZ[z][tileCoordKey]) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
tile = tileSource.getTile(tileCoord);
|
||||||
|
if (!goog.isNull(tile) &&
|
||||||
|
tile.getState() == ol.TileState.LOADED) {
|
||||||
|
if (!tilesToDrawByZ[z]) {
|
||||||
|
tilesToDrawByZ[z] = {};
|
||||||
|
}
|
||||||
|
tilesToDrawByZ[z][tileCoordKey] = tile;
|
||||||
|
} else {
|
||||||
|
fullyCovered = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return fullyCovered;
|
||||||
|
};
|
||||||
|
|
||||||
var allTilesLoaded = true;
|
var allTilesLoaded = true;
|
||||||
|
|
||||||
tilesToDrawByZ[z] = {};
|
|
||||||
var tile, tileCenter, tileCoord, tileState, x, y;
|
var tile, tileCenter, tileCoord, 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) {
|
||||||
@@ -118,30 +142,8 @@ ol.renderer.dom.TileLayer.prototype.renderFrame =
|
|||||||
}
|
}
|
||||||
|
|
||||||
allTilesLoaded = false;
|
allTilesLoaded = false;
|
||||||
|
tileGrid.forEachTileCoordParentTileRange(tileCoord, findInterimTiles);
|
||||||
|
|
||||||
// FIXME this could be more efficient about filling partial holes
|
|
||||||
tileGrid.forEachTileCoordParentTileRange(
|
|
||||||
tileCoord,
|
|
||||||
function(z, tileRange) {
|
|
||||||
var fullyCovered = true;
|
|
||||||
tileRange.forEachTileCoord(z, function(tileCoord) {
|
|
||||||
var tileCoordKey = tileCoord.toString();
|
|
||||||
if (tilesToDrawByZ[z] && tilesToDrawByZ[z][tileCoordKey]) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var tile = tileSource.getTile(tileCoord);
|
|
||||||
if (!goog.isNull(tile) &&
|
|
||||||
tile.getState() == ol.TileState.LOADED) {
|
|
||||||
if (!tilesToDrawByZ[z]) {
|
|
||||||
tilesToDrawByZ[z] = {};
|
|
||||||
}
|
|
||||||
tilesToDrawByZ[z][tileCoordKey] = tile;
|
|
||||||
} else {
|
|
||||||
fullyCovered = false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return fullyCovered;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -348,12 +348,38 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame =
|
|||||||
* @type {Object.<number, Object.<string, ol.Tile>>}
|
* @type {Object.<number, Object.<string, ol.Tile>>}
|
||||||
*/
|
*/
|
||||||
var tilesToDrawByZ = {};
|
var tilesToDrawByZ = {};
|
||||||
|
tilesToDrawByZ[z] = {};
|
||||||
|
|
||||||
|
var findInterimTiles = function(z, tileRange) {
|
||||||
|
// FIXME this could be more efficient about filling partial holes
|
||||||
|
var fullyCovered = true;
|
||||||
|
var tile, tileCoord, tileCoordKey, x, y;
|
||||||
|
for (x = tileRange.minX; x <= tileRange.maxX; ++x) {
|
||||||
|
for (y = tileRange.minY; y <= tileRange.maxY; ++y) {
|
||||||
|
tileCoord = new ol.TileCoord(z, x, y);
|
||||||
|
tileCoordKey = tileCoord.toString();
|
||||||
|
if (tilesToDrawByZ[z] && tilesToDrawByZ[z][tileCoordKey]) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
tile = tileSource.getTile(tileCoord);
|
||||||
|
if (!goog.isNull(tile) &&
|
||||||
|
tile.getState() == ol.TileState.LOADED &&
|
||||||
|
mapRenderer.isTileTextureLoaded(tile)) {
|
||||||
|
if (!tilesToDrawByZ[z]) {
|
||||||
|
tilesToDrawByZ[z] = {};
|
||||||
|
}
|
||||||
|
tilesToDrawByZ[z][tileCoordKey] = tile;
|
||||||
|
} else {
|
||||||
|
fullyCovered = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return fullyCovered;
|
||||||
|
};
|
||||||
|
|
||||||
var tilesToLoad = new goog.structs.PriorityQueue();
|
var tilesToLoad = new goog.structs.PriorityQueue();
|
||||||
|
|
||||||
var allTilesLoaded = true;
|
var allTilesLoaded = true;
|
||||||
|
|
||||||
tilesToDrawByZ[z] = {};
|
|
||||||
var deltaX, deltaY, priority, tile, tileCenter, tileCoord, tileState, x, y;
|
var deltaX, deltaY, priority, tile, tileCenter, tileCoord, 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) {
|
||||||
@@ -384,31 +410,7 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame =
|
|||||||
}
|
}
|
||||||
|
|
||||||
allTilesLoaded = false;
|
allTilesLoaded = false;
|
||||||
|
tileGrid.forEachTileCoordParentTileRange(tileCoord, findInterimTiles);
|
||||||
// FIXME this could be more efficient about filling partial holes
|
|
||||||
tileGrid.forEachTileCoordParentTileRange(
|
|
||||||
tileCoord,
|
|
||||||
function(z, tileRange) {
|
|
||||||
var fullyCovered = true;
|
|
||||||
tileRange.forEachTileCoord(z, function(tileCoord) {
|
|
||||||
var tileCoordKey = tileCoord.toString();
|
|
||||||
if (tilesToDrawByZ[z] && tilesToDrawByZ[z][tileCoordKey]) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var tile = tileSource.getTile(tileCoord);
|
|
||||||
if (!goog.isNull(tile) &&
|
|
||||||
tile.getState() == ol.TileState.LOADED &&
|
|
||||||
mapRenderer.isTileTextureLoaded(tile)) {
|
|
||||||
if (!tilesToDrawByZ[z]) {
|
|
||||||
tilesToDrawByZ[z] = {};
|
|
||||||
}
|
|
||||||
tilesToDrawByZ[z][tileCoordKey] = tile;
|
|
||||||
} else {
|
|
||||||
fullyCovered = false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return fullyCovered;
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user