diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2020-10-21 11:41:51 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-21 11:41:51 +0200 |
| commit | b61a1d0575791173bbcc9c61f8c19acd52e1162f (patch) | |
| tree | 87825317534c3d41159ea56497bf053f8b240e61 /test | |
| parent | 6b8ef545c4200180cc1b4bf7179d0b0951029ae5 (diff) | |
| parent | 31f272708eaba9274b4b3c02240e9e7012c6b2b8 (diff) | |
| download | PROJ-b61a1d0575791173bbcc9c61f8c19acd52e1162f.tar.gz PROJ-b61a1d0575791173bbcc9c61f8c19acd52e1162f.zip | |
Merge pull request #2386 from rouault/improve_compoundcrs_identification
Improve CompoundCRS identification and name morphing in VerticalCRS with ESRI WKT1
Diffstat (limited to 'test')
| -rw-r--r-- | test/unit/test_crs.cpp | 55 | ||||
| -rw-r--r-- | test/unit/test_io.cpp | 25 |
2 files changed, 79 insertions, 1 deletions
diff --git a/test/unit/test_crs.cpp b/test/unit/test_crs.cpp index ec30580a..a0fee905 100644 --- a/test/unit/test_crs.cpp +++ b/test/unit/test_crs.cpp @@ -3593,7 +3593,7 @@ TEST(crs, verticalCRS_as_WKT1_GDAL) { TEST(crs, verticalCRS_as_WKT1_ESRI) { auto crs = createVerticalCRS(); - auto expected = "VERTCS[\"ODN height\",VDATUM[\"Ordnance Datum Newlyn\"]," + auto expected = "VERTCS[\"ODN_height\",VDATUM[\"Ordnance_Datum_Newlyn\"]," "PARAMETER[\"Vertical_Shift\",0.0]," "PARAMETER[\"Direction\",1.0]," "UNIT[\"Meter\",1.0]]"; @@ -3603,6 +3603,23 @@ TEST(crs, verticalCRS_as_WKT1_ESRI) { WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI).get()), expected); } + +// --------------------------------------------------------------------------- + +TEST(crs, verticalCRS_as_WKT1_ESRI_context) { + auto crs = createVerticalCRS(); + auto expected = "VERTCS[\"Newlyn\",VDATUM[\"Ordnance_Datum_Newlyn\"]," + "PARAMETER[\"Vertical_Shift\",0.0]," + "PARAMETER[\"Direction\",1.0]," + "UNIT[\"Meter\",1.0]]"; + + EXPECT_EQ(crs->exportToWKT( + WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, + DatabaseContext::create()) + .get()), + expected); +} + // --------------------------------------------------------------------------- TEST(crs, verticalCRS_down_as_WKT1_ESRI) { @@ -4058,6 +4075,42 @@ TEST(crs, compoundCRS_identify_db) { // Just check we don't get an exception crs->identify(factory); } + // Identify from ESRI WKT + { + auto sourceCRS = factory->createCompoundCRS("7405"); + auto wkt = sourceCRS->exportToWKT( + WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext) + .get()); + auto obj = + WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); + auto crs = nn_dynamic_pointer_cast<CompoundCRS>(obj); + ASSERT_TRUE(crs != nullptr); + auto res = crs->identify(factory); + ASSERT_EQ(res.size(), 1U); + EXPECT_EQ(res.front().first->getEPSGCode(), 7405); + EXPECT_EQ(res.front().second, 100); + } + // Identify a CompoundCRS whose horizontal and vertical parts are known + // but not the composition. + { + auto obj = createFromUserInput("EPSG:4326+3855", dbContext); + auto sourceCRS = nn_dynamic_pointer_cast<CompoundCRS>(obj); + ASSERT_TRUE(sourceCRS != nullptr); + auto wkt = sourceCRS->exportToWKT( + WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext) + .get()); + auto obj2 = + WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); + auto crs = nn_dynamic_pointer_cast<CompoundCRS>(obj2); + ASSERT_TRUE(crs != nullptr); + auto res = crs->identify(factory); + ASSERT_EQ(res.size(), 1U); + EXPECT_EQ(res.front().first->getEPSGCode(), 0); + EXPECT_EQ(res.front().second, 100); + const auto &components = res.front().first->componentReferenceSystems(); + EXPECT_EQ(components[0]->getEPSGCode(), 4326); + EXPECT_EQ(components[1]->getEPSGCode(), 3855); + } } // --------------------------------------------------------------------------- diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp index 1be0f2aa..055b1e1d 100644 --- a/test/unit/test_io.cpp +++ b/test/unit/test_io.cpp @@ -2106,6 +2106,31 @@ TEST(wkt_parse, VERTCS_WKT1_ESRI) { // --------------------------------------------------------------------------- +TEST(wkt_parse, VERTCS_WKT1_ESRI_context) { + auto wkt = "VERTCS[\"EGM2008_Geoid\",VDATUM[\"EGM2008_Geoid\"]," + "PARAMETER[\"Vertical_Shift\",0.0]," + "PARAMETER[\"Direction\",1.0],UNIT[\"Meter\",1.0]]"; + + auto obj = WKTParser() + .attachDatabaseContext(DatabaseContext::create()) + .createFromWKT(wkt); + auto crs = nn_dynamic_pointer_cast<VerticalCRS>(obj); + ASSERT_TRUE(crs != nullptr); + EXPECT_EQ(crs->nameStr(), "EGM2008 height"); + + auto datum = crs->datum(); + EXPECT_EQ(datum->nameStr(), "EGM2008 geoid"); + + auto cs = crs->coordinateSystem(); + ASSERT_EQ(cs->axisList().size(), 1U); + EXPECT_EQ(cs->axisList()[0]->direction(), AxisDirection::UP); + + EXPECT_EQ(WKTParser().guessDialect(wkt), + WKTParser::WKTGuessedDialect::WKT1_ESRI); +} + +// --------------------------------------------------------------------------- + TEST(wkt_parse, VERTCS_WKT1_ESRI_down) { auto wkt = "VERTCS[\"Caspian\",VDATUM[\"Caspian_Sea\"]," "PARAMETER[\"Vertical_Shift\",0.0]," |
