From 0673f88a96adcabf3a21ed02c182bb94f50fcf89 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 11 Sep 2019 15:55:17 +0200 Subject: Ingestion of +proj=somerc +type=crs: avoid adding twice alpha, gamma, lon_0 (related to #1597) --- src/iso19111/io.cpp | 11 +++++++---- test/unit/test_io.cpp | 4 ++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/iso19111/io.cpp b/src/iso19111/io.cpp index 7194a838..dfe6f6a8 100644 --- a/src/iso19111/io.cpp +++ b/src/iso19111/io.cpp @@ -8313,10 +8313,13 @@ CRSNNPtr PROJStringParser::Private::buildProjectedCRS( } else if (step.name == "somerc") { mapping = getMapping(EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B); - step.paramValues.emplace_back(Step::KeyValue("alpha", "90")); - step.paramValues.emplace_back(Step::KeyValue("gamma", "90")); - step.paramValues.emplace_back( - Step::KeyValue("lonc", getParamValue(step, "lon_0"))); + if (!hasParamValue(step, "alpha") && !hasParamValue(step, "gamma") && + !hasParamValue(step, "lonc")) { + step.paramValues.emplace_back(Step::KeyValue("alpha", "90")); + step.paramValues.emplace_back(Step::KeyValue("gamma", "90")); + step.paramValues.emplace_back( + Step::KeyValue("lonc", getParamValue(step, "lon_0"))); + } } else if (step.name == "krovak" && ((getParamValue(step, "axis") == "swu" && iAxisSwap < 0) || (iAxisSwap > 0 && diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp index 872038fc..2642ed23 100644 --- a/test/unit/test_io.cpp +++ b/test/unit/test_io.cpp @@ -7800,6 +7800,10 @@ TEST(io, projparse_somerc) { EXPECT_TRUE(wkt.find("\"Northing at projection centre\",5") != std::string::npos) << wkt; + + auto wkt1 = crs->exportToWKT( + WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()); + EXPECT_TRUE(wkt1.find("EXTENSION") == std::string::npos) << wkt1; } // --------------------------------------------------------------------------- -- cgit v1.2.3