aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-11-25 00:13:10 +0100
committerEven Rouault <even.rouault@spatialys.com>2019-11-25 00:13:10 +0100
commit875aba7c9d894f84f2c6a5efdfdeba9cf15245f5 (patch)
treed168c8886e86700e633ea57640e7aff87892f4e6 /src
parent0eb6ddc8380c363afb2d3fd1bcf9cd79f0cd131b (diff)
downloadPROJ-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.cpp16
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));
- }
}
}
}