From 3b1d72202a9403ad48d416580cb29fc0a0453ba3 Mon Sep 17 00:00:00 2001 From: Petr Sloup Date: Mon, 24 Aug 2015 10:21:27 +0200 Subject: [PATCH] Correctly reproject sources in wrappable projection With extent smaller than the projection extent --- src/ol/reproj/tile.js | 17 ++++++++--------- src/ol/reproj/triangulation.js | 13 +++++++++++++ 2 files changed, 21 insertions(+), 9 deletions(-) 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; }