aboutsummaryrefslogtreecommitdiff
path: root/test/unit
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2020-10-22 21:13:03 +0200
committerEven Rouault <even.rouault@spatialys.com>2020-10-22 21:13:03 +0200
commitf2cd2b3b99746dd9d08b6d388fa91055643f0747 (patch)
tree08079302e974a09fd1868aaa4b5ba0c2f27bc4b3 /test/unit
parent698e51f476772ebfdd8ba7b93c5a5beafcb90f64 (diff)
downloadPROJ-f2cd2b3b99746dd9d08b6d388fa91055643f0747.tar.gz
PROJ-f2cd2b3b99746dd9d08b6d388fa91055643f0747.zip
WKT parser: accept ESRI VERTCS[...,DATUM[...,SPHEROID[]] syntax to express ellipsoidal heights
Diffstat (limited to 'test/unit')
-rw-r--r--test/unit/test_io.cpp76
1 files changed, 61 insertions, 15 deletions
diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp
index cc9465ea..59bd5bab 100644
--- a/test/unit/test_io.cpp
+++ b/test/unit/test_io.cpp
@@ -2597,11 +2597,12 @@ TEST(wkt_parse,
EXPECT_EQ(baseCRS->nameStr(), "NAD83");
EXPECT_EQ(baseCRS->coordinateSystem()->axisList().size(), 3U);
- EXPECT_EQ(
- crs->exportToWKT(
- WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL, dbContext)
- .get()),
- wkt);
+ EXPECT_EQ(replaceAll(crs->exportToWKT(
+ WKTFormatter::create(
+ WKTFormatter::Convention::WKT1_GDAL, dbContext)
+ .get()),
+ "ellipsoidal height", "Up"),
+ wkt);
}
// ---------------------------------------------------------------------------
@@ -2645,11 +2646,12 @@ TEST(wkt_parse,
EXPECT_EQ(crs->nameStr(), "WGS 84 / UTM zone 31N");
EXPECT_EQ(crs->coordinateSystem()->axisList().size(), 3U);
- EXPECT_EQ(
- crs->exportToWKT(
- WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL, dbContext)
- .get()),
- wkt);
+ EXPECT_EQ(replaceAll(crs->exportToWKT(
+ WKTFormatter::create(
+ WKTFormatter::Convention::WKT1_GDAL, dbContext)
+ .get()),
+ "ellipsoidal height", "Up"),
+ wkt);
}
// ---------------------------------------------------------------------------
@@ -2683,11 +2685,12 @@ TEST(wkt_parse,
EXPECT_NEAR(crs->coordinateSystem()->axisList()[2]->unit().conversionToSI(),
0.304800609601219, 1e-15);
- EXPECT_EQ(
- crs->exportToWKT(
- WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL, dbContext)
- .get()),
- wkt);
+ EXPECT_EQ(replaceAll(crs->exportToWKT(
+ WKTFormatter::create(
+ WKTFormatter::Convention::WKT1_GDAL, dbContext)
+ .get()),
+ "ellipsoidal height", "Up"),
+ wkt);
}
// ---------------------------------------------------------------------------
@@ -2724,6 +2727,49 @@ TEST(wkt_parse, implicit_compound_CRS_ESRI) {
// ---------------------------------------------------------------------------
+TEST(wkt_parse, VERTCS_with_ellipsoidal_height_ESRI) {
+ const char *wkt = "VERTCS[\"WGS_1984\",DATUM[\"D_WGS_1984\","
+ "SPHEROID[\"WGS_1984\",6378137.0,298.257223563]],"
+ "PARAMETER[\"Vertical_Shift\",0.0],"
+ "PARAMETER[\"Direction\",1.0],UNIT[\"Meter\",1.0]]";
+ auto dbContext = DatabaseContext::create();
+ auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt);
+ auto crs = nn_dynamic_pointer_cast<VerticalCRS>(obj);
+ ASSERT_TRUE(crs != nullptr);
+
+ const char *expected_wkt1 =
+ "VERT_CS[\"WGS_1984\",\n"
+ " VERT_DATUM[\"World Geodetic System 1984\",2002],\n"
+ " UNIT[\"metre\",1,\n"
+ " AUTHORITY[\"EPSG\",\"9001\"]],\n"
+ " AXIS[\"ellipsoidal height\",UP]]";
+ EXPECT_EQ(
+ crs->exportToWKT(
+ WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL, dbContext)
+ .get()),
+ expected_wkt1);
+}
+
+// ---------------------------------------------------------------------------
+
+TEST(wkt_parse, implicit_compound_CRS_with_ellipsoidal_height_ESRI) {
+ const char *wkt =
+ "GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\","
+ "SPHEROID[\"WGS_1984\",6378137.0,298.257223563]],"
+ "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],"
+ "VERTCS[\"WGS_1984\",DATUM[\"D_WGS_1984\","
+ "SPHEROID[\"WGS_1984\",6378137.0,298.257223563]],"
+ "PARAMETER[\"Vertical_Shift\",0.0],"
+ "PARAMETER[\"Direction\",1.0],UNIT[\"Meter\",1.0]]";
+ auto dbContext = DatabaseContext::create();
+ auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt);
+ auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj);
+ ASSERT_TRUE(crs != nullptr);
+ EXPECT_EQ(crs->coordinateSystem()->axisList().size(), 3U);
+}
+
+// ---------------------------------------------------------------------------
+
TEST(wkt_parse, COORDINATEOPERATION) {
std::string src_wkt;