diff --git a/src/ol/reproj/tile.js b/src/ol/reproj/tile.js index a9832aeafd..bec8ca7b59 100644 --- a/src/ol/reproj/tile.js +++ b/src/ol/reproj/tile.js @@ -65,11 +65,6 @@ ol.reproj.Tile = function(sourceProj, sourceTileGrid, */ this.targetTileGrid_ = targetTileGrid; - - var targetExtent = targetTileGrid.getTileCoordExtent(this.getTileCoord()); - var maxTargetExtent = this.targetTileGrid_.getExtent(); - var maxSourceExtent = this.sourceTileGrid_.getExtent(); - /** * @private * @type {!Array.} @@ -88,8 +83,12 @@ ol.reproj.Tile = function(sourceProj, sourceTileGrid, */ this.srcZ_ = 0; - var limitedTargetExtent = ol.extent.getIntersection( - targetExtent, maxTargetExtent); + var targetExtent = targetTileGrid.getTileCoordExtent(this.getTileCoord()); + var maxTargetExtent = this.targetTileGrid_.getExtent(); + var maxSourceExtent = this.sourceTileGrid_.getExtent(); + + var limitedTargetExtent = goog.isNull(maxTargetExtent) ? + targetExtent : ol.extent.getIntersection(targetExtent, maxTargetExtent); if (ol.extent.getArea(limitedTargetExtent) === 0) { // Tile is completely outside range -> EMPTY @@ -146,21 +145,25 @@ ol.reproj.Tile = function(sourceProj, sourceTileGrid, var srcRange = sourceTileGrid.getTileRangeForExtentAndZ( srcExtent, this.srcZ_); - var srcFullRange = sourceTileGrid.getFullTileRange(this.srcZ_); - srcRange.minY = Math.max(srcRange.minY, srcFullRange.minY); - srcRange.maxY = Math.min(srcRange.maxY, srcFullRange.maxY); - var xRange; - if (srcRange.minX > srcRange.maxX) { - xRange = goog.array.concat( - goog.array.range(srcRange.minX, srcFullRange.maxX + 1), - goog.array.range(srcFullRange.minX, srcRange.maxX + 1) - ); + var srcFullRange = sourceTileGrid.getFullTileRange(this.srcZ_); + if (!goog.isNull(srcFullRange)) { + srcRange.minY = Math.max(srcRange.minY, srcFullRange.minY); + srcRange.maxY = Math.min(srcRange.maxY, srcFullRange.maxY); + + if (srcRange.minX > srcRange.maxX) { + xRange = goog.array.concat( + goog.array.range(srcRange.minX, srcFullRange.maxX + 1), + goog.array.range(srcFullRange.minX, srcRange.maxX + 1) + ); + } else { + xRange = goog.array.range( + Math.max(srcRange.minX, srcFullRange.minX), + Math.min(srcRange.maxX, srcFullRange.maxX) + 1 + ); + } } else { - xRange = goog.array.range( - Math.max(srcRange.minX, srcFullRange.minX), - Math.min(srcRange.maxX, srcFullRange.maxX) + 1 - ); + xRange = goog.array.range(srcRange.minX, srcRange.maxX + 1); } if (xRange.length * srcRange.getHeight() > 100) {