diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2019-11-26 23:17:07 +0100 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2019-11-26 23:17:07 +0100 |
| commit | bb9b925876bddf7d64f0689015763c23f84af753 (patch) | |
| tree | 1a3ce1fb5063155b8b01e0a62dac2b7cc31de18a /src | |
| parent | aeaf21ecae5296adf81ed2cab72ec07b919abf87 (diff) | |
| download | PROJ-bb9b925876bddf7d64f0689015763c23f84af753.tar.gz PROJ-bb9b925876bddf7d64f0689015763c23f84af753.zip | |
createOperations(): fix an exception in transformations between Projected3D CRS and Projected CRS
Diffstat (limited to 'src')
| -rw-r--r-- | src/iso19111/coordinateoperation.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
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<CoordinateOperationNNPtr> applyInverse(const std::vector<CoordinateOperationNNPtr> &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<InverseCoordinateOperation *>(co); if (invCO) { - setCRSs(invCO->forwardOperation().get(), targetCRS, sourceCRS); + invCO->forwardOperation()->setCRSs(targetCRS, sourceCRS, nullptr); + } + + auto transf = dynamic_cast<Transformation *>(co); + if (transf) { + transf->inverseAsTransformation()->setCRSs(targetCRS, sourceCRS, + nullptr); } auto concat = dynamic_cast<ConcatenatedOperation *>(co); |
