Handle tilegrids without extent during tile reprojection

This commit is contained in:
Petr Sloup
2015-07-13 15:07:04 +02:00
parent 9a460b5f6b
commit f481070f82
+23 -20
View File
@@ -65,11 +65,6 @@ ol.reproj.Tile = function(sourceProj, sourceTileGrid,
*/ */
this.targetTileGrid_ = targetTileGrid; this.targetTileGrid_ = targetTileGrid;
var targetExtent = targetTileGrid.getTileCoordExtent(this.getTileCoord());
var maxTargetExtent = this.targetTileGrid_.getExtent();
var maxSourceExtent = this.sourceTileGrid_.getExtent();
/** /**
* @private * @private
* @type {!Array.<ol.Tile>} * @type {!Array.<ol.Tile>}
@@ -88,8 +83,12 @@ ol.reproj.Tile = function(sourceProj, sourceTileGrid,
*/ */
this.srcZ_ = 0; this.srcZ_ = 0;
var limitedTargetExtent = ol.extent.getIntersection( var targetExtent = targetTileGrid.getTileCoordExtent(this.getTileCoord());
targetExtent, maxTargetExtent); 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) { if (ol.extent.getArea(limitedTargetExtent) === 0) {
// Tile is completely outside range -> EMPTY // Tile is completely outside range -> EMPTY
@@ -146,21 +145,25 @@ ol.reproj.Tile = function(sourceProj, sourceTileGrid,
var srcRange = sourceTileGrid.getTileRangeForExtentAndZ( var srcRange = sourceTileGrid.getTileRangeForExtentAndZ(
srcExtent, this.srcZ_); 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; var xRange;
if (srcRange.minX > srcRange.maxX) { var srcFullRange = sourceTileGrid.getFullTileRange(this.srcZ_);
xRange = goog.array.concat( if (!goog.isNull(srcFullRange)) {
goog.array.range(srcRange.minX, srcFullRange.maxX + 1), srcRange.minY = Math.max(srcRange.minY, srcFullRange.minY);
goog.array.range(srcFullRange.minX, srcRange.maxX + 1) 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 { } else {
xRange = goog.array.range( xRange = goog.array.range(srcRange.minX, srcRange.maxX + 1);
Math.max(srcRange.minX, srcFullRange.minX),
Math.min(srcRange.maxX, srcFullRange.maxX) + 1
);
} }
if (xRange.length * srcRange.getHeight() > 100) { if (xRange.length * srcRange.getHeight() > 100) {