diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2019-11-25 00:13:10 +0100 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2019-11-25 00:13:10 +0100 |
| commit | 875aba7c9d894f84f2c6a5efdfdeba9cf15245f5 (patch) | |
| tree | d168c8886e86700e633ea57640e7aff87892f4e6 /src | |
| parent | 0eb6ddc8380c363afb2d3fd1bcf9cd79f0cd131b (diff) | |
| download | PROJ-875aba7c9d894f84f2c6a5efdfdeba9cf15245f5.tar.gz PROJ-875aba7c9d894f84f2c6a5efdfdeba9cf15245f5.zip | |
CoordinateOperationFactory::Private::setCRSs(): fix potential issue with overriding CRS on a InverseCoordinateOperation (could be related to #1736)
Diffstat (limited to 'src')
| -rw-r--r-- | src/iso19111/coordinateoperation.cpp | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/src/iso19111/coordinateoperation.cpp b/src/iso19111/coordinateoperation.cpp index 860b9a01..12966bdd 100644 --- a/src/iso19111/coordinateoperation.cpp +++ b/src/iso19111/coordinateoperation.cpp @@ -12264,27 +12264,23 @@ void CoordinateOperationFactory::Private::setCRSs( CoordinateOperation *co, const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS) { co->setCRSs(sourceCRS, targetCRS, nullptr); + + auto invCO = dynamic_cast<InverseCoordinateOperation *>(co); + if (invCO) { + setCRSs(invCO->forwardOperation().get(), targetCRS, sourceCRS); + } + auto concat = dynamic_cast<ConcatenatedOperation *>(co); if (concat) { auto first = concat->operations().front().get(); auto &firstTarget(first->targetCRS()); if (firstTarget) { setCRSs(first, sourceCRS, NN_NO_CHECK(firstTarget)); - auto invCO = dynamic_cast<InverseCoordinateOperation *>(first); - if (invCO) { - setCRSs(invCO->forwardOperation().get(), - NN_NO_CHECK(firstTarget), sourceCRS); - } } auto last = concat->operations().back().get(); auto &lastSource(last->sourceCRS()); if (lastSource) { setCRSs(last, NN_NO_CHECK(lastSource), targetCRS); - auto invCO = dynamic_cast<InverseCoordinateOperation *>(last); - if (invCO) { - setCRSs(invCO->forwardOperation().get(), targetCRS, - NN_NO_CHECK(lastSource)); - } } } } |
