diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2020-07-09 00:11:28 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2020-07-09 00:11:28 +0200 |
| commit | 5c9bd6e722e2ccfd4048633239756b85b901c9f2 (patch) | |
| tree | 0fccc5711ecd671b9f5b6657faa0183b28bc6f1a /src/iso19111/coordinateoperation.cpp | |
| parent | cf3caffd458d3ad6122c47e58799c98cf865e1b6 (diff) | |
| download | PROJ-5c9bd6e722e2ccfd4048633239756b85b901c9f2.tar.gz PROJ-5c9bd6e722e2ccfd4048633239756b85b901c9f2.zip | |
PROJ string export of +proj=krovak +czech: make sure we export +czech instead of +axis=swu (fixes #2299)
Diffstat (limited to 'src/iso19111/coordinateoperation.cpp')
| -rw-r--r-- | src/iso19111/coordinateoperation.cpp | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/src/iso19111/coordinateoperation.cpp b/src/iso19111/coordinateoperation.cpp index 482e6e6d..dd8658fb 100644 --- a/src/iso19111/coordinateoperation.cpp +++ b/src/iso19111/coordinateoperation.cpp @@ -6282,6 +6282,8 @@ void Conversion::_exportToPROJString( bEllipsoidParametersDone = true; } + auto l_targetCRS = targetCRS(); + bool bAxisSpecFound = false; if (!bConversionDone) { const MethodMapping *mapping = getMapping(l_method.get()); @@ -6291,14 +6293,32 @@ void Conversion::_exportToPROJString( formatter->addParam("approx"); } if (mapping->proj_name_aux) { + bool addAux = true; if (internal::starts_with(mapping->proj_name_aux, "axis=")) { + if (mapping->epsg_code == EPSG_CODE_METHOD_KROVAK) { + auto projCRS = dynamic_cast<const crs::ProjectedCRS *>( + l_targetCRS.get()); + if (projCRS) { + const auto &axisList = + projCRS->coordinateSystem()->axisList(); + if (axisList[0]->direction() == + cs::AxisDirection::WEST && + axisList[1]->direction() == + cs::AxisDirection::SOUTH) { + formatter->addParam("czech"); + addAux = false; + } + } + } bAxisSpecFound = true; } - auto kv = split(mapping->proj_name_aux, '='); - if (kv.size() == 2) { - formatter->addParam(kv[0], kv[1]); - } else { - formatter->addParam(mapping->proj_name_aux); + if (addAux) { + auto kv = split(mapping->proj_name_aux, '='); + if (kv.size() == 2) { + formatter->addParam(kv[0], kv[1]); + } else { + formatter->addParam(mapping->proj_name_aux); + } } } @@ -6352,7 +6372,6 @@ void Conversion::_exportToPROJString( } } - auto l_targetCRS = targetCRS(); if (l_targetCRS && applyTargetCRSModifiers) { crs::CRS *horiz = l_targetCRS.get(); const auto compound = dynamic_cast<const crs::CompoundCRS *>(horiz); |
