diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2019-08-10 15:15:44 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2019-08-10 15:27:59 +0200 |
| commit | 63981af418d84749cd4d70752f83fd551100389f (patch) | |
| tree | 10ddaceb884aa02ea1f3a75334853766cce958d9 /test/unit/test_io.cpp | |
| parent | 17dc5eb1b6d09d436c80470497dd2abfb902cf6d (diff) | |
| download | PROJ-63981af418d84749cd4d70752f83fd551100389f.tar.gz PROJ-63981af418d84749cd4d70752f83fd551100389f.zip | |
PROJJSON: add support for DatumEnsemble and Dynamic[Geodetic|Vertical]ReferenceFrame
Diffstat (limited to 'test/unit/test_io.cpp')
| -rw-r--r-- | test/unit/test_io.cpp | 266 |
1 files changed, 240 insertions, 26 deletions
diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp index d3c4c8ec..67fdcb77 100644 --- a/test/unit/test_io.cpp +++ b/test/unit/test_io.cpp @@ -9135,7 +9135,7 @@ TEST(wkt_export, invalid_angular_unit) { // --------------------------------------------------------------------------- -TEST(wkt_export, json_import_ellipsoid_flattened_sphere) { +TEST(json_import, ellipsoid_flattened_sphere) { auto json = "{\n" " \"type\": \"Ellipsoid\",\n" " \"name\": \"WGS 84\",\n" @@ -9154,7 +9154,7 @@ TEST(wkt_export, json_import_ellipsoid_flattened_sphere) { // --------------------------------------------------------------------------- -TEST(wkt_export, json_import_ellipsoid_major_minor_custom_unit) { +TEST(json_import, ellipsoid_major_minor_custom_unit) { auto json = "{\n" " \"type\": \"Ellipsoid\",\n" " \"name\": \"foo\",\n" @@ -9176,7 +9176,7 @@ TEST(wkt_export, json_import_ellipsoid_major_minor_custom_unit) { // --------------------------------------------------------------------------- -TEST(wkt_export, json_import_ellipsoid_sphere) { +TEST(json_import, ellipsoid_sphere) { auto json = "{\n" " \"type\": \"Ellipsoid\",\n" " \"name\": \"Sphere\",\n" @@ -9194,7 +9194,7 @@ TEST(wkt_export, json_import_ellipsoid_sphere) { // --------------------------------------------------------------------------- -TEST(wkt_export, json_import_ellipsoid_errors) { +TEST(json_import, ellipsoid_errors) { EXPECT_THROW(createFromUserInput("{", nullptr), ParsingException); EXPECT_THROW(createFromUserInput("{}", nullptr), ParsingException); EXPECT_THROW(createFromUserInput("{ \"type\": \"Ellipsoid\" }", nullptr), @@ -9215,7 +9215,7 @@ TEST(wkt_export, json_import_ellipsoid_errors) { // --------------------------------------------------------------------------- -TEST(wkt_export, json_import_prime_meridian) { +TEST(json_import, prime_meridian) { auto json = "{\n" " \"type\": \"PrimeMeridian\",\n" " \"name\": \"Paris\",\n" @@ -9236,7 +9236,7 @@ TEST(wkt_export, json_import_prime_meridian) { // --------------------------------------------------------------------------- -TEST(wkt_export, json_import_prime_meridian_errors) { +TEST(json_import, prime_meridian_errors) { EXPECT_THROW(createFromUserInput("{ \"type\": \"PrimeMeridian\", \"name\": " "\"foo\" }", nullptr), @@ -9249,8 +9249,7 @@ TEST(wkt_export, json_import_prime_meridian_errors) { // --------------------------------------------------------------------------- -TEST(wkt_export, - json_import_geodetic_reference_frame_with_implicit_prime_meridian) { +TEST(json_import, geodetic_reference_frame_with_implicit_prime_meridian) { auto json = "{\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"World Geodetic System 1984\",\n" @@ -9261,15 +9260,14 @@ TEST(wkt_export, " }\n" "}"; auto obj = createFromUserInput(json, nullptr); - auto gdr = nn_dynamic_pointer_cast<GeodeticReferenceFrame>(obj); - ASSERT_TRUE(gdr != nullptr); - EXPECT_EQ(gdr->exportToJSON((JSONFormatter::create().get())), json); + auto grf = nn_dynamic_pointer_cast<GeodeticReferenceFrame>(obj); + ASSERT_TRUE(grf != nullptr); + EXPECT_EQ(grf->exportToJSON((JSONFormatter::create().get())), json); } // --------------------------------------------------------------------------- -TEST(wkt_export, - json_import_geodetic_reference_frame_with_explicit_prime_meridian) { +TEST(json_import, geodetic_reference_frame_with_explicit_prime_meridian) { auto json = "{\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"Nouvelle Triangulation Francaise (Paris)\",\n" @@ -9291,14 +9289,35 @@ TEST(wkt_export, " }\n" "}"; auto obj = createFromUserInput(json, nullptr); - auto gdr = nn_dynamic_pointer_cast<GeodeticReferenceFrame>(obj); - ASSERT_TRUE(gdr != nullptr); - EXPECT_EQ(gdr->exportToJSON((JSONFormatter::create().get())), json); + auto grf = nn_dynamic_pointer_cast<GeodeticReferenceFrame>(obj); + ASSERT_TRUE(grf != nullptr); + EXPECT_EQ(grf->exportToJSON((JSONFormatter::create().get())), json); +} + +// --------------------------------------------------------------------------- + +TEST(json_import, + dynamic_geodetic_reference_frame_with_implicit_prime_meridian) { + auto json = "{\n" + " \"type\": \"DynamicGeodeticReferenceFrame\",\n" + " \"name\": \"World Geodetic System 1984\",\n" + " \"frame_reference_epoch\": 1,\n" + " \"deformation_model\": \"foo\",\n" + " \"ellipsoid\": {\n" + " \"name\": \"WGS 84\",\n" + " \"semi_major_axis\": 6378137,\n" + " \"inverse_flattening\": 298.257223563\n" + " }\n" + "}"; + auto obj = createFromUserInput(json, nullptr); + auto dgrf = nn_dynamic_pointer_cast<DynamicGeodeticReferenceFrame>(obj); + ASSERT_TRUE(dgrf != nullptr); + EXPECT_EQ(dgrf->exportToJSON((JSONFormatter::create().get())), json); } // --------------------------------------------------------------------------- -TEST(wkt_export, json_import_geodetic_reference_frame_errors) { +TEST(json_import, geodetic_reference_frame_errors) { EXPECT_THROW( createFromUserInput( "{ \"type\": \"GeodeticReferenceFrame\", \"name\": \"foo\" }", @@ -9308,7 +9327,22 @@ TEST(wkt_export, json_import_geodetic_reference_frame_errors) { // --------------------------------------------------------------------------- -TEST(wkt_export, json_import_several_usages) { +TEST(json_import, dynamic_vertical_reference_frame) { + auto json = "{\n" + " \"type\": \"DynamicVerticalReferenceFrame\",\n" + " \"name\": \"bar\",\n" + " \"frame_reference_epoch\": 1,\n" + " \"deformation_model\": \"foo\"\n" + "}"; + auto obj = createFromUserInput(json, nullptr); + auto dvrf = nn_dynamic_pointer_cast<DynamicVerticalReferenceFrame>(obj); + ASSERT_TRUE(dvrf != nullptr); + EXPECT_EQ(dvrf->exportToJSON((JSONFormatter::create().get())), json); +} + +// --------------------------------------------------------------------------- + +TEST(json_import, several_usages) { auto json = "{\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"World Geodetic System 1984\",\n" @@ -9341,7 +9375,7 @@ TEST(wkt_export, json_import_several_usages) { // --------------------------------------------------------------------------- -TEST(wkt_export, json_import_geographic_crs) { +TEST(json_import, geographic_crs) { auto json = "{\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"WGS 84\",\n" @@ -9392,7 +9426,7 @@ TEST(wkt_export, json_import_geographic_crs) { // --------------------------------------------------------------------------- -TEST(wkt_export, json_import_geographic_crs_errors) { +TEST(json_import, geographic_crs_errors) { EXPECT_THROW( createFromUserInput( "{ \"type\": \"GeographicCRS\", \"name\": \"foo\" }", nullptr), @@ -9450,7 +9484,7 @@ TEST(wkt_export, json_import_geographic_crs_errors) { // --------------------------------------------------------------------------- -TEST(wkt_export, json_import_geocentric_crs) { +TEST(json_import, geocentric_crs) { auto json = "{\n" " \"type\": \"GeodeticCRS\",\n" " \"name\": \"WGS 84\",\n" @@ -9495,7 +9529,7 @@ TEST(wkt_export, json_import_geocentric_crs) { // --------------------------------------------------------------------------- -TEST(wkt_export, json_import_projected_crs) { +TEST(json_import, projected_crs) { auto json = "{\n" " \"type\": \"ProjectedCRS\",\n" " \"name\": \"WGS 84 / UTM zone 31N\",\n" @@ -9615,7 +9649,7 @@ TEST(wkt_export, json_import_projected_crs) { // --------------------------------------------------------------------------- -TEST(wkt_export, json_import_compound_crs) { +TEST(json_import, compound_crs) { auto json = "{\n" " \"type\": \"CompoundCRS\",\n" " \"name\": \"WGS 84 + EGM2008 height\",\n" @@ -9687,7 +9721,7 @@ TEST(wkt_export, json_import_compound_crs) { // --------------------------------------------------------------------------- -TEST(wkt_export, json_import_bound_crs) { +TEST(json_import, bound_crs) { auto json = "{\n" " \"type\": \"BoundCRS\",\n" @@ -9788,7 +9822,7 @@ TEST(wkt_export, json_import_bound_crs) { // --------------------------------------------------------------------------- -TEST(wkt_export, json_import_transformation) { +TEST(json_import, transformation) { auto json = "{\n" " \"type\": \"Transformation\",\n" " \"name\": \"GDA94 to GDA2020 (1)\",\n" @@ -9975,7 +10009,7 @@ TEST(wkt_export, json_import_transformation) { // --------------------------------------------------------------------------- -TEST(wkt_export, json_import_concatenated_operation) { +TEST(json_import, concatenated_operation) { auto json = "{\n" " \"type\": \"ConcatenatedOperation\",\n" @@ -10402,3 +10436,183 @@ TEST(wkt_export, json_import_concatenated_operation) { ASSERT_TRUE(concat != nullptr); EXPECT_EQ(concat->exportToJSON((JSONFormatter::create().get())), json); } + +// --------------------------------------------------------------------------- + +TEST(json_import, geographic_crs_with_datum_ensemble) { + auto json = "{\n" + " \"type\": \"GeographicCRS\",\n" + " \"name\": \"WGS 84\",\n" + " \"datum_ensemble\": {\n" + " \"name\": \"WGS 84 ensemble\",\n" + " \"members\": [\n" + " {\n" + " \"name\": \"World Geodetic System 1984 (Transit)\"\n" + " },\n" + " {\n" + " \"name\": \"World Geodetic System 1984 (G730)\"\n" + " }\n" + " ],\n" + " \"ellipsoid\": {\n" + " \"name\": \"WGS 84\",\n" + " \"semi_major_axis\": 6378137,\n" + " \"inverse_flattening\": 298.257223563\n" + " },\n" + " \"accuracy\": \"2\"\n" + " },\n" + " \"coordinate_system\": {\n" + " \"subtype\": \"ellipsoidal\",\n" + " \"axis\": [\n" + " {\n" + " \"name\": \"Latitude\",\n" + " \"abbreviation\": \"lat\",\n" + " \"direction\": \"north\",\n" + " \"unit\": \"degree\"\n" + " },\n" + " {\n" + " \"name\": \"Longitude\",\n" + " \"abbreviation\": \"lon\",\n" + " \"direction\": \"east\",\n" + " \"unit\": \"degree\"\n" + " }\n" + " ]\n" + " }\n" + "}"; + + auto expected_json = + "{\n" + " \"type\": \"GeographicCRS\",\n" + " \"name\": \"WGS 84\",\n" + " \"datum_ensemble\": {\n" + " \"name\": \"WGS 84 ensemble\",\n" + " \"members\": [\n" + " {\n" + " \"name\": \"World Geodetic System 1984 (Transit)\",\n" + " \"id\": {\n" + " \"authority\": \"EPSG\",\n" + " \"code\": 1166\n" + " }\n" + " },\n" + " {\n" + " \"name\": \"World Geodetic System 1984 (G730)\",\n" + " \"id\": {\n" + " \"authority\": \"EPSG\",\n" + " \"code\": 1152\n" + " }\n" + " }\n" + " ],\n" + " \"ellipsoid\": {\n" + " \"name\": \"WGS 84\",\n" + " \"semi_major_axis\": 6378137,\n" + " \"inverse_flattening\": 298.257223563,\n" + " \"id\": {\n" + " \"authority\": \"EPSG\",\n" + " \"code\": 7030\n" + " }\n" + " },\n" + " \"accuracy\": \"2\"\n" + " },\n" + " \"coordinate_system\": {\n" + " \"subtype\": \"ellipsoidal\",\n" + " \"axis\": [\n" + " {\n" + " \"name\": \"Latitude\",\n" + " \"abbreviation\": \"lat\",\n" + " \"direction\": \"north\",\n" + " \"unit\": \"degree\"\n" + " },\n" + " {\n" + " \"name\": \"Longitude\",\n" + " \"abbreviation\": \"lon\",\n" + " \"direction\": \"east\",\n" + " \"unit\": \"degree\"\n" + " }\n" + " ]\n" + " }\n" + "}"; + + { + // No database + auto obj = createFromUserInput(json, nullptr); + auto gcrs = nn_dynamic_pointer_cast<GeographicCRS>(obj); + ASSERT_TRUE(gcrs != nullptr); + EXPECT_EQ(gcrs->exportToJSON((JSONFormatter::create().get())), json); + } + { + auto obj = createFromUserInput(json, DatabaseContext::create()); + auto gcrs = nn_dynamic_pointer_cast<GeographicCRS>(obj); + ASSERT_TRUE(gcrs != nullptr); + EXPECT_EQ(gcrs->exportToJSON((JSONFormatter::create().get())), + expected_json); + } + { + auto obj = + createFromUserInput(expected_json, DatabaseContext::create()); + auto gcrs = nn_dynamic_pointer_cast<GeographicCRS>(obj); + ASSERT_TRUE(gcrs != nullptr); + EXPECT_EQ(gcrs->exportToJSON((JSONFormatter::create().get())), + expected_json); + } +} + +// --------------------------------------------------------------------------- + +TEST(json_import, datum_ensemble_without_ellipsoid) { + auto json = "{\n" + " \"type\": \"DatumEnsemble\",\n" + " \"name\": \"ensemble\",\n" + " \"members\": [\n" + " {\n" + " \"name\": \"member1\"\n" + " },\n" + " {\n" + " \"name\": \"member2\"\n" + " }\n" + " ],\n" + " \"accuracy\": \"2\"\n" + "}"; + + // No database + auto obj = createFromUserInput(json, nullptr); + auto ensemble = nn_dynamic_pointer_cast<DatumEnsemble>(obj); + ASSERT_TRUE(ensemble != nullptr); + EXPECT_EQ(ensemble->exportToJSON((JSONFormatter::create().get())), json); +} + +// --------------------------------------------------------------------------- + +TEST(json_import, vertical_crs_with_datum_ensemble) { + auto json = "{\n" + " \"type\": \"VerticalCRS\",\n" + " \"name\": \"foo\",\n" + " \"datum_ensemble\": {\n" + " \"name\": \"ensemble\",\n" + " \"members\": [\n" + " {\n" + " \"name\": \"member1\"\n" + " },\n" + " {\n" + " \"name\": \"member2\"\n" + " }\n" + " ],\n" + " \"accuracy\": \"2\"\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" + "}"; + + // 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().get())), json); +} |
