diff options
| author | Kristian Evers <kristianevers@gmail.com> | 2019-03-17 09:09:38 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-03-17 09:09:38 +0100 |
| commit | 8cf492acb3840eff5064a2da421c143e1fd1646c (patch) | |
| tree | 1bdbb4dc6254db37c7c0f6f84b1357bb257c90e8 /src/iso19111/io.cpp | |
| parent | b91db13e6175b0444f6f48d462d1b45f1841983a (diff) | |
| parent | b5fb5f070793c29bb9b60faec9d221b25e7017d4 (diff) | |
| download | PROJ-8cf492acb3840eff5064a2da421c143e1fd1646c.tar.gz PROJ-8cf492acb3840eff5064a2da421c143e1fd1646c.zip | |
Merge pull request #1326 from rouault/fix_1323
createOperation(): fix geocent <--> nadgrids+geoidgrids case (fixes #1323)
Diffstat (limited to 'src/iso19111/io.cpp')
| -rw-r--r-- | src/iso19111/io.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/iso19111/io.cpp b/src/iso19111/io.cpp index 51f93e2f..d5f38fd5 100644 --- a/src/iso19111/io.cpp +++ b/src/iso19111/io.cpp @@ -5049,7 +5049,7 @@ const std::string &PROJStringFormatter::toString() const { first.paramValues[1].keyEquals("z_in") && first.paramValues[2].keyEquals("xy_out") && first.paramValues[3].keyEquals("z_out") && - second.paramValues[0].keyEquals("xy_in=") && + second.paramValues[0].keyEquals("xy_in") && second.paramValues[1].keyEquals("xy_out") && first.paramValues[0].value == second.paramValues[1].value && first.paramValues[2].value == second.paramValues[0].value) { @@ -5074,6 +5074,22 @@ const std::string &PROJStringFormatter::toString() const { 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 + if (i + 1 < d->steps_.size() && prevStep.name == "unitconvert" && + curStep.name == "axisswap" && curStepParamCount == 1 && + curStep.paramValues[0].equals("order", "2,1")) { + auto iterNext = iterCur; + ++iterNext; + auto &nextStep = *iterNext; + if (nextStep.name == "unitconvert") { + std::swap(*iterPrev, *iterCur); + changeDone = true; + break; + } + } + // axisswap order=2,1 followed by itself is a no-op if (curStep.name == "axisswap" && prevStep.name == "axisswap" && curStepParamCount == 1 && prevStepParamCount == 1 && @@ -6707,7 +6723,7 @@ PROJStringParser::Private::buildGeocentricCRS(int iStep, int iUnitConvert) { auto datum = buildDatum(step, title); - UnitOfMeasure unit = UnitOfMeasure::METRE; + UnitOfMeasure unit = buildUnit(step, "units", ""); if (iUnitConvert >= 0) { auto &stepUnitConvert = steps_[iUnitConvert]; const std::string *xy_in = &getParamValue(stepUnitConvert, "xy_in"); |
