aboutsummaryrefslogtreecommitdiff
path: root/src/iso19111/io.cpp
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2020-05-19 16:53:27 +0200
committerGitHub <noreply@github.com>2020-05-19 16:53:27 +0200
commit3ee7c9495b7340fbc189f43d9bb4bf5753307991 (patch)
treea9f6c1e3c7a1125dfb69c361f9d52b5504d99433 /src/iso19111/io.cpp
parent2e5470387df8c713af18e601c0e6a4b352294556 (diff)
parentb0b33b8447972ac6e60d68213d6c24b0a4989421 (diff)
downloadPROJ-3ee7c9495b7340fbc189f43d9bb4bf5753307991.tar.gz
PROJ-3ee7c9495b7340fbc189f43d9bb4bf5753307991.zip
Merge pull request #2234 from rouault/fix_2232
Many fixes regarding BoundCRS, CompoundCRS, Geographic3D CRS with non-metre units
Diffstat (limited to 'src/iso19111/io.cpp')
-rw-r--r--src/iso19111/io.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/iso19111/io.cpp b/src/iso19111/io.cpp
index ebec053a..e7f8769c 100644
--- a/src/iso19111/io.cpp
+++ b/src/iso19111/io.cpp
@@ -6963,6 +6963,38 @@ const std::string &PROJStringFormatter::toString() const {
break;
}
+ // +step +proj=unitconvert +xy_in=X1 +z_in=Z1 +xy_out=X2 +z_out=Z2
+ // +step +proj=unitconvert +z_in=Z2 +z_out=Z3
+ // ==> step +proj=unitconvert +xy_in=X1 +z_in=Z1 +xy_out=X2
+ // +z_out=Z3
+ if (prevStep.name == "unitconvert" &&
+ curStep.name == "unitconvert" && !prevStep.inverted &&
+ !curStep.inverted && prevStep.paramValues.size() == 4 &&
+ curStep.paramValues.size() == 2 &&
+ prevStep.paramValues[0].keyEquals("xy_in") &&
+ prevStep.paramValues[1].keyEquals("z_in") &&
+ prevStep.paramValues[2].keyEquals("xy_out") &&
+ prevStep.paramValues[3].keyEquals("z_out") &&
+ curStep.paramValues[0].keyEquals("z_in") &&
+ curStep.paramValues[1].keyEquals("z_out") &&
+ prevStep.paramValues[3].value == curStep.paramValues[0].value) {
+ auto xy_in = prevStep.paramValues[0].value;
+ auto z_in = prevStep.paramValues[1].value;
+ auto xy_out = prevStep.paramValues[2].value;
+ auto z_out = curStep.paramValues[1].value;
+ d->steps_.erase(iterPrev, iterCur);
+ iterCur->paramValues.clear();
+ iterCur->paramValues.emplace_back(
+ Step::KeyValue("xy_in", xy_in));
+ iterCur->paramValues.emplace_back(Step::KeyValue("z_in", z_in));
+ iterCur->paramValues.emplace_back(
+ Step::KeyValue("xy_out", xy_out));
+ iterCur->paramValues.emplace_back(
+ Step::KeyValue("z_out", z_out));
+ changeDone = true;
+ break;
+ }
+
// unitconvert (1), axisswap order=2,1, unitconvert(2) ==>
// axisswap order=2,1, unitconvert (1), unitconvert(2) which
// will get further optimized by previous case