diff options
Diffstat (limited to 'test/unit/test_crs.cpp')
| -rw-r--r-- | test/unit/test_crs.cpp | 50 |
1 files changed, 38 insertions, 12 deletions
diff --git a/test/unit/test_crs.cpp b/test/unit/test_crs.cpp index 0e340560..e8758932 100644 --- a/test/unit/test_crs.cpp +++ b/test/unit/test_crs.cpp @@ -5453,23 +5453,42 @@ TEST(crs, crs_createBoundCRSToWGS84IfPossible) { "+towgs84=-168,-60,320,0,0,0,0 +no_defs +type=crs"); } { + // WGS 84 + EGM2008 height + auto obj = createFromUserInput("EPSG:4326+3855", dbContext); + auto crs = nn_dynamic_pointer_cast<CRS>(obj); + ASSERT_TRUE(crs != nullptr); + auto res = crs->createBoundCRSToWGS84IfPossible( + dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER); + EXPECT_NE(res, crs); + EXPECT_EQ(res->createBoundCRSToWGS84IfPossible( + dbContext, + CoordinateOperationContext::IntermediateCRSUse::NEVER), + res); + auto compoundCRS = nn_dynamic_pointer_cast<CompoundCRS>(res); + ASSERT_TRUE(compoundCRS != nullptr); + EXPECT_EQ(compoundCRS->exportToPROJString( + PROJStringFormatter::create().get()), + "+proj=longlat +datum=WGS84 +geoidgrids=us_nga_egm08_25.tif " + "+vunits=m +no_defs +type=crs"); + } + { // NTF (Paris) / Lambert zone II + NGF-IGN69 height auto crs_7421 = factory->createCoordinateReferenceSystem("7421"); - auto bound = crs_7421->createBoundCRSToWGS84IfPossible( + auto res = crs_7421->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER); - EXPECT_NE(bound, crs_7421); - EXPECT_EQ(bound->createBoundCRSToWGS84IfPossible( + EXPECT_NE(res, crs_7421); + EXPECT_EQ(res->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER), - bound); - auto boundCRS = nn_dynamic_pointer_cast<BoundCRS>(bound); - ASSERT_TRUE(boundCRS != nullptr); - EXPECT_EQ( - boundCRS->exportToPROJString(PROJStringFormatter::create().get()), - "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 " - "+x_0=600000 +y_0=2200000 +ellps=clrk80ign +pm=paris " - "+towgs84=-168,-60,320,0,0,0,0 +units=m " - "+vunits=m +no_defs +type=crs"); + res); + auto compoundCRS = nn_dynamic_pointer_cast<CompoundCRS>(res); + ASSERT_TRUE(compoundCRS != nullptr); + EXPECT_EQ(compoundCRS->exportToPROJString( + PROJStringFormatter::create().get()), + "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 " + "+x_0=600000 +y_0=2200000 +ellps=clrk80ign +pm=paris " + "+towgs84=-168,-60,320,0,0,0,0 +units=m " + "+geoidgrids=fr_ign_RAF18.tif +vunits=m +no_defs +type=crs"); } { auto crs = createVerticalCRS(); @@ -5479,6 +5498,13 @@ TEST(crs, crs_createBoundCRSToWGS84IfPossible) { crs); } { + auto crs = createCompoundCRS(); + EXPECT_EQ(crs->createBoundCRSToWGS84IfPossible( + dbContext, + CoordinateOperationContext::IntermediateCRSUse::NEVER), + crs); + } + { auto factoryIGNF = AuthorityFactory::create(DatabaseContext::create(), "IGNF"); auto crs = factoryIGNF->createCoordinateReferenceSystem("TERA50STEREO"); |
