diff --git a/src/iso19111/crs.cpp b/src/iso19111/crs.cpp index 1c3db81e7f..6f77f8337c 100644 --- a/src/iso19111/crs.cpp +++ b/src/iso19111/crs.cpp @@ -310,17 +310,15 @@ CRSNNPtr CRS::alterCSLinearUnit(const common::UnitOfMeasure &unit) const { auto cartCS = util::nn_dynamic_pointer_cast( engCRS->coordinateSystem()); if (cartCS) { - auto props = createPropertyMap(this); - props.set("FORCE_OUTPUT_CS", true); - return EngineeringCRS::create(props, engCRS->datum(), + return EngineeringCRS::create(createPropertyMap(this), + engCRS->datum(), cartCS->alterUnit(unit)); } else { auto vertCS = util::nn_dynamic_pointer_cast( engCRS->coordinateSystem()); if (vertCS) { - auto props = createPropertyMap(this); - props.set("FORCE_OUTPUT_CS", true); - return EngineeringCRS::create(props, engCRS->datum(), + return EngineeringCRS::create(createPropertyMap(this), + engCRS->datum(), vertCS->alterUnit(unit)); } } @@ -5316,9 +5314,7 @@ bool TemporalCRS::_isEquivalentTo( // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress -struct EngineeringCRS::Private { - bool forceOutputCS_ = false; -}; +struct EngineeringCRS::Private {}; //! @endcond // --------------------------------------------------------------------------- @@ -5376,17 +5372,6 @@ EngineeringCRS::create(const util::PropertyMap &properties, crs->assignSelf(crs); crs->setProperties(properties); - const auto pVal = properties.get("FORCE_OUTPUT_CS"); - if (pVal) { - if (const auto genVal = - dynamic_cast(pVal->get())) { - if (genVal->type() == util::BoxedValue::Type::BOOLEAN && - genVal->booleanValue()) { - crs->d->forceOutputCS_ = true; - } - } - } - return crs; } @@ -5401,11 +5386,16 @@ void EngineeringCRS::_exportToWKT(io::WKTFormatter *formatter) const { formatter->addQuotedString(nameStr()); if (isWKT2 || !datum()->nameStr().empty()) { datum()->_exportToWKT(formatter); - coordinateSystem()->_exportToWKT(formatter); } - if (!isWKT2 && d->forceOutputCS_) { + if (!isWKT2) { coordinateSystem()->axisList()[0]->unit()._exportToWKT(formatter); } + + const auto oldAxisOutputRule = formatter->outputAxis(); + formatter->setOutputAxis(io::WKTFormatter::OutputAxisRule::YES); + coordinateSystem()->_exportToWKT(formatter); + formatter->setOutputAxis(oldAxisOutputRule); + ObjectUsage::baseExportToWKT(formatter); formatter->endNode(); } diff --git a/test/unit/test_c_api.cpp b/test/unit/test_c_api.cpp index 050ffdb8d0..b53223d728 100644 --- a/test/unit/test_c_api.cpp +++ b/test/unit/test_c_api.cpp @@ -2738,7 +2738,12 @@ TEST_F(CApi, proj_create_engineering_crs) { ASSERT_NE(crs, nullptr); auto wkt = proj_as_wkt(m_ctxt, crs, PJ_WKT1_GDAL, nullptr); ASSERT_NE(wkt, nullptr); - EXPECT_EQ(std::string(wkt), "LOCAL_CS[\"name\"]") << wkt; + EXPECT_EQ(std::string(wkt), "LOCAL_CS[\"name\",\n" + " UNIT[\"metre\",1,\n" + " AUTHORITY[\"EPSG\",\"9001\"]],\n" + " AXIS[\"Easting\",EAST],\n" + " AXIS[\"Northing\",NORTH]]") + << wkt; } // --------------------------------------------------------------------------- diff --git a/test/unit/test_crs.cpp b/test/unit/test_crs.cpp index c5ea1acc78..e5a974bf77 100644 --- a/test/unit/test_crs.cpp +++ b/test/unit/test_crs.cpp @@ -4813,7 +4813,11 @@ TEST(crs, engineeringCRS_WKT2) { TEST(crs, engineeringCRS_WKT1) { auto expected = "LOCAL_CS[\"Engineering CRS\",\n" - " LOCAL_DATUM[\"Engineering datum\",32767]]"; + " LOCAL_DATUM[\"Engineering datum\",32767],\n" + " UNIT[\"metre\",1,\n" + " AUTHORITY[\"EPSG\",\"9001\"]],\n" + " AXIS[\"Easting\",EAST],\n" + " AXIS[\"Northing\",NORTH]]"; EXPECT_EQ( createEngineeringCRS()->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), @@ -5399,7 +5403,8 @@ TEST(crs, crs_alterCSLinearUnit) { auto wkt = alteredCRS->exportToWKT( &(WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL) ->setMultiLine(false))); - EXPECT_EQ(wkt, "LOCAL_CS[\"foo\",UNIT[\"my unit\",2]]"); + EXPECT_EQ(wkt, "LOCAL_CS[\"foo\",UNIT[\"my unit\",2]," + "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]"); } { diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp index 399cea8c98..92bc6d4b59 100644 --- a/test/unit/test_io.cpp +++ b/test/unit/test_io.cpp @@ -3901,10 +3901,15 @@ TEST(wkt_parse, LOCAL_CS_short) { auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 2U); + auto expected_wkt = "LOCAL_CS[\"Engineering CRS\",\n" + " UNIT[\"metre\",1,\n" + " AUTHORITY[\"EPSG\",\"9001\"]],\n" + " AXIS[\"Easting\",EAST],\n" + " AXIS[\"Northing\",NORTH]]"; EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), - wkt); + expected_wkt); } // ---------------------------------------------------------------------------