aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2020-03-25 17:55:46 +0100
committerGitHub <noreply@github.com>2020-03-25 17:55:46 +0100
commitb3fe4a04edd2fb141b2faf4c4cb9bc24b430849d (patch)
tree43e67a483c7e5bd7577a34a35dea545328195484
parent60ed38a2483cf6fe44f2fdf7b75844c9fff2c92c (diff)
parent2eb726f0e169c41cb9881dd49cb172e8e34325e8 (diff)
downloadPROJ-b3fe4a04edd2fb141b2faf4c4cb9bc24b430849d.tar.gz
PROJ-b3fe4a04edd2fb141b2faf4c4cb9bc24b430849d.zip
Merge pull request #2091 from PROJ-BOT/backport-2090-to-6.3
[Backport 6.3] EngineeringCRS: when exporting to WKT1_GDAL, output unit and axis (fixes https://github.com/OSGeo/gdal/issues/2347)
-rw-r--r--src/iso19111/crs.cpp34
-rw-r--r--test/unit/test_c_api.cpp7
-rw-r--r--test/unit/test_crs.cpp9
-rw-r--r--test/unit/test_io.cpp7
4 files changed, 31 insertions, 26 deletions
diff --git a/src/iso19111/crs.cpp b/src/iso19111/crs.cpp
index 1c3db81e..6f77f833 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<cs::CartesianCS>(
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<cs::VerticalCS>(
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<const util::BoxedValue *>(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 050ffdb8..b53223d7 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 c5ea1acc..e5a974bf 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 399cea8c..92bc6d4b 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);
}
// ---------------------------------------------------------------------------