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

View File

@@ -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.<ol.Tile>}
@@ -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) {