diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2020-05-19 16:53:27 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-19 16:53:27 +0200 |
| commit | 3ee7c9495b7340fbc189f43d9bb4bf5753307991 (patch) | |
| tree | a9f6c1e3c7a1125dfb69c361f9d52b5504d99433 /src/iso19111/io.cpp | |
| parent | 2e5470387df8c713af18e601c0e6a4b352294556 (diff) | |
| parent | b0b33b8447972ac6e60d68213d6c24b0a4989421 (diff) | |
| download | PROJ-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.cpp | 32 |
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 |
