diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2019-02-20 13:18:20 +0100 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2019-02-20 13:18:20 +0100 |
| commit | 0d8600e46b20fba28eb0cf0cabbbb4c6b586c6bf (patch) | |
| tree | 76de90b8fc8572ea546670b06d78333a923ab15a /src | |
| parent | 545936e04bda914a9caf8c1e4e0eefb4c5c80397 (diff) | |
| download | PROJ-0d8600e46b20fba28eb0cf0cabbbb4c6b586c6bf.tar.gz PROJ-0d8600e46b20fba28eb0cf0cabbbb4c6b586c6bf.zip | |
PROJStringFormatter: remove useless push/pop in another case
Diffstat (limited to 'src')
| -rw-r--r-- | src/iso19111/io.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/iso19111/io.cpp b/src/iso19111/io.cpp index e14239b0..f602c7c0 100644 --- a/src/iso19111/io.cpp +++ b/src/iso19111/io.cpp @@ -5141,6 +5141,33 @@ const std::string &PROJStringFormatter::toString() const { } } + // push v_3, unitconvert xy_in xy_out, axisswap order=2,1, pop v_3 + // -> can suppress push/pop + if (i + 2 < d->steps_.size() && prevStep.name == "push" && + prevStepParamCount == 1 && + prevStep.paramValues[0].key == "v_3" && + curStep.name == "unitconvert" && curStepParamCount == 2 && + curStep.paramValues[0].key == "xy_in" && + curStep.paramValues[1].key == "xy_out") { + auto iterNext = iterCur; + ++iterNext; + auto &nextStep = *iterNext; + auto iterNextNext = iterNext; + ++iterNextNext; + auto &nextNextStep = *iterNextNext; + if (nextStep.name == "axisswap" && + nextStep.paramValues.size() == 1 && + nextStep.paramValues[0].equals("order", "2,1") && + nextNextStep.name == "pop" && + nextNextStep.paramValues.size() == 1 && + nextNextStep.paramValues[0].key == "v_3") { + d->steps_.erase(iterPrev); + d->steps_.erase(iterNextNext); + changeDone = true; + break; + } + } + // unitconvert xy_in=A xy_out=B, pop/push v_3, unitconvert xy_in=B // xy_out=A -> can suppress unitconvert if (i + 1 < d->steps_.size() && prevStep.name == "unitconvert" && |
