aboutsummaryrefslogtreecommitdiff
path: root/test/unit/test_c_api.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/unit/test_c_api.cpp')
-rw-r--r--test/unit/test_c_api.cpp139
1 files changed, 133 insertions, 6 deletions
diff --git a/test/unit/test_c_api.cpp b/test/unit/test_c_api.cpp
index 564833db..c0db3880 100644
--- a/test/unit/test_c_api.cpp
+++ b/test/unit/test_c_api.cpp
@@ -845,6 +845,28 @@ TEST_F(CApi, proj_create_from_database) {
EXPECT_EQ(proj_get_type(datum), PJ_TYPE_GEODETIC_REFERENCE_FRAME);
}
{
+ // International Terrestrial Reference Frame 2008
+ auto datum = proj_create_from_database(
+ m_ctxt, "EPSG", "1061", PJ_CATEGORY_DATUM, false, nullptr);
+ ASSERT_NE(datum, nullptr);
+ ObjectKeeper keeper(datum);
+ EXPECT_EQ(proj_get_type(datum),
+ PJ_TYPE_DYNAMIC_GEODETIC_REFERENCE_FRAME);
+ EXPECT_EQ(proj_dynamic_datum_get_frame_reference_epoch(m_ctxt, datum),
+ 2005.0);
+ }
+ {
+ // Norway Normal Null 2000
+ auto datum = proj_create_from_database(
+ m_ctxt, "EPSG", "1096", PJ_CATEGORY_DATUM, false, nullptr);
+ ASSERT_NE(datum, nullptr);
+ ObjectKeeper keeper(datum);
+ EXPECT_EQ(proj_get_type(datum),
+ PJ_TYPE_DYNAMIC_VERTICAL_REFERENCE_FRAME);
+ EXPECT_EQ(proj_dynamic_datum_get_frame_reference_epoch(m_ctxt, datum),
+ 2000.0);
+ }
+ {
auto op = proj_create_from_database(m_ctxt, "EPSG", "16031",
PJ_CATEGORY_COORDINATE_OPERATION,
false, nullptr);
@@ -1197,6 +1219,14 @@ TEST_F(CApi, proj_get_codes_from_database) {
} else {
ASSERT_NE(list, nullptr) << type;
ASSERT_NE(list[0], nullptr) << type;
+ if (type == PJ_TYPE_DYNAMIC_GEODETIC_REFERENCE_FRAME ||
+ type == PJ_TYPE_DYNAMIC_VERTICAL_REFERENCE_FRAME) {
+ auto obj = proj_create_from_database(
+ m_ctxt, "EPSG", list[0], PJ_CATEGORY_DATUM, false, nullptr);
+ ASSERT_NE(obj, nullptr);
+ ObjectKeeper keeper(obj);
+ EXPECT_EQ(proj_get_type(obj), type) << type << " " << list[0];
+ }
}
}
}
@@ -1929,7 +1959,7 @@ TEST_F(CApi, proj_get_area_of_use) {
EXPECT_EQ(e, 180);
EXPECT_EQ(n, 90);
ASSERT_TRUE(name != nullptr);
- EXPECT_EQ(std::string(name), "World");
+ EXPECT_EQ(std::string(name), "World.");
}
{
auto obj = proj_create(m_ctxt, "+proj=longlat +type=crs");
@@ -3397,7 +3427,7 @@ TEST_F(CApi, proj_get_crs_info_list_from_database) {
EXPECT_EQ(list[i]->south_lat_degree, -90.0);
EXPECT_EQ(list[i]->east_lon_degree, 180.0);
EXPECT_EQ(list[i]->north_lat_degree, 90.0);
- EXPECT_EQ(std::string(list[i]->area_name), "World");
+ EXPECT_EQ(std::string(list[i]->area_name), "World.");
EXPECT_EQ(list[i]->projection_method_name, nullptr);
} else if (code == "4978") {
found4978 = true;
@@ -3792,8 +3822,8 @@ TEST_F(CApi, proj_get_scope) {
auto scope = proj_get_scope(co);
ASSERT_NE(scope, nullptr);
EXPECT_EQ(scope,
- std::string("Conformal transformation of GDA94 coordinates "
- "that have been derived through GNSS CORS."));
+ std::string("Transformation of GDA94 coordinates that have "
+ "been derived through GNSS CORS."));
}
// Conversion
@@ -3807,8 +3837,7 @@ TEST_F(CApi, proj_get_scope) {
auto scope = proj_get_scope(co);
ASSERT_NE(scope, nullptr);
EXPECT_EQ(scope,
- std::string("Large and medium scale topographic mapping "
- "and engineering survey."));
+ std::string("Engineering survey, topographic mapping."));
}
{
@@ -4918,4 +4947,102 @@ TEST_F(CApi, proj_is_equivalent_to_with_ctx) {
PJ_COMP_EQUIVALENT));
}
+// ---------------------------------------------------------------------------
+
+TEST_F(CApi, datum_ensemble) {
+ auto wkt =
+ "GEOGCRS[\"ETRS89\","
+ " ENSEMBLE[\"European Terrestrial Reference System 1989 ensemble\","
+ " MEMBER[\"European Terrestrial Reference Frame 1989\"],"
+ " MEMBER[\"European Terrestrial Reference Frame 1990\"],"
+ " MEMBER[\"European Terrestrial Reference Frame 1991\"],"
+ " MEMBER[\"European Terrestrial Reference Frame 1992\"],"
+ " MEMBER[\"European Terrestrial Reference Frame 1993\"],"
+ " MEMBER[\"European Terrestrial Reference Frame 1994\"],"
+ " MEMBER[\"European Terrestrial Reference Frame 1996\"],"
+ " MEMBER[\"European Terrestrial Reference Frame 1997\"],"
+ " MEMBER[\"European Terrestrial Reference Frame 2000\"],"
+ " MEMBER[\"European Terrestrial Reference Frame 2005\"],"
+ " MEMBER[\"European Terrestrial Reference Frame 2014\"],"
+ " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,"
+ " LENGTHUNIT[\"metre\",1]],"
+ " ENSEMBLEACCURACY[0.1]],"
+ " PRIMEM[\"Greenwich\",0,"
+ " ANGLEUNIT[\"degree\",0.0174532925199433]],"
+ " CS[ellipsoidal,2],"
+ " AXIS[\"geodetic latitude (Lat)\",north,"
+ " ORDER[1],"
+ " ANGLEUNIT[\"degree\",0.0174532925199433]],"
+ " AXIS[\"geodetic longitude (Lon)\",east,"
+ " ORDER[2],"
+ " ANGLEUNIT[\"degree\",0.0174532925199433]]]";
+ auto from_wkt =
+ proj_create_from_wkt(m_ctxt, wkt, nullptr, nullptr, nullptr);
+ ObjectKeeper keeper_from_wkt(from_wkt);
+ EXPECT_NE(from_wkt, nullptr);
+
+ auto datum = proj_crs_get_datum(m_ctxt, from_wkt);
+ ObjectKeeper keeper_datum(datum);
+ ASSERT_EQ(datum, nullptr);
+
+ auto datum_ensemble = proj_crs_get_datum_ensemble(m_ctxt, from_wkt);
+ ObjectKeeper keeper_datum_ensemble(datum_ensemble);
+ ASSERT_NE(datum_ensemble, nullptr);
+
+ ASSERT_EQ(proj_datum_ensemble_get_member_count(m_ctxt, datum_ensemble), 11);
+ ASSERT_EQ(proj_datum_ensemble_get_member(m_ctxt, datum_ensemble, -1),
+ nullptr);
+ ASSERT_EQ(proj_datum_ensemble_get_member(m_ctxt, datum_ensemble, 11),
+ nullptr);
+
+ {
+ auto member = proj_datum_ensemble_get_member(m_ctxt, datum_ensemble, 0);
+ ObjectKeeper keeper_member(member);
+ ASSERT_NE(member, nullptr);
+
+ EXPECT_EQ(proj_get_name(member),
+ std::string("European Terrestrial Reference Frame 1989"));
+ }
+
+ {
+ auto member =
+ proj_datum_ensemble_get_member(m_ctxt, datum_ensemble, 10);
+ ObjectKeeper keeper_member(member);
+ ASSERT_NE(member, nullptr);
+
+ EXPECT_EQ(proj_get_name(member),
+ std::string("European Terrestrial Reference Frame 2014"));
+ }
+
+ ASSERT_EQ(proj_datum_ensemble_get_accuracy(m_ctxt, datum_ensemble), 0.1);
+
+ auto datum_forced = proj_crs_get_datum_forced(m_ctxt, from_wkt);
+ ObjectKeeper keeper_datum_forced(datum_forced);
+ ASSERT_NE(datum_forced, nullptr);
+
+ EXPECT_EQ(proj_get_name(datum_forced),
+ std::string("European Terrestrial Reference System 1989"));
+
+ auto cs = proj_crs_get_coordinate_system(m_ctxt, from_wkt);
+ ObjectKeeper keeper_cs(cs);
+ EXPECT_NE(cs, nullptr);
+
+ {
+ auto built_crs = proj_create_geographic_crs_from_datum(
+ m_ctxt, proj_get_name(from_wkt), datum_ensemble, cs);
+ ObjectKeeper keeper_built_crs(built_crs);
+ EXPECT_NE(built_crs, nullptr);
+
+ EXPECT_TRUE(proj_is_equivalent_to_with_ctx(m_ctxt, built_crs, from_wkt,
+ PJ_COMP_EQUIVALENT));
+ }
+
+ {
+ auto built_crs = proj_create_geocentric_crs_from_datum(
+ m_ctxt, proj_get_name(from_wkt), datum_ensemble, "metre", 1.0);
+ ObjectKeeper keeper_built_crs(built_crs);
+ EXPECT_NE(built_crs, nullptr);
+ }
+}
+
} // namespace