diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2019-09-10 17:13:20 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2019-09-11 10:46:12 +0200 |
| commit | a6e1d72890615b42f54edad9b17acff8e7623844 (patch) | |
| tree | 9cf854c3516923599d4a306f617af145cc73885a /test/unit/test_c_api.cpp | |
| parent | a1518badde3fe18785fefe046ed909c05f86615e (diff) | |
| download | PROJ-a6e1d72890615b42f54edad9b17acff8e7623844.tar.gz PROJ-a6e1d72890615b42f54edad9b17acff8e7623844.zip | |
API: add CRS::promoteTo3D(), proj_crs_promote_to_3D() and proj_crs_create_projected_3D_crs_from_2D() (fixes #1587)
Also add a --3d switch to projinfo
Diffstat (limited to 'test/unit/test_c_api.cpp')
| -rw-r--r-- | test/unit/test_c_api.cpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/test/unit/test_c_api.cpp b/test/unit/test_c_api.cpp index fd129c80..b8dde430 100644 --- a/test/unit/test_c_api.cpp +++ b/test/unit/test_c_api.cpp @@ -3892,4 +3892,78 @@ TEST_F(CApi, proj_create_ellipsoidal_3D_cs) { } } +// --------------------------------------------------------------------------- + +TEST_F(CApi, proj_crs_promote_to_3D) { + + auto crs2D = + proj_create(m_ctxt, GeographicCRS::EPSG_4326 + ->exportToWKT(WKTFormatter::create().get()) + .c_str()); + ObjectKeeper keeper_crs2D(crs2D); + EXPECT_NE(crs2D, nullptr); + + auto crs3D = proj_crs_promote_to_3D(m_ctxt, nullptr, crs2D); + ObjectKeeper keeper_crs3D(crs3D); + EXPECT_NE(crs3D, nullptr); + + auto cs = proj_crs_get_coordinate_system(m_ctxt, crs3D); + ASSERT_NE(cs, nullptr); + ObjectKeeper keeperCs(cs); + EXPECT_EQ(proj_cs_get_axis_count(m_ctxt, cs), 3); + + auto code = proj_get_id_code(crs3D, 0); + ASSERT_TRUE(code != nullptr); + EXPECT_EQ(code, std::string("4979")); +} + +// --------------------------------------------------------------------------- + +TEST_F(CApi, proj_crs_create_projected_3D_crs_from_2D) { + + auto projCRS = proj_create_from_database(m_ctxt, "EPSG", "32631", + PJ_CATEGORY_CRS, false, nullptr); + ASSERT_NE(projCRS, nullptr); + ObjectKeeper keeper_projCRS(projCRS); + + { + auto geog3DCRS = proj_create_from_database( + m_ctxt, "EPSG", "4979", PJ_CATEGORY_CRS, false, nullptr); + ASSERT_NE(geog3DCRS, nullptr); + ObjectKeeper keeper_geog3DCRS(geog3DCRS); + + auto crs3D = proj_crs_create_projected_3D_crs_from_2D( + m_ctxt, nullptr, projCRS, geog3DCRS); + ObjectKeeper keeper_crs3D(crs3D); + EXPECT_NE(crs3D, nullptr); + + EXPECT_EQ(proj_get_type(crs3D), PJ_TYPE_PROJECTED_CRS); + + EXPECT_EQ(std::string(proj_get_name(crs3D)), + std::string(proj_get_name(projCRS))); + + auto cs = proj_crs_get_coordinate_system(m_ctxt, crs3D); + ASSERT_NE(cs, nullptr); + ObjectKeeper keeperCs(cs); + EXPECT_EQ(proj_cs_get_axis_count(m_ctxt, cs), 3); + } + + { + auto crs3D = proj_crs_create_projected_3D_crs_from_2D(m_ctxt, nullptr, + projCRS, nullptr); + ObjectKeeper keeper_crs3D(crs3D); + EXPECT_NE(crs3D, nullptr); + + EXPECT_EQ(proj_get_type(crs3D), PJ_TYPE_PROJECTED_CRS); + + EXPECT_EQ(std::string(proj_get_name(crs3D)), + std::string(proj_get_name(projCRS))); + + auto cs = proj_crs_get_coordinate_system(m_ctxt, crs3D); + ASSERT_NE(cs, nullptr); + ObjectKeeper keeperCs(cs); + EXPECT_EQ(proj_cs_get_axis_count(m_ctxt, cs), 3); + } +} + } // namespace |
