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_crs.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_crs.cpp')
| -rw-r--r-- | test/unit/test_crs.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/test/unit/test_crs.cpp b/test/unit/test_crs.cpp index 5ee62ce4..605df714 100644 --- a/test/unit/test_crs.cpp +++ b/test/unit/test_crs.cpp @@ -5224,3 +5224,60 @@ TEST(crs, getNonDeprecated) { ASSERT_EQ(list.size(), 1U); } } + +// --------------------------------------------------------------------------- + +TEST(crs, promoteTo3D) { + auto dbContext = DatabaseContext::create(); + { + auto crs = GeographicCRS::EPSG_4326; + auto crs3D = crs->promoteTo3D(std::string(), nullptr); + auto crs3DAsGeog = nn_dynamic_pointer_cast<GeographicCRS>(crs3D); + ASSERT_TRUE(crs3DAsGeog != nullptr); + EXPECT_EQ(crs3DAsGeog->coordinateSystem()->axisList().size(), 3U); + EXPECT_TRUE(crs3D->promoteTo3D(std::string(), nullptr) + ->isEquivalentTo(crs3D.get())); + } + { + auto crs = GeographicCRS::EPSG_4326; + auto crs3D = crs->promoteTo3D(std::string(), dbContext); + auto crs3DAsGeog = nn_dynamic_pointer_cast<GeographicCRS>(crs3D); + ASSERT_TRUE(crs3DAsGeog != nullptr); + EXPECT_EQ(crs3DAsGeog->coordinateSystem()->axisList().size(), 3U); + EXPECT_TRUE(!crs3DAsGeog->identifiers().empty()); + } + { + auto crs = createProjected(); + auto crs3D = crs->promoteTo3D(std::string(), nullptr); + auto crs3DAsProjected = nn_dynamic_pointer_cast<ProjectedCRS>(crs3D); + ASSERT_TRUE(crs3DAsProjected != nullptr); + EXPECT_EQ(crs3DAsProjected->coordinateSystem()->axisList().size(), 3U); + EXPECT_EQ( + crs3DAsProjected->baseCRS()->coordinateSystem()->axisList().size(), + 3U); + EXPECT_TRUE(crs3D->promoteTo3D(std::string(), nullptr) + ->isEquivalentTo(crs3D.get())); + } + { + auto crs = createProjected(); + auto crs3D = crs->promoteTo3D(std::string(), dbContext); + auto crs3DAsProjected = nn_dynamic_pointer_cast<ProjectedCRS>(crs3D); + ASSERT_TRUE(crs3DAsProjected != nullptr); + EXPECT_EQ(crs3DAsProjected->coordinateSystem()->axisList().size(), 3U); + EXPECT_EQ( + crs3DAsProjected->baseCRS()->coordinateSystem()->axisList().size(), + 3U); + EXPECT_TRUE(!crs3DAsProjected->baseCRS()->identifiers().empty()); + } + { + auto crs = BoundCRS::createFromTOWGS84( + createProjected(), std::vector<double>{1, 2, 3, 4, 5, 6, 7}); + auto crs3D = crs->promoteTo3D(std::string(), dbContext); + auto crs3DAsBound = nn_dynamic_pointer_cast<BoundCRS>(crs3D); + ASSERT_TRUE(crs3DAsBound != nullptr); + auto baseCRS = + nn_dynamic_pointer_cast<ProjectedCRS>(crs3DAsBound->baseCRS()); + ASSERT_TRUE(baseCRS != nullptr); + EXPECT_EQ(baseCRS->coordinateSystem()->axisList().size(), 3U); + } +} |
