From 875aba7c9d894f84f2c6a5efdfdeba9cf15245f5 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 25 Nov 2019 00:13:10 +0100 Subject: CoordinateOperationFactory::Private::setCRSs(): fix potential issue with overriding CRS on a InverseCoordinateOperation (could be related to #1736) --- src/iso19111/coordinateoperation.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) (limited to 'src') 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(co); + if (invCO) { + setCRSs(invCO->forwardOperation().get(), targetCRS, sourceCRS); + } + auto concat = dynamic_cast(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(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(last); - if (invCO) { - setCRSs(invCO->forwardOperation().get(), targetCRS, - NN_NO_CHECK(lastSource)); - } } } } -- cgit v1.2.3