diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2020-10-22 21:13:03 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2020-10-22 21:13:03 +0200 |
| commit | f2cd2b3b99746dd9d08b6d388fa91055643f0747 (patch) | |
| tree | 08079302e974a09fd1868aaa4b5ba0c2f27bc4b3 /test/unit | |
| parent | 698e51f476772ebfdd8ba7b93c5a5beafcb90f64 (diff) | |
| download | PROJ-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.cpp | 76 |
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; |
