Two lessons learned
Telling the compiler that object keys are numeric causes more harm than good (see === comparison that could never be met though the compiler didn't catch it). Never use goog functions without reading the source first. The goog.array.sort method does nothing special sorting numeric strings (so the zs array might be ['1', '10', '2'] here).
This commit is contained in:
@@ -169,10 +169,10 @@ ol.renderer.dom.TileLayer.prototype.render = function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {Object.<number, Object.<string, ol.Tile>>}
|
* @type {Object.<string, Object.<string, ol.Tile>>}
|
||||||
*/
|
*/
|
||||||
var tilesToDrawByZ = {};
|
var tilesToDrawByZ = {};
|
||||||
tilesToDrawByZ[z] = {};
|
tilesToDrawByZ[String(z)] = {};
|
||||||
|
|
||||||
var tileRange =
|
var tileRange =
|
||||||
tileGrid.getTileRangeForExtentAndResolution(mapExtent, mapResolution);
|
tileGrid.getTileRangeForExtentAndResolution(mapExtent, mapResolution);
|
||||||
@@ -188,7 +188,7 @@ ol.renderer.dom.TileLayer.prototype.render = function() {
|
|||||||
|
|
||||||
var key = tile.tileCoord.toString();
|
var key = tile.tileCoord.toString();
|
||||||
if (tile.getState() == ol.TileState.LOADED) {
|
if (tile.getState() == ol.TileState.LOADED) {
|
||||||
tilesToDrawByZ[z][key] = tile;
|
tilesToDrawByZ[String(z)][key] = tile;
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
if (!(key in this.loadingTiles_)) {
|
if (!(key in this.loadingTiles_)) {
|
||||||
@@ -198,7 +198,7 @@ ol.renderer.dom.TileLayer.prototype.render = function() {
|
|||||||
tile.load();
|
tile.load();
|
||||||
}
|
}
|
||||||
// TODO: only append after load?
|
// TODO: only append after load?
|
||||||
tilesToDrawByZ[z][key] = tile;
|
tilesToDrawByZ[String(z)][key] = tile;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -210,10 +210,12 @@ ol.renderer.dom.TileLayer.prototype.render = function() {
|
|||||||
tileGrid.forEachTileCoordParentTileRange(
|
tileGrid.forEachTileCoordParentTileRange(
|
||||||
tileCoord,
|
tileCoord,
|
||||||
function(altZ, altTileRange) {
|
function(altZ, altTileRange) {
|
||||||
|
altZ = String(altZ);
|
||||||
var fullyCovered = true;
|
var fullyCovered = true;
|
||||||
altTileRange.forEachTileCoord(altZ, function(altTileCoord) {
|
altTileRange.forEachTileCoord(altZ, function(altTileCoord) {
|
||||||
var tileKey = altTileCoord.toString();
|
var tileKey = altTileCoord.toString();
|
||||||
if (tilesToDrawByZ[altZ] && tilesToDrawByZ[altZ][tileKey]) {
|
if (tilesToDrawByZ[altZ] &&
|
||||||
|
tilesToDrawByZ[altZ][tileKey]) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var altTile = tileSource.getTile(altTileCoord);
|
var altTile = tileSource.getTile(altTileCoord);
|
||||||
@@ -232,17 +234,16 @@ ol.renderer.dom.TileLayer.prototype.render = function() {
|
|||||||
|
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
/** @type {Array.<number>} */
|
|
||||||
var zs = goog.object.getKeys(tilesToDrawByZ);
|
var zs = goog.object.getKeys(tilesToDrawByZ);
|
||||||
goog.array.sort(zs);
|
zs.sort(function(a, b) {return a - b});
|
||||||
|
|
||||||
var fragment = document.createDocumentFragment();
|
var fragment = document.createDocumentFragment();
|
||||||
var altFragment = document.createDocumentFragment();
|
var altFragment = document.createDocumentFragment();
|
||||||
var newTiles = false;
|
var newTiles = false;
|
||||||
var newAltTiles = false;
|
var newAltTiles = false;
|
||||||
for (var i = 0, ii = zs.length; i < ii; ++i) {
|
for (var i = 0, ii = zs.length; i < ii; ++i) {
|
||||||
var tileZ = zs[i];
|
var tileZ = +zs[i];
|
||||||
var tilesToDraw = tilesToDrawByZ[tileZ];
|
var tilesToDraw = tilesToDrawByZ[String(tileZ)];
|
||||||
var tileOffset = this.getTileOffset_(tileZ, mapResolution);
|
var tileOffset = this.getTileOffset_(tileZ, mapResolution);
|
||||||
for (var key in tilesToDraw) {
|
for (var key in tilesToDraw) {
|
||||||
var tile = tilesToDraw[key];
|
var tile = tilesToDraw[key];
|
||||||
|
|||||||
Reference in New Issue
Block a user