diff --git a/src/ol/reproj/tile.js b/src/ol/reproj/tile.js index cbc0916de4..a6472e30f6 100644 --- a/src/ol/reproj/tile.js +++ b/src/ol/reproj/tile.js @@ -105,15 +105,13 @@ ol.reproj.Tile = function(sourceProj, sourceTileGrid, return; } - if (!sourceProj.isGlobal()) { - var sourceProjExtent = sourceProj.getExtent(); - if (!goog.isNull(sourceProjExtent)) { - if (goog.isNull(maxSourceExtent)) { - maxSourceExtent = sourceProjExtent; - } else { - maxSourceExtent = ol.extent.getIntersection( - maxSourceExtent, sourceProjExtent); - } + var sourceProjExtent = sourceProj.getExtent(); + if (!goog.isNull(sourceProjExtent)) { + if (goog.isNull(maxSourceExtent)) { + maxSourceExtent = sourceProjExtent; + } else { + maxSourceExtent = ol.extent.getIntersection( + maxSourceExtent, sourceProjExtent); } } @@ -155,6 +153,7 @@ ol.reproj.Tile = function(sourceProj, sourceTileGrid, var srcExtent = this.triangulation_.calculateSourceExtent(); if (!goog.isNull(maxSourceExtent) && + !this.triangulation_.getWrapsXInSource() && !ol.extent.intersects(maxSourceExtent, srcExtent)) { this.state = ol.TileState.EMPTY; } else { diff --git a/src/ol/reproj/triangulation.js b/src/ol/reproj/triangulation.js index 067e7444cd..374dd81988 100644 --- a/src/ol/reproj/triangulation.js +++ b/src/ol/reproj/triangulation.js @@ -78,6 +78,16 @@ ol.reproj.Triangulation = function(sourceProj, targetProj, targetExtent, */ this.wrapsXInSource_ = false; + /** + * @type {boolean} + * @private + */ + this.canWrapXInSource_ = this.sourceProj_.canWrapX() && + !goog.isNull(maxSourceExtent) && + !goog.isNull(this.sourceProj_.getExtent()) && + (ol.extent.getWidth(maxSourceExtent) == + ol.extent.getWidth(this.sourceProj_.getExtent())); + /** * @type {number} * @private @@ -195,6 +205,9 @@ ol.reproj.Triangulation.prototype.addQuadIfValid_ = function(a, b, c, d, } if (wrapsX) { + if (!this.canWrapXInSource_) { + return; + } this.wrapsXInSource_ = true; }