aboutsummaryrefslogtreecommitdiff
path: root/src/iso19111/io.cpp
diff options
context:
space:
mode:
authorKristian Evers <kristianevers@gmail.com>2019-03-17 09:09:38 +0100
committerGitHub <noreply@github.com>2019-03-17 09:09:38 +0100
commit8cf492acb3840eff5064a2da421c143e1fd1646c (patch)
tree1bdbb4dc6254db37c7c0f6f84b1357bb257c90e8 /src/iso19111/io.cpp
parentb91db13e6175b0444f6f48d462d1b45f1841983a (diff)
parentb5fb5f070793c29bb9b60faec9d221b25e7017d4 (diff)
downloadPROJ-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.cpp20
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");