aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-11-26 23:17:07 +0100
committerEven Rouault <even.rouault@spatialys.com>2019-11-26 23:17:07 +0100
commitbb9b925876bddf7d64f0689015763c23f84af753 (patch)
tree1a3ce1fb5063155b8b01e0a62dac2b7cc31de18a /src
parentaeaf21ecae5296adf81ed2cab72ec07b919abf87 (diff)
downloadPROJ-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.cpp15
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);