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 = {};
|
||||
tilesToDrawByZ[z] = {};
|
||||
tilesToDrawByZ[String(z)] = {};
|
||||
|
||||
var tileRange =
|
||||
tileGrid.getTileRangeForExtentAndResolution(mapExtent, mapResolution);
|
||||
@@ -188,7 +188,7 @@ ol.renderer.dom.TileLayer.prototype.render = function() {
|
||||
|
||||
var key = tile.tileCoord.toString();
|
||||
if (tile.getState() == ol.TileState.LOADED) {
|
||||
tilesToDrawByZ[z][key] = tile;
|
||||
tilesToDrawByZ[String(z)][key] = tile;
|
||||
return;
|
||||
} else {
|
||||
if (!(key in this.loadingTiles_)) {
|
||||
@@ -198,7 +198,7 @@ ol.renderer.dom.TileLayer.prototype.render = function() {
|
||||
tile.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(
|
||||
tileCoord,
|
||||
function(altZ, altTileRange) {
|
||||
altZ = String(altZ);
|
||||
var fullyCovered = true;
|
||||
altTileRange.forEachTileCoord(altZ, function(altTileCoord) {
|
||||
var tileKey = altTileCoord.toString();
|
||||
if (tilesToDrawByZ[altZ] && tilesToDrawByZ[altZ][tileKey]) {
|
||||
if (tilesToDrawByZ[altZ] &&
|
||||
tilesToDrawByZ[altZ][tileKey]) {
|
||||
return;
|
||||
}
|
||||
var altTile = tileSource.getTile(altTileCoord);
|
||||
@@ -232,17 +234,16 @@ ol.renderer.dom.TileLayer.prototype.render = function() {
|
||||
|
||||
}, this);
|
||||
|
||||
/** @type {Array.<number>} */
|
||||
var zs = goog.object.getKeys(tilesToDrawByZ);
|
||||
goog.array.sort(zs);
|
||||
zs.sort(function(a, b) {return a - b});
|
||||
|
||||
var fragment = document.createDocumentFragment();
|
||||
var altFragment = document.createDocumentFragment();
|
||||
var newTiles = false;
|
||||
var newAltTiles = false;
|
||||
for (var i = 0, ii = zs.length; i < ii; ++i) {
|
||||
var tileZ = zs[i];
|
||||
var tilesToDraw = tilesToDrawByZ[tileZ];
|
||||
var tileZ = +zs[i];
|
||||
var tilesToDraw = tilesToDrawByZ[String(tileZ)];
|
||||
var tileOffset = this.getTileOffset_(tileZ, mapResolution);
|
||||
for (var key in tilesToDraw) {
|
||||
var tile = tilesToDraw[key];
|
||||
|
||||
Reference in New Issue
Block a user