diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2019-11-04 22:35:57 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-11-04 22:35:57 +0100 |
| commit | 34dc695402ba5d10248ea47bec3ab88ed950eccb (patch) | |
| tree | 56bfb7962cca13095a85a93af4e372ffac2e0be2 /test/unit/test_io.cpp | |
| parent | 1bee3d54b05d2f6bd406749126ff7d6ac26e7013 (diff) | |
| parent | 67e987ed84e19dd0ce46bdc529e8a73010af2c66 (diff) | |
| download | PROJ-34dc695402ba5d10248ea47bec3ab88ed950eccb.tar.gz PROJ-34dc695402ba5d10248ea47bec3ab88ed950eccb.zip | |
Merge pull request #1710 from rouault/geoid_model
Add support for GEOIDMODEL
Diffstat (limited to 'test/unit/test_io.cpp')
| -rw-r--r-- | test/unit/test_io.cpp | 121 |
1 files changed, 115 insertions, 6 deletions
diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp index 8aff0908..a71b63bb 100644 --- a/test/unit/test_io.cpp +++ b/test/unit/test_io.cpp @@ -1994,16 +1994,21 @@ TEST(wkt_parse, vertcrs_VRF_WKT2) { // --------------------------------------------------------------------------- TEST(wkt_parse, vertcrs_with_GEOIDMODEL) { - auto wkt = "VERTCRS[\"CGVD2013\"," - " VRF[\"Canadian Geodetic Vertical Datum of 2013\"]," - " CS[vertical,1]," - " AXIS[\"gravity-related height (H)\",up]," - " LENGTHUNIT[\"metre\",1.0]," - " GEOIDMODEL[\"CGG2013\",ID[\"EPSG\",6648]]]"; + auto wkt = "VERTCRS[\"CGVD2013\",\n" + " VDATUM[\"Canadian Geodetic Vertical Datum of 2013\"],\n" + " CS[vertical,1],\n" + " AXIS[\"gravity-related height (H)\",up,\n" + " LENGTHUNIT[\"metre\",1]],\n" + " GEOIDMODEL[\"CGG2013\",\n" + " ID[\"EPSG\",6648]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast<VerticalCRS>(obj); ASSERT_TRUE(crs != nullptr); + EXPECT_EQ( + crs->exportToWKT( + WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), + wkt); } // --------------------------------------------------------------------------- @@ -2060,6 +2065,71 @@ TEST(wkt_parse, vertcrs_WKT1_GDAL_minimum) { // --------------------------------------------------------------------------- +TEST(wkt_parse, vertcrs_WKT1_LAS_ftUS) { + auto wkt = "VERT_CS[\"NAVD88 - Geoid03 (Feet)\"," + " VERT_DATUM[\"unknown\",2005]," + " UNIT[\"US survey foot\",0.3048006096012192," + " AUTHORITY[\"EPSG\",\"9003\"]]," + " AXIS[\"Up\",UP]]"; + + auto obj = WKTParser().createFromWKT(wkt); + auto crs = nn_dynamic_pointer_cast<VerticalCRS>(obj); + ASSERT_TRUE(crs != nullptr); + EXPECT_EQ(crs->nameStr(), "NAVD88 height (ftUS)"); + ASSERT_EQ(crs->identifiers().size(), 1U); + EXPECT_EQ(crs->identifiers()[0]->code(), "6360"); + EXPECT_EQ(*(crs->identifiers()[0]->codeSpace()), "EPSG"); + + const auto &geoidModel = crs->geoidModel(); + ASSERT_TRUE(!geoidModel.empty()); + EXPECT_EQ(geoidModel[0]->nameStr(), "GEOID03"); + + auto datum = crs->datum(); + EXPECT_EQ(datum->nameStr(), "North American Vertical Datum 1988"); + ASSERT_EQ(datum->identifiers().size(), 1U); + EXPECT_EQ(datum->identifiers()[0]->code(), "5103"); + EXPECT_EQ(*(datum->identifiers()[0]->codeSpace()), "EPSG"); + + const auto &axis = crs->coordinateSystem()->axisList()[0]; + EXPECT_EQ(axis->direction(), AxisDirection::UP); + EXPECT_EQ(axis->unit().name(), "US survey foot"); + EXPECT_NEAR(axis->unit().conversionToSI(), 0.3048006096012192, 1e-16); +} + +// --------------------------------------------------------------------------- + +TEST(wkt_parse, vertcrs_WKT1_LAS_metre) { + auto wkt = "VERT_CS[\"NAVD88 via Geoid09\"," + " VERT_DATUM[\"unknown\",2005]," + " UNIT[\"metre\",1.0," + " AUTHORITY[\"EPSG\",\"9001\"]]," + " AXIS[\"Up\",UP]]"; + + auto obj = WKTParser().createFromWKT(wkt); + auto crs = nn_dynamic_pointer_cast<VerticalCRS>(obj); + ASSERT_TRUE(crs != nullptr); + EXPECT_EQ(crs->nameStr(), "NAVD88 height"); + ASSERT_EQ(crs->identifiers().size(), 1U); + EXPECT_EQ(crs->identifiers()[0]->code(), "5703"); + EXPECT_EQ(*(crs->identifiers()[0]->codeSpace()), "EPSG"); + + const auto &geoidModel = crs->geoidModel(); + ASSERT_TRUE(!geoidModel.empty()); + EXPECT_EQ(geoidModel[0]->nameStr(), "GEOID09"); + + auto datum = crs->datum(); + EXPECT_EQ(datum->nameStr(), "North American Vertical Datum 1988"); + ASSERT_EQ(datum->identifiers().size(), 1U); + EXPECT_EQ(datum->identifiers()[0]->code(), "5103"); + EXPECT_EQ(*(datum->identifiers()[0]->codeSpace()), "EPSG"); + + const auto &axis = crs->coordinateSystem()->axisList()[0]; + EXPECT_EQ(axis->direction(), AxisDirection::UP); + EXPECT_EQ(axis->unit(), UnitOfMeasure::METRE); +} + +// --------------------------------------------------------------------------- + TEST(wkt_parse, dynamic_vertical_reference_frame) { auto obj = WKTParser().createFromWKT( "VERTCRS[\"RH2000\"," @@ -10842,6 +10912,45 @@ TEST(json_import, vertical_crs_with_datum_ensemble) { // --------------------------------------------------------------------------- +TEST(json_import, vertical_crs_with_geoid_model) { + auto json = "{\n" + " \"$schema\": \"foo\",\n" + " \"type\": \"VerticalCRS\",\n" + " \"name\": \"CGVD2013\",\n" + " \"datum\": {\n" + " \"type\": \"VerticalReferenceFrame\",\n" + " \"name\": \"Canadian Geodetic Vertical Datum of 2013\"\n" + " },\n" + " \"coordinate_system\": {\n" + " \"subtype\": \"vertical\",\n" + " \"axis\": [\n" + " {\n" + " \"name\": \"Gravity-related height\",\n" + " \"abbreviation\": \"H\",\n" + " \"direction\": \"up\",\n" + " \"unit\": \"metre\"\n" + " }\n" + " ]\n" + " },\n" + " \"geoid_model\": {\n" + " \"name\": \"CGG2013\",\n" + " \"id\": {\n" + " \"authority\": \"EPSG\",\n" + " \"code\": 6648\n" + " }\n" + " }\n" + "}"; + + // No database + auto obj = createFromUserInput(json, nullptr); + auto vcrs = nn_dynamic_pointer_cast<VerticalCRS>(obj); + ASSERT_TRUE(vcrs != nullptr); + EXPECT_EQ(vcrs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), + json); +} + +// --------------------------------------------------------------------------- + TEST(json_import, parametric_crs) { auto json = "{\n" " \"$schema\": \"foo\",\n" |
