From bb9b925876bddf7d64f0689015763c23f84af753 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 26 Nov 2019 23:17:07 +0100 Subject: createOperations(): fix an exception in transformations between Projected3D CRS and Projected CRS --- src/iso19111/coordinateoperation.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'src/iso19111/coordinateoperation.cpp') diff --git a/src/iso19111/coordinateoperation.cpp b/src/iso19111/coordinateoperation.cpp index cc2ee3b1..575b0350 100644 --- a/src/iso19111/coordinateoperation.cpp +++ b/src/iso19111/coordinateoperation.cpp @@ -11447,7 +11447,14 @@ static std::vector applyInverse(const std::vector &list) { auto res = list; for (auto &op : res) { +#ifdef DEBUG + auto opNew = op->inverse(); + assert(opNew->targetCRS()->isEquivalentTo(op->sourceCRS().get())); + assert(opNew->sourceCRS()->isEquivalentTo(op->targetCRS().get())); + op = opNew; +#else op = op->inverse(); +#endif } return res; } @@ -12372,7 +12379,13 @@ void CoordinateOperationFactory::Private::setCRSs( auto invCO = dynamic_cast(co); if (invCO) { - setCRSs(invCO->forwardOperation().get(), targetCRS, sourceCRS); + invCO->forwardOperation()->setCRSs(targetCRS, sourceCRS, nullptr); + } + + auto transf = dynamic_cast(co); + if (transf) { + transf->inverseAsTransformation()->setCRSs(targetCRS, sourceCRS, + nullptr); } auto concat = dynamic_cast(co); -- cgit v1.2.3