aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2021-09-02 09:19:22 +0200
committerEven Rouault <even.rouault@spatialys.com>2021-09-02 09:19:22 +0200
commitf19b2948efcb7433d41e51d5128c5baa68261599 (patch)
treebc057566a951b749455c3a32e8b67052ba5a2b62 /test
parent1b180864413fa98aed9d79868eec8ceb689421a9 (diff)
downloadPROJ-f19b2948efcb7433d41e51d5128c5baa68261599.tar.gz
PROJ-f19b2948efcb7433d41e51d5128c5baa68261599.zip
Add proj_create_conversion_pole_rotation_netcdf_cf_convention() to address netCDF datasets using a pole rotation method
Diffstat (limited to 'test')
-rw-r--r--test/unit/test_c_api.cpp73
1 files changed, 72 insertions, 1 deletions
diff --git a/test/unit/test_c_api.cpp b/test/unit/test_c_api.cpp
index 2a82af64..44dceb97 100644
--- a/test/unit/test_c_api.cpp
+++ b/test/unit/test_c_api.cpp
@@ -2805,7 +2805,13 @@ TEST_F(CApi, proj_create_projections) {
ObjectKeeper keeper_projCRS(projCRS);
ASSERT_NE(projCRS, nullptr);
}
-
+ {
+ auto projCRS =
+ proj_create_conversion_pole_rotation_netcdf_cf_convention(
+ m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433);
+ ObjectKeeper keeper_projCRS(projCRS);
+ ASSERT_NE(projCRS, nullptr);
+ }
/* END: Generated by scripts/create_c_api_projections.py*/
}
@@ -5199,6 +5205,71 @@ TEST_F(CApi, proj_create_derived_geographic_crs) {
// ---------------------------------------------------------------------------
+TEST_F(CApi, proj_create_derived_geographic_crs_netcdf_cf) {
+
+ PJ *crs_4019 = proj_create(m_ctxt, "EPSG:4019");
+ ObjectKeeper keeper_crs_4019(crs_4019);
+ ASSERT_NE(crs_4019, nullptr);
+
+ PJ *conversion = proj_create_conversion_pole_rotation_netcdf_cf_convention(
+ m_ctxt, 2, 3, 4, "Degree", 0.0174532925199433);
+ ObjectKeeper keeper_conversion(conversion);
+ ASSERT_NE(conversion, nullptr);
+
+ PJ *cs = proj_crs_get_coordinate_system(m_ctxt, crs_4019);
+ ObjectKeeper keeper_cs(cs);
+ ASSERT_NE(cs, nullptr);
+
+ PJ *derived_crs = proj_create_derived_geographic_crs(
+ m_ctxt, "my rotated CRS", crs_4019, conversion, cs);
+ ObjectKeeper keeper_derived_crs(derived_crs);
+ ASSERT_NE(derived_crs, nullptr);
+
+ auto wkt = proj_as_wkt(m_ctxt, derived_crs, PJ_WKT2_2019, nullptr);
+ const char *expected_wkt =
+ "GEOGCRS[\"my rotated CRS\",\n"
+ " BASEGEOGCRS[\"Unknown datum based upon the GRS 1980 ellipsoid\",\n"
+ " DATUM[\"Not specified (based on GRS 1980 ellipsoid)\",\n"
+ " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n"
+ " LENGTHUNIT[\"metre\",1]]],\n"
+ " PRIMEM[\"Greenwich\",0,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n"
+ " DERIVINGCONVERSION[\"Pole rotation (netCDF CF convention)\",\n"
+ " METHOD[\"Pole rotation (netCDF CF convention)\"],\n"
+ " PARAMETER[\"Grid north pole latitude (netCDF CF "
+ "convention)\",2,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433,\n"
+ " ID[\"EPSG\",9122]]],\n"
+ " PARAMETER[\"Grid north pole longitude (netCDF CF "
+ "convention)\",3,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433,\n"
+ " ID[\"EPSG\",9122]]],\n"
+ " PARAMETER[\"North pole grid longitude (netCDF CF "
+ "convention)\",4,\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433,\n"
+ " ID[\"EPSG\",9122]]]],\n"
+ " CS[ellipsoidal,2],\n"
+ " AXIS[\"geodetic latitude (Lat)\",north,\n"
+ " ORDER[1],\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433,\n"
+ " ID[\"EPSG\",9122]]],\n"
+ " AXIS[\"geodetic longitude (Lon)\",east,\n"
+ " ORDER[2],\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433,\n"
+ " ID[\"EPSG\",9122]]]]";
+
+ ASSERT_NE(wkt, nullptr);
+ EXPECT_EQ(wkt, std::string(expected_wkt));
+
+ auto proj_5 = proj_as_proj_string(m_ctxt, derived_crs, PJ_PROJ_5, nullptr);
+ ASSERT_NE(proj_5, nullptr);
+ EXPECT_EQ(proj_5, std::string("+proj=ob_tran +o_proj=longlat +o_lon_p=4 "
+ "+o_lat_p=2 +lon_0=183 +ellps=GRS80 +no_defs "
+ "+type=crs"));
+}
+
+// ---------------------------------------------------------------------------
+
TEST_F(CApi, proj_context_set_sqlite3_vfs_name) {
PJ_CONTEXT *ctx = proj_context_create();