diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2019-01-17 10:40:12 +0100 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2019-01-17 10:40:12 +0100 |
| commit | 3121d9bc309b439adcc2ab9743a3d2b3a8f48296 (patch) | |
| tree | 9c6bb780646a9f074373e0acb18414b91ffc61a9 /test/unit | |
| parent | 6d2af0904652baba69ec81261c914e9b68221dac (diff) | |
| download | PROJ-3121d9bc309b439adcc2ab9743a3d2b3a8f48296.tar.gz PROJ-3121d9bc309b439adcc2ab9743a3d2b3a8f48296.zip | |
import/export PROJ strings from ISO19111 code: require/output +type=crs for CRS objects (refs #1214)
Diffstat (limited to 'test/unit')
| -rw-r--r-- | test/unit/test_c_api.cpp | 26 | ||||
| -rw-r--r-- | test/unit/test_crs.cpp | 133 | ||||
| -rw-r--r-- | test/unit/test_factory.cpp | 24 | ||||
| -rw-r--r-- | test/unit/test_io.cpp | 356 | ||||
| -rw-r--r-- | test/unit/test_operation.cpp | 74 |
5 files changed, 332 insertions, 281 deletions
diff --git a/test/unit/test_c_api.cpp b/test/unit/test_c_api.cpp index 6353d46f..4c13a5e2 100644 --- a/test/unit/test_c_api.cpp +++ b/test/unit/test_c_api.cpp @@ -492,12 +492,14 @@ TEST_F(CApi, proj_as_proj_string) { { auto proj_5 = proj_as_proj_string(m_ctxt, obj, PJ_PROJ_5, nullptr); ASSERT_NE(proj_5, nullptr); - EXPECT_EQ(std::string(proj_5), "+proj=longlat +datum=WGS84 +no_defs"); + EXPECT_EQ(std::string(proj_5), + "+proj=longlat +datum=WGS84 +no_defs +type=crs"); } { auto proj_4 = proj_as_proj_string(m_ctxt, obj, PJ_PROJ_4, nullptr); ASSERT_NE(proj_4, nullptr); - EXPECT_EQ(std::string(proj_4), "+proj=longlat +datum=WGS84 +no_defs"); + EXPECT_EQ(std::string(proj_4), + "+proj=longlat +datum=WGS84 +no_defs +type=crs"); } } @@ -518,22 +520,24 @@ TEST_F(CApi, proj_as_proj_string_incompatible_WKT1) { // --------------------------------------------------------------------------- TEST_F(CApi, proj_as_proj_string_etmerc_option_yes) { - auto obj = proj_create_from_proj_string(m_ctxt, "+proj=tmerc", nullptr); + auto obj = + proj_create_from_proj_string(m_ctxt, "+proj=tmerc +type=crs", nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); const char *options[] = {"USE_ETMERC=YES", nullptr}; auto str = proj_as_proj_string(m_ctxt, obj, PJ_PROJ_4, options); ASSERT_NE(str, nullptr); - EXPECT_EQ(str, std::string("+proj=etmerc +lat_0=0 +lon_0=0 +k=1 +x_0=0 " - "+y_0=0 +datum=WGS84 +units=m +no_defs")); + EXPECT_EQ(str, + std::string("+proj=etmerc +lat_0=0 +lon_0=0 +k=1 +x_0=0 " + "+y_0=0 +datum=WGS84 +units=m +no_defs +type=crs")); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_as_proj_string_etmerc_option_no) { - auto obj = - proj_create_from_proj_string(m_ctxt, "+proj=utm +zone=31", nullptr); + auto obj = proj_create_from_proj_string( + m_ctxt, "+proj=utm +zone=31 +type=crs", nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); @@ -542,7 +546,7 @@ TEST_F(CApi, proj_as_proj_string_etmerc_option_no) { ASSERT_NE(str, nullptr); EXPECT_EQ(str, std::string("+proj=tmerc +lat_0=0 +lon_0=3 +k=0.9996 " "+x_0=500000 +y_0=0 +datum=WGS84 +units=m " - "+no_defs")); + "+no_defs +type=crs")); } // --------------------------------------------------------------------------- @@ -563,7 +567,7 @@ TEST_F(CApi, proj_crs_create_bound_crs_to_WGS84) { "+proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 " "+y_0=500000 +ellps=krass " "+towgs84=2.329,-147.042,-92.08,-0.309,0.325,0.497,5.69 " - "+units=m +no_defs"); + "+units=m +no_defs +type=crs"); auto base_crs = proj_get_source_crs(m_ctxt, res); ObjectKeeper keeper_base_crs(base_crs); @@ -2432,8 +2436,8 @@ TEST_F(CApi, proj_crs_alter_geodetic_crs) { ObjectKeeper keeper(projCRS); ASSERT_NE(projCRS, nullptr); - auto newGeodCRS = - proj_create_from_proj_string(m_ctxt, "+proj=longlat", nullptr); + auto newGeodCRS = proj_create_from_proj_string( + m_ctxt, "+proj=longlat +type=crs", nullptr); ObjectKeeper keeper_newGeodCRS(newGeodCRS); ASSERT_NE(newGeodCRS, nullptr); diff --git a/test/unit/test_crs.cpp b/test/unit/test_crs.cpp index d3309fb2..b71fd248 100644 --- a/test/unit/test_crs.cpp +++ b/test/unit/test_crs.cpp @@ -388,7 +388,7 @@ TEST(crs, EPSG_4326_as_WKT1_ESRI_without_database) { TEST(crs, EPSG_4326_as_PROJ_string) { auto crs = GeographicCRS::EPSG_4326; EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), - "+proj=longlat +datum=WGS84 +no_defs"); + "+proj=longlat +datum=WGS84 +no_defs +type=crs"); } // --------------------------------------------------------------------------- @@ -588,7 +588,7 @@ TEST(crs, EPSG_4807_as_WKT1_ESRI_without_database) { TEST(crs, EPSG_4807_as_PROJ_string) { auto crs = GeographicCRS::EPSG_4807; EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), - "+proj=longlat +ellps=clrk80ign +pm=paris +no_defs"); + "+proj=longlat +ellps=clrk80ign +pm=paris +no_defs +type=crs"); } // --------------------------------------------------------------------------- @@ -611,7 +611,7 @@ TEST(crs, EPSG_4267) { " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4267]]"); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), - "+proj=longlat +datum=NAD27 +no_defs"); + "+proj=longlat +datum=NAD27 +no_defs +type=crs"); } // --------------------------------------------------------------------------- @@ -647,7 +647,7 @@ TEST(crs, EPSG_4269) { " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4269]]"); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), - "+proj=longlat +datum=NAD83 +no_defs"); + "+proj=longlat +datum=NAD83 +no_defs +type=crs"); } // --------------------------------------------------------------------------- @@ -703,10 +703,10 @@ TEST(crs, EPSG_27561_projected_with_geodetic_in_grad_as_PROJ_string_and_WKT1) { " ID[\"EPSG\",27561]]"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); - EXPECT_EQ( - crs->exportToPROJString(PROJStringFormatter::create().get()), - "+proj=lcc +lat_1=49.5 +lat_0=49.5 +lon_0=0 +k_0=0.999877341 " - "+x_0=600000 +y_0=200000 +ellps=clrk80ign +pm=paris +units=m +no_defs"); + EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), + "+proj=lcc +lat_1=49.5 +lat_0=49.5 +lon_0=0 +k_0=0.999877341 " + "+x_0=600000 +y_0=200000 +ellps=clrk80ign +pm=paris +units=m " + "+no_defs +type=crs"); auto nn_crs = NN_CHECK_ASSERT(crs); EXPECT_TRUE(nn_crs->isEquivalentTo(nn_crs.get())); @@ -782,7 +782,7 @@ TEST(crs, EPSG_3040_projected_northing_easting_as_PROJ_string) { auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), - "+proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs"); + "+proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- @@ -813,7 +813,7 @@ TEST(crs, EPSG_2222_projected_unit_foot_as_PROJ_string_and_WKT1) { ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=tmerc +lat_0=31 +lon_0=-110.166666666667 +k=0.9999 " - "+x_0=213360 +y_0=0 +datum=NAD83 +units=ft +no_defs"); + "+x_0=213360 +y_0=0 +datum=NAD83 +units=ft +no_defs +type=crs"); auto wkt1 = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()); @@ -1109,7 +1109,7 @@ TEST(crs, EPSG_4978_as_WKT1_GDAL_with_database) { TEST(crs, geocentricCRS_as_PROJ_string) { auto crs = createGeocentric(); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), - "+proj=geocent +datum=WGS84 +units=m +no_defs"); + "+proj=geocent +datum=WGS84 +units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- @@ -1404,7 +1404,8 @@ TEST(crs, geodeticcrs_identify_db) { { // Identify by ellipsoid description auto obj = PROJStringParser().createFromPROJString( - "+proj=longlat +a=6378521.049 +rf=298.257222100883 +axis=neu"); + "+proj=longlat +a=6378521.049 +rf=298.257222100883 +axis=neu " + "+type=crs"); auto crs = nn_dynamic_pointer_cast<GeodeticCRS>(obj); ASSERT_TRUE(crs != nullptr); auto factoryAll = AuthorityFactory::create(dbContext, std::string()); @@ -1511,7 +1512,7 @@ TEST(crs, projectedCRS_shallowClone) { } EXPECT_EQ(clone->baseCRS()->exportToPROJString( PROJStringFormatter::create().get()), - "+proj=geocent +datum=WGS84 +units=m +no_defs"); + "+proj=geocent +datum=WGS84 +units=m +no_defs +type=crs"); } } @@ -1749,7 +1750,7 @@ TEST(crs, projectedCRS_as_PROJ_string) { "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=utm " "+zone=31 +ellps=WGS84"); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), - "+proj=utm +zone=31 +datum=WGS84 +units=m +no_defs"); + "+proj=utm +zone=31 +datum=WGS84 +units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- @@ -1776,7 +1777,8 @@ TEST(crs, projectedCRS_Krovak_with_approximate_alpha_as_PROJ_string) { // 30deg 17' 17.303'' = 30.288139722222223 as used in GDAL WKT1 auto obj = PROJStringParser().createFromPROJString( "+proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813972222222 " - "+k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs"); + "+k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs " + "+type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); auto op = CoordinateOperationFactory::create()->createOperation( crs->baseCRS(), NN_NO_CHECK(crs)); @@ -1865,7 +1867,7 @@ TEST(crs, projectedCRS_identify_no_db) { { // Tolerance on axis order auto obj = PROJStringParser().createFromPROJString( - "+proj=utm +zone=31 +datum=WGS84"); + "+proj=utm +zone=31 +datum=WGS84 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(nullptr); @@ -1993,7 +1995,7 @@ TEST(crs, projectedCRS_identify_db) { auto obj = PROJStringParser().createFromPROJString( "+proj=omerc +no_uoff +lat_0=4 +lonc=102.25 " "+alpha=323.025796466667 +gamma=323.130102361111 +k=0.99984 " - "+x_0=804671 +y_0=0 +ellps=GRS80"); + "+x_0=804671 +y_0=0 +ellps=GRS80 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryEPSG); @@ -2090,8 +2092,8 @@ TEST(crs, projectedCRS_identify_db) { } { // No equivalent CRS to input one in result set - auto obj = - PROJStringParser().createFromPROJString("+proj=tmerc +datum=WGS84"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=tmerc +datum=WGS84 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryEPSG); @@ -2106,7 +2108,8 @@ TEST(crs, projectedCRS_identify_db) { "+proj=lcc +lat_0=43.5 +lon_0=-93.95 " "+lat_1=43.5666666666667 " "+lat_2=43.8 +x_0=152400.30480061 +y_0=30480.0609601219 " - "+a=6378521.049 +rf=298.257222100883 +units=us-ft"); + "+a=6378521.049 +rf=298.257222100883 +units=us-ft " + "+type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); auto factoryAll = AuthorityFactory::create(dbContext, std::string()); @@ -2130,7 +2133,7 @@ TEST(crs, projectedCRS_identify_db) { .attachDatabaseContext(dbContext) .createFromPROJString( "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 " - "+a=6378140 +b=6356755.288157528 +units=m"); + "+a=6378140 +b=6356755.288157528 +units=m +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryEPSG); @@ -2140,12 +2143,12 @@ TEST(crs, projectedCRS_identify_db) { } { // EPSG:6646 as PROJ.4 string, using clrk80 which is pretty generic - auto obj = - PROJStringParser() - .attachDatabaseContext(dbContext) - .createFromPROJString( - "+proj=tmerc +lat_0=29.02626833333333 +lon_0=46.5 " - "+k=0.9994 +x_0=800000 +y_0=0 +ellps=clrk80 +units=m"); + auto obj = PROJStringParser() + .attachDatabaseContext(dbContext) + .createFromPROJString( + "+proj=tmerc +lat_0=29.02626833333333 +lon_0=46.5 " + "+k=0.9994 +x_0=800000 +y_0=0 +ellps=clrk80 " + "+units=m +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryEPSG); @@ -2161,7 +2164,7 @@ TEST(crs, mercator_1SP_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 " - "+ellps=bessel"); + "+ellps=bessel +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -2188,7 +2191,7 @@ TEST(crs, mercator_1SP_as_WKT1_ESRI) { TEST(crs, Plate_Carree_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( - "+title=my Plate carree +proj=eqc"); + "+title=my Plate carree +proj=eqc +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -2212,7 +2215,7 @@ TEST(crs, Plate_Carree_as_WKT1_ESRI) { TEST(crs, Equidistant_Cylindrical_as_WKT1_ESRI) { - auto obj = PROJStringParser().createFromPROJString("+proj=eqc"); + auto obj = PROJStringParser().createFromPROJString("+proj=eqc +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -2238,7 +2241,7 @@ TEST(crs, Equidistant_Cylindrical_as_WKT1_ESRI) { TEST(crs, Hotine_Oblique_Mercator_Azimuth_Natural_Origin_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( - "+proj=omerc +no_uoff +gamma=295 +alpha=295"); + "+proj=omerc +no_uoff +gamma=295 +alpha=295 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -2268,7 +2271,7 @@ TEST(crs, Hotine_Oblique_Mercator_Azimuth_Natural_Origin_as_WKT1_ESRI) { TEST(crs, Rectified_Skew_Orthomorphic_Natural_Origin_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( - "+proj=omerc +no_uoff +gamma=3 +alpha=2"); + "+proj=omerc +no_uoff +gamma=3 +alpha=2 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -2298,7 +2301,7 @@ TEST(crs, Rectified_Skew_Orthomorphic_Natural_Origin_as_WKT1_ESRI) { TEST(crs, Hotine_Oblique_Mercator_Azimuth_Center_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( - "+proj=omerc +gamma=2 +alpha=2"); + "+proj=omerc +gamma=2 +alpha=2 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -2327,7 +2330,7 @@ TEST(crs, Hotine_Oblique_Mercator_Azimuth_Center_as_WKT1_ESRI) { TEST(crs, Rectified_Skew_Orthomorphic_Center_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( - "+proj=omerc +gamma=3 +alpha=2"); + "+proj=omerc +gamma=3 +alpha=2 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -2357,7 +2360,7 @@ TEST(crs, Rectified_Skew_Orthomorphic_Center_as_WKT1_ESRI) { TEST(crs, Gauss_Kruger_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( - "+title=my Gauss Kruger +proj=tmerc"); + "+title=my Gauss Kruger +proj=tmerc +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -2384,7 +2387,7 @@ TEST(crs, Gauss_Kruger_as_WKT1_ESRI) { TEST(crs, Stereographic_North_Pole_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( - "+proj=stere +lat_0=90 +lat_ts=70"); + "+proj=stere +lat_0=90 +lat_ts=70 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -2410,7 +2413,7 @@ TEST(crs, Stereographic_North_Pole_as_WKT1_ESRI) { TEST(crs, Stereographic_South_Pole_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( - "+proj=stere +lat_0=-90 +lat_ts=-70"); + "+proj=stere +lat_0=-90 +lat_ts=-70 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -2435,7 +2438,8 @@ TEST(crs, Stereographic_South_Pole_as_WKT1_ESRI) { TEST(crs, Krovak_North_Orientated_as_WKT1_ESRI) { - auto obj = PROJStringParser().createFromPROJString("+proj=krovak"); + auto obj = + PROJStringParser().createFromPROJString("+proj=krovak +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -2466,8 +2470,8 @@ TEST(crs, Krovak_North_Orientated_as_WKT1_ESRI) { TEST(crs, Krovak_as_WKT1_ESRI) { - auto obj = - PROJStringParser().createFromPROJString("+proj=krovak +axis=swu"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=krovak +axis=swu +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -2499,7 +2503,7 @@ TEST(crs, Krovak_as_WKT1_ESRI) { TEST(crs, LCC_1SP_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( - "+proj=lcc +lat_1=1 +lat_0=1 +k=0.9"); + "+proj=lcc +lat_1=1 +lat_0=1 +k=0.9 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -2527,7 +2531,7 @@ TEST(crs, LCC_1SP_as_WKT1_ESRI) { TEST(crs, LCC_2SP_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( - "+proj=lcc +lat_0=1.5 +lat_1=1 +lat_2=2"); + "+proj=lcc +lat_0=1.5 +lat_1=1 +lat_2=2 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -3122,7 +3126,8 @@ TEST(crs, compoundCRS_as_WKT1_GDAL) { TEST(crs, compoundCRS_as_PROJ_string) { auto crs = createCompoundCRS(); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), - "+proj=utm +zone=31 +datum=WGS84 +units=m +vunits=m +no_defs"); + "+proj=utm +zone=31 +datum=WGS84 +units=m +vunits=m +no_defs " + "+type=crs"); } // --------------------------------------------------------------------------- @@ -3539,8 +3544,9 @@ TEST(crs, boundCRS_geographicCRS_to_PROJ_string) { auto crs = BoundCRS::createFromTOWGS84( basecrs, std::vector<double>{1, 2, 3, 4, 5, 6, 7}); - EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), - "+proj=longlat +ellps=WGS84 +towgs84=1,2,3,4,5,6,7 +no_defs"); + EXPECT_EQ( + crs->exportToPROJString(PROJStringFormatter::create().get()), + "+proj=longlat +ellps=WGS84 +towgs84=1,2,3,4,5,6,7 +no_defs +type=crs"); } // --------------------------------------------------------------------------- @@ -3561,7 +3567,7 @@ TEST(crs, boundCRS_projectedCRS_to_PROJ_string) { EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=utm +zone=31 +ellps=WGS84 +towgs84=1,2,3,4,5,6,7 +units=m " - "+no_defs"); + "+no_defs +type=crs"); } // --------------------------------------------------------------------------- @@ -3570,13 +3576,13 @@ TEST(crs, boundCRS_identify_db) { auto dbContext = DatabaseContext::create(); auto factoryEPSG = AuthorityFactory::create(dbContext, "EPSG"); { - auto obj = - PROJStringParser() - .attachDatabaseContext(dbContext) - .createFromPROJString("+proj=tmerc +lat_0=-37.76111111111111 " - "+lon_0=176.4661111111111 +k=1 " - "+x_0=400000 +y_0=800000 +ellps=GRS80 " - "+towgs84=0,0,0,0,0,0,0 +units=m"); + auto obj = PROJStringParser() + .attachDatabaseContext(dbContext) + .createFromPROJString( + "+proj=tmerc +lat_0=-37.76111111111111 " + "+lon_0=176.4661111111111 +k=1 " + "+x_0=400000 +y_0=800000 +ellps=GRS80 " + "+towgs84=0,0,0,0,0,0,0 +units=m +type=crs"); auto crs = nn_dynamic_pointer_cast<BoundCRS>(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryEPSG); @@ -3687,9 +3693,10 @@ TEST(crs, WKT1_DATUM_EXTENSION_to_WKT1_and_PROJ_string) { WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), wkt); - EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), - "+proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 " - "+ellps=intl +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs"); + EXPECT_EQ( + crs->exportToPROJString(PROJStringFormatter::create().get()), + "+proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 " + "+ellps=intl +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- @@ -3786,7 +3793,7 @@ TEST(crs, WKT1_VERT_DATUM_EXTENSION_to_PROJ_string) { ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), - "+geoidgrids=egm08_25.gtx +vunits=m +no_defs"); + "+geoidgrids=egm08_25.gtx +vunits=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- @@ -4747,7 +4754,7 @@ TEST(crs, crs_createBoundCRSToWGS84IfPossible) { "+proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 " "+y_0=500000 +ellps=krass " "+towgs84=2.329,-147.042,-92.08,-0.309,0.325,0.497,5.69 " - "+units=m +no_defs"); + "+units=m +no_defs +type=crs"); } { // Pulkovo 42 Poland @@ -4764,7 +4771,7 @@ TEST(crs, crs_createBoundCRSToWGS84IfPossible) { "+proj=sterea +lat_0=50.625 +lon_0=21.0833333333333 " "+k=0.9998 +x_0=4637000 +y_0=5647000 +ellps=krass " "+towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 " - "+units=m +no_defs"); + "+units=m +no_defs +type=crs"); } { // NTF (Paris) @@ -4779,7 +4786,7 @@ TEST(crs, crs_createBoundCRSToWGS84IfPossible) { EXPECT_EQ( boundCRS->exportToPROJString(PROJStringFormatter::create().get()), "+proj=longlat +ellps=clrk80ign +pm=paris " - "+towgs84=-168,-60,320,0,0,0,0 +no_defs"); + "+towgs84=-168,-60,320,0,0,0,0 +no_defs +type=crs"); } { // NTF (Paris) / Lambert zone II + NGF-IGN69 height @@ -4796,7 +4803,7 @@ TEST(crs, crs_createBoundCRSToWGS84IfPossible) { "+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"); + "+vunits=m +no_defs +type=crs"); } { auto crs = createVerticalCRS(); @@ -4814,7 +4821,7 @@ TEST(crs, crs_createBoundCRSToWGS84IfPossible) { boundCRS->exportToPROJString(PROJStringFormatter::create().get()), "+proj=stere +lat_0=-90 +lon_0=140 +k=0.960272946 " "+x_0=300000 +y_0=-2299363.482 +ellps=intl " - "+towgs84=324.8,153.6,172.1,0,0,0,0 +units=m +no_defs"); + "+towgs84=324.8,153.6,172.1,0,0,0,0 +units=m +no_defs +type=crs"); } { auto factoryIGNF = @@ -4827,7 +4834,7 @@ TEST(crs, crs_createBoundCRSToWGS84IfPossible) { EXPECT_EQ( boundCRS->exportToPROJString(PROJStringFormatter::create().get()), "+proj=geocent +ellps=intl " - "+towgs84=324.8,153.6,172.1,0,0,0,0 +units=m +no_defs"); + "+towgs84=324.8,153.6,172.1,0,0,0,0 +units=m +no_defs +type=crs"); } { auto crs = factory->createCoordinateReferenceSystem("4269"); // NAD83 diff --git a/test/unit/test_factory.cpp b/test/unit/test_factory.cpp index e9b29728..027c0188 100644 --- a/test/unit/test_factory.cpp +++ b/test/unit/test_factory.cpp @@ -409,7 +409,7 @@ TEST(factory, AuthorityFactory_createGeodeticCRS_geographic2D) { EXPECT_TRUE(extent->isEquivalentTo(factory->createExtent("1262").get())); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), - "+proj=longlat +datum=WGS84 +no_defs"); + "+proj=longlat +datum=WGS84 +no_defs +type=crs"); } // --------------------------------------------------------------------------- @@ -972,7 +972,7 @@ TEST(factory, AuthorityFactory_test_uom_9110) { EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=sterea +lat_0=53.0019444444444 +lon_0=21.5027777777778 " "+k=0.9998 +x_0=4603000 +y_0=5806000 +ellps=krass +units=m " - "+no_defs"); + "+no_defs +type=crs"); } // --------------------------------------------------------------------------- @@ -2324,7 +2324,8 @@ TEST_F(FactoryWithTmpDatabase, custom_projected_crs) { EXPECT_EQ(crs->identifiers().size(), 1); EXPECT_EQ(crs->derivingConversion()->targetCRS().get(), crs.get()); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), - "+proj=mbt_s +unused_flag +datum=WGS84 +units=m +no_defs"); + "+proj=mbt_s +unused_flag +datum=WGS84 +units=m +no_defs " + "+type=crs"); EXPECT_TRUE(crs->canonicalBoundCRS() == nullptr); } { @@ -2333,15 +2334,16 @@ TEST_F(FactoryWithTmpDatabase, custom_projected_crs) { EXPECT_EQ(crs->identifiers().size(), 1); EXPECT_EQ(crs->derivingConversion()->targetCRS().get(), crs.get()); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), - "+proj=mbt_s +unused_flag +datum=WGS84 +units=m +no_defs"); + "+proj=mbt_s +unused_flag +datum=WGS84 +units=m +no_defs " + "+type=crs"); EXPECT_TRUE(crs->canonicalBoundCRS() != nullptr); } EXPECT_THROW(factory->createProjectedCRS("TEST_WRONG"), FactoryException); { - auto obj = - PROJStringParser().createFromPROJString("+proj=merc +a=1 +b=1"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=merc +a=1 +b=1 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factory); @@ -2352,8 +2354,8 @@ TEST_F(FactoryWithTmpDatabase, custom_projected_crs) { } { - auto obj = - PROJStringParser().createFromPROJString("+proj=merc +ellps=GRS80"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=merc +ellps=GRS80 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factory); @@ -2365,7 +2367,7 @@ TEST_F(FactoryWithTmpDatabase, custom_projected_crs) { { auto obj = PROJStringParser().createFromPROJString( - "+proj=merc +a=6378137 +rf=298.257222101"); + "+proj=merc +a=6378137 +rf=298.257222101 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factory); @@ -2376,8 +2378,8 @@ TEST_F(FactoryWithTmpDatabase, custom_projected_crs) { } { - auto obj = - PROJStringParser().createFromPROJString("+proj=merc +ellps=WGS84"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=merc +ellps=WGS84 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factory); diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp index 43b74fd8..7b75cdc8 100644 --- a/test/unit/test_io.cpp +++ b/test/unit/test_io.cpp @@ -587,7 +587,7 @@ TEST(wkt_parse, wkt1_geographic_with_PROJ4_extension) { crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), - "+proj=longlat +foo=bar +wktext"); + "+proj=longlat +foo=bar +wktext +type=crs"); EXPECT_TRUE( crs->exportToWKT(WKTFormatter::create().get()).find("EXTENSION") == @@ -624,7 +624,7 @@ TEST(wkt_parse, wkt1_geocentric_with_PROJ4_extension) { crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), - "+proj=geocent +foo=bar +wktext"); + "+proj=geocent +foo=bar +wktext +type=crs"); EXPECT_TRUE( crs->exportToWKT(WKTFormatter::create().get()).find("EXTENSION") == @@ -1133,7 +1133,7 @@ TEST(wkt_parse, wkt1_projected_with_PROJ4_extension) { crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), - "+proj=merc +wktext"); + "+proj=merc +wktext +type=crs"); EXPECT_TRUE( crs->exportToWKT(WKTFormatter::create().get()).find("EXTENSION") == @@ -1256,7 +1256,7 @@ TEST(wkt_parse, wkt1_krovak_south_west) { auto expectedPROJString = "+proj=krovak +axis=swu +lat_0=49.5 " "+lon_0=24.8333333333333 +alpha=30.2881397222222 " "+k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m " - "+no_defs"; + "+no_defs +type=crs"; EXPECT_EQ(projString, expectedPROJString); obj = PROJStringParser().createFromPROJString(projString); @@ -1369,7 +1369,7 @@ TEST(wkt_parse, wkt1_krovak_north_oriented) { EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=krovak +lat_0=49.5 +lon_0=24.8333333333333 " "+alpha=30.2881397222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel " - "+units=m +no_defs"); + "+units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- @@ -1400,8 +1400,9 @@ TEST(wkt_parse, wkt1_polar_stereographic_latitude_of_origin_70) { auto projString = crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()); - auto expectedPROJString = "+proj=stere +lat_0=90 +lat_ts=70 +lon_0=2 " - "+x_0=3 +y_0=4 +datum=WGS84 +units=m +no_defs"; + auto expectedPROJString = + "+proj=stere +lat_0=90 +lat_ts=70 +lon_0=2 " + "+x_0=3 +y_0=4 +datum=WGS84 +units=m +no_defs +type=crs"; EXPECT_EQ(projString, expectedPROJString); EXPECT_EQ(crs->coordinateSystem()->axisList()[0]->nameStr(), "Easting"); @@ -1473,8 +1474,9 @@ TEST(wkt_parse, wkt1_polar_stereographic_latitude_of_origin_90) { auto projString = crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()); - auto expectedPROJString = "+proj=stere +lat_0=90 +lat_ts=90 +lon_0=2 " - "+x_0=3 +y_0=4 +datum=WGS84 +units=m +no_defs"; + auto expectedPROJString = + "+proj=stere +lat_0=90 +lat_ts=90 +lon_0=2 " + "+x_0=3 +y_0=4 +datum=WGS84 +units=m +no_defs +type=crs"; EXPECT_EQ(projString, expectedPROJString); } @@ -1507,8 +1509,9 @@ TEST(wkt_parse, wkt1_polar_stereographic_latitude_of_origin_90_scale_factor_1) { auto projString = crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()); - auto expectedPROJString = "+proj=stere +lat_0=90 +lat_ts=90 +lon_0=2 " - "+x_0=3 +y_0=4 +datum=WGS84 +units=m +no_defs"; + auto expectedPROJString = + "+proj=stere +lat_0=90 +lat_ts=90 +lon_0=2 " + "+x_0=3 +y_0=4 +datum=WGS84 +units=m +no_defs +type=crs"; EXPECT_EQ(projString, expectedPROJString); } @@ -1542,7 +1545,7 @@ TEST(wkt_parse, wkt1_polar_stereographic_scale_factor) { PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()); auto expectedPROJString = "+proj=stere +lat_0=90 +lon_0=2 +k=0.99 +x_0=3 " - "+y_0=4 +datum=WGS84 +units=m +no_defs"; + "+y_0=4 +datum=WGS84 +units=m +no_defs +type=crs"; EXPECT_EQ(projString, expectedPROJString); } @@ -1575,7 +1578,7 @@ TEST(wkt_parse, wkt1_Spherical_Cross_Track_Height) { PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()); auto expectedPROJString = "+proj=sch +plat_0=1 +plon_0=2 +phdg_0=3 +h_0=4 " - "+datum=WGS84 +units=m +no_defs"; + "+datum=WGS84 +units=m +no_defs +type=crs"; EXPECT_EQ(projString, expectedPROJString); } @@ -1694,7 +1697,7 @@ TEST(wkt_parse, wkt2_2018_projected_3D) { PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 " - "+units=m +no_defs"); + "+units=m +no_defs +type=crs"); EXPECT_THROW( crs->exportToWKT( @@ -1739,7 +1742,7 @@ TEST(wkt_parse, wkt2_2018_projected_utm_3D) { crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), - "+proj=utm +zone=31 +ellps=WGS84 +units=m +no_defs"); + "+proj=utm +zone=31 +ellps=WGS84 +units=m +no_defs +type=crs"); EXPECT_THROW( crs->exportToWKT( @@ -6471,7 +6474,8 @@ TEST(io, projparse_longlat) { " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]]]"; { - auto obj = PROJStringParser().createFromPROJString("+proj=longlat"); + auto obj = + PROJStringParser().createFromPROJString("+proj=longlat +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -6481,7 +6485,7 @@ TEST(io, projparse_longlat) { { auto obj = PROJStringParser().createFromPROJString( - "+proj=longlat +datum=WGS84"); + "+proj=longlat +datum=WGS84 +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -6493,8 +6497,8 @@ TEST(io, projparse_longlat) { // --------------------------------------------------------------------------- TEST(io, projparse_longlat_datum_NAD83) { - auto obj = - PROJStringParser().createFromPROJString("+proj=longlat +datum=NAD83"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=longlat +datum=NAD83 +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -6522,8 +6526,8 @@ TEST(io, projparse_longlat_datum_NAD83) { // --------------------------------------------------------------------------- TEST(io, projparse_longlat_datum_NAD27) { - auto obj = - PROJStringParser().createFromPROJString("+proj=longlat +datum=NAD27"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=longlat +datum=NAD27 +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -6552,7 +6556,7 @@ TEST(io, projparse_longlat_datum_NAD27) { TEST(io, projparse_longlat_datum_other) { auto obj = PROJStringParser().createFromPROJString( - "+proj=longlat +datum=carthage"); + "+proj=longlat +datum=carthage +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -6580,8 +6584,8 @@ TEST(io, projparse_longlat_datum_other) { // --------------------------------------------------------------------------- TEST(io, projparse_longlat_ellps_WGS84) { - auto obj = - PROJStringParser().createFromPROJString("+proj=longlat +ellps=WGS84"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=longlat +ellps=WGS84 +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -6606,8 +6610,8 @@ TEST(io, projparse_longlat_ellps_WGS84) { // --------------------------------------------------------------------------- TEST(io, projparse_longlat_ellps_GRS80) { - auto obj = - PROJStringParser().createFromPROJString("+proj=longlat +ellps=GRS80"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=longlat +ellps=GRS80 +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -6632,8 +6636,8 @@ TEST(io, projparse_longlat_ellps_GRS80) { // --------------------------------------------------------------------------- TEST(io, projparse_longlat_a_b) { - auto obj = - PROJStringParser().createFromPROJString("+proj=longlat +a=2 +b=1.5"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=longlat +a=2 +b=1.5 +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -6660,7 +6664,7 @@ TEST(io, projparse_longlat_a_b) { TEST(io, projparse_longlat_a_rf_WGS84) { auto obj = PROJStringParser().createFromPROJString( - "+proj=longlat +a=6378137 +rf=298.257223563"); + "+proj=longlat +a=6378137 +rf=298.257223563 +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -6686,8 +6690,8 @@ TEST(io, projparse_longlat_a_rf_WGS84) { // --------------------------------------------------------------------------- TEST(io, projparse_longlat_a_rf) { - auto obj = - PROJStringParser().createFromPROJString("+proj=longlat +a=2 +rf=4"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=longlat +a=2 +rf=4 +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -6712,8 +6716,8 @@ TEST(io, projparse_longlat_a_rf) { // --------------------------------------------------------------------------- TEST(io, projparse_longlat_a_f_zero) { - auto obj = - PROJStringParser().createFromPROJString("+proj=longlat +a=2 +f=0"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=longlat +a=2 +f=0 +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -6738,8 +6742,8 @@ TEST(io, projparse_longlat_a_f_zero) { // --------------------------------------------------------------------------- TEST(io, projparse_longlat_a_f_non_zero) { - auto obj = - PROJStringParser().createFromPROJString("+proj=longlat +a=2 +f=0.5"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=longlat +a=2 +f=0.5 +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->ellipsoid()->semiMajorAxis().getSIValue(), 2); @@ -6750,8 +6754,8 @@ TEST(io, projparse_longlat_a_f_non_zero) { // --------------------------------------------------------------------------- TEST(io, projparse_longlat_a_e) { - auto obj = - PROJStringParser().createFromPROJString("+proj=longlat +a=2 +e=0.5"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=longlat +a=2 +e=0.5 +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->ellipsoid()->semiMajorAxis().getSIValue(), 2); @@ -6762,8 +6766,8 @@ TEST(io, projparse_longlat_a_e) { // --------------------------------------------------------------------------- TEST(io, projparse_longlat_a_es) { - auto obj = - PROJStringParser().createFromPROJString("+proj=longlat +a=2 +es=0.5"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=longlat +a=2 +es=0.5 +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->ellipsoid()->semiMajorAxis().getSIValue(), 2); @@ -6774,7 +6778,8 @@ TEST(io, projparse_longlat_a_es) { // --------------------------------------------------------------------------- TEST(io, projparse_longlat_R) { - auto obj = PROJStringParser().createFromPROJString("+proj=longlat +R=2"); + auto obj = + PROJStringParser().createFromPROJString("+proj=longlat +R=2 +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); EXPECT_TRUE(crs->ellipsoid()->isSphere()); @@ -6784,7 +6789,8 @@ TEST(io, projparse_longlat_R) { // --------------------------------------------------------------------------- TEST(io, projparse_longlat_a) { - auto obj = PROJStringParser().createFromPROJString("+proj=longlat +a=2"); + auto obj = + PROJStringParser().createFromPROJString("+proj=longlat +a=2 +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); EXPECT_TRUE(crs->ellipsoid()->isSphere()); @@ -6795,7 +6801,7 @@ TEST(io, projparse_longlat_a) { TEST(io, projparse_longlat_a_override_ellps) { auto obj = PROJStringParser().createFromPROJString( - "+proj=longlat +a=2 +ellps=WGS84"); + "+proj=longlat +a=2 +ellps=WGS84 +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); EXPECT_TRUE(!crs->ellipsoid()->isSphere()); @@ -6807,8 +6813,8 @@ TEST(io, projparse_longlat_a_override_ellps) { // --------------------------------------------------------------------------- TEST(io, projparse_longlat_pm_paris) { - auto obj = - PROJStringParser().createFromPROJString("+proj=longlat +pm=paris"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=longlat +pm=paris +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -6835,7 +6841,7 @@ TEST(io, projparse_longlat_pm_paris) { TEST(io, projparse_longlat_pm_ferro) { auto obj = PROJStringParser().createFromPROJString( - "+proj=longlat +ellps=bessel +pm=ferro"); + "+proj=longlat +ellps=bessel +pm=ferro +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -6862,7 +6868,8 @@ TEST(io, projparse_longlat_pm_ferro) { // --------------------------------------------------------------------------- TEST(io, projparse_longlat_pm_numeric) { - auto obj = PROJStringParser().createFromPROJString("+proj=longlat +pm=2.5"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=longlat +pm=2.5 +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -6894,7 +6901,7 @@ TEST(io, projparse_longlat_pm_overriding_datum) { // of GDAL. So let's keep the ellipsoid part of the datum in that case and // use the specified prime meridian. auto obj = PROJStringParser().createFromPROJString( - "+proj=longlat +datum=WGS84 +pm=ferro"); + "+proj=longlat +datum=WGS84 +pm=ferro +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->datum()->nameStr(), "Unknown based on WGS 84 ellipsoid"); @@ -6925,7 +6932,7 @@ TEST(io, projparse_longlat_complex) { TEST(io, projparse_longlat_towgs84_3_terms) { auto obj = PROJStringParser().createFromPROJString( - "+proj=longlat +ellps=GRS80 +towgs84=1.2,2,3"); + "+proj=longlat +ellps=GRS80 +towgs84=1.2,2,3 +type=crs"); auto crs = nn_dynamic_pointer_cast<BoundCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -6950,14 +6957,15 @@ TEST(io, projparse_longlat_towgs84_3_terms) { crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), - "+proj=longlat +ellps=GRS80 +towgs84=1.2,2,3,0,0,0,0 +no_defs"); + "+proj=longlat +ellps=GRS80 +towgs84=1.2,2,3,0,0,0,0 +no_defs " + "+type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_towgs84_7_terms) { auto obj = PROJStringParser().createFromPROJString( - "+proj=longlat +ellps=GRS80 +towgs84=1.2,2,3,4,5,6,7"); + "+proj=longlat +ellps=GRS80 +towgs84=1.2,2,3,4,5,6,7 +type=crs"); auto crs = nn_dynamic_pointer_cast<BoundCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -6985,14 +6993,15 @@ TEST(io, projparse_longlat_towgs84_7_terms) { crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), - "+proj=longlat +ellps=GRS80 +towgs84=1.2,2,3,4,5,6,7 +no_defs"); + "+proj=longlat +ellps=GRS80 +towgs84=1.2,2,3,4,5,6,7 +no_defs " + "+type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_nadgrids) { auto obj = PROJStringParser().createFromPROJString( - "+proj=longlat +ellps=GRS80 +nadgrids=foo.gsb"); + "+proj=longlat +ellps=GRS80 +nadgrids=foo.gsb +type=crs"); auto crs = nn_dynamic_pointer_cast<BoundCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7009,14 +7018,14 @@ TEST(io, projparse_longlat_nadgrids) { crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), - "+proj=longlat +ellps=GRS80 +nadgrids=foo.gsb +no_defs"); + "+proj=longlat +ellps=GRS80 +nadgrids=foo.gsb +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_geoidgrids) { auto obj = PROJStringParser().createFromPROJString( - "+proj=longlat +ellps=GRS80 +geoidgrids=foo.gtx"); + "+proj=longlat +ellps=GRS80 +geoidgrids=foo.gtx +type=crs"); auto crs = nn_dynamic_pointer_cast<CompoundCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7037,14 +7046,15 @@ TEST(io, projparse_longlat_geoidgrids) { crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), - "+proj=longlat +ellps=GRS80 +geoidgrids=foo.gtx +vunits=m +no_defs"); + "+proj=longlat +ellps=GRS80 +geoidgrids=foo.gtx +vunits=m +no_defs " + "+type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_geoidgrids_vunits) { auto obj = PROJStringParser().createFromPROJString( - "+proj=longlat +ellps=GRS80 +geoidgrids=foo.gtx +vunits=ft"); + "+proj=longlat +ellps=GRS80 +geoidgrids=foo.gtx +vunits=ft +type=crs"); auto crs = nn_dynamic_pointer_cast<CompoundCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7063,7 +7073,7 @@ TEST(io, projparse_longlat_geoidgrids_vunits) { TEST(io, projparse_longlat_vunits) { auto obj = PROJStringParser().createFromPROJString( - "+proj=longlat +ellps=GRS80 +vunits=ft"); + "+proj=longlat +ellps=GRS80 +vunits=ft +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7081,28 +7091,29 @@ TEST(io, projparse_longlat_vunits) { // --------------------------------------------------------------------------- TEST(io, projparse_vunits) { - auto obj = PROJStringParser().createFromPROJString("+vunits=ft"); + auto obj = PROJStringParser().createFromPROJString("+vunits=ft +type=crs"); auto crs = nn_dynamic_pointer_cast<VerticalCRS>(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), - "+vunits=ft +no_defs"); + "+vunits=ft +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_vto_meter) { - auto obj = PROJStringParser().createFromPROJString("+vto_meter=2"); + auto obj = + PROJStringParser().createFromPROJString("+vto_meter=2 +type=crs"); auto crs = nn_dynamic_pointer_cast<VerticalCRS>(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), - "+vto_meter=2 +no_defs"); + "+vto_meter=2 +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_axis_enu) { auto obj = PROJStringParser().createFromPROJString( - "+proj=longlat +ellps=GRS80 +axis=enu"); + "+proj=longlat +ellps=GRS80 +axis=enu +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7129,7 +7140,7 @@ TEST(io, projparse_longlat_axis_enu) { TEST(io, projparse_longlat_axis_neu) { auto obj = PROJStringParser().createFromPROJString( - "+proj=longlat +ellps=GRS80 +axis=neu"); + "+proj=longlat +ellps=GRS80 +axis=neu +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7155,7 +7166,7 @@ TEST(io, projparse_longlat_axis_neu) { TEST(io, projparse_longlat_axis_swu) { auto obj = PROJStringParser().createFromPROJString( - "+proj=longlat +ellps=GRS80 +axis=swu"); + "+proj=longlat +ellps=GRS80 +axis=swu +type=crs"); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7263,7 +7274,7 @@ TEST(io, projparse_longlat_axisswap) { TEST(io, projparse_tmerc) { auto obj = PROJStringParser().createFromPROJString( - "+proj=tmerc +x_0=1 +lat_0=1 +k_0=2"); + "+proj=tmerc +x_0=1 +lat_0=1 +k_0=2 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7309,7 +7320,7 @@ TEST(io, projparse_tmerc) { TEST(io, projparse_tmerc_south_oriented) { auto obj = PROJStringParser().createFromPROJString( - "+proj=tmerc +axis=wsu +x_0=1 +lat_0=1 +k_0=2"); + "+proj=tmerc +axis=wsu +x_0=1 +lat_0=1 +k_0=2 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7363,7 +7374,7 @@ TEST(io, projparse_tmerc_south_oriented) { TEST(io, projparse_lcc_as_lcc1sp) { auto obj = PROJStringParser().createFromPROJString( - "+proj=lcc +lat_0=45 +lat_1=45"); + "+proj=lcc +lat_0=45 +lat_1=45 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7379,7 +7390,7 @@ TEST(io, projparse_lcc_as_lcc1sp) { TEST(io, projparse_lcc_as_lcc2sp) { auto obj = PROJStringParser().createFromPROJString( - "+proj=lcc +lat_0=45 +lat_1=46"); + "+proj=lcc +lat_0=45 +lat_1=46 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7395,7 +7406,7 @@ TEST(io, projparse_lcc_as_lcc2sp) { TEST(io, projparse_lcc_as_lcc2sp_michigan) { auto obj = PROJStringParser().createFromPROJString( - "+proj=lcc +lat_0=45 +lat_1=46 +k_0=1.02"); + "+proj=lcc +lat_0=45 +lat_1=46 +k_0=1.02 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7411,7 +7422,8 @@ TEST(io, projparse_lcc_as_lcc2sp_michigan) { // --------------------------------------------------------------------------- TEST(io, projparse_aeqd_guam) { - auto obj = PROJStringParser().createFromPROJString("+proj=aeqd +guam"); + auto obj = + PROJStringParser().createFromPROJString("+proj=aeqd +guam +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7425,8 +7437,8 @@ TEST(io, projparse_aeqd_guam) { // --------------------------------------------------------------------------- TEST(io, projparse_cea_ellipsoidal) { - auto obj = - PROJStringParser().createFromPROJString("+proj=cea +ellps=GRS80"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=cea +ellps=GRS80 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7444,7 +7456,8 @@ TEST(io, projparse_cea_ellipsoidal) { // --------------------------------------------------------------------------- TEST(io, projparse_geos_sweep_x) { - auto obj = PROJStringParser().createFromPROJString("+proj=geos +sweep=x"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=geos +sweep=x +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7460,7 +7473,7 @@ TEST(io, projparse_geos_sweep_x) { // --------------------------------------------------------------------------- TEST(io, projparse_geos_sweep_y) { - auto obj = PROJStringParser().createFromPROJString("+proj=geos"); + auto obj = PROJStringParser().createFromPROJString("+proj=geos +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7477,7 +7490,7 @@ TEST(io, projparse_geos_sweep_y) { TEST(io, projparse_omerc_nouoff) { auto obj = PROJStringParser().createFromPROJString( - "+proj=omerc +no_uoff +alpha=2 +gamma=3"); + "+proj=omerc +no_uoff +alpha=2 +gamma=3 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7500,7 +7513,7 @@ TEST(io, projparse_omerc_nouoff) { TEST(io, projparse_omerc_tpno) { auto obj = PROJStringParser().createFromPROJString( - "+proj=omerc +lat_1=1 +lat_2=2 +lon_1=3 +lon_2=4"); + "+proj=omerc +lat_1=1 +lat_2=2 +lon_1=3 +lon_2=4 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7518,7 +7531,8 @@ TEST(io, projparse_omerc_tpno) { // --------------------------------------------------------------------------- TEST(io, projparse_omerc_variant_b) { - auto obj = PROJStringParser().createFromPROJString("+proj=omerc +alpha=2"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=omerc +alpha=2 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7538,7 +7552,7 @@ TEST(io, projparse_omerc_variant_b) { TEST(io, projparse_somerc) { auto obj = PROJStringParser().createFromPROJString( - "+proj=somerc +lat_0=1 +lon_0=2 +k_0=3 +x_0=4 +y_0=5"); + "+proj=somerc +lat_0=1 +lon_0=2 +k_0=3 +x_0=4 +y_0=5 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7574,7 +7588,8 @@ TEST(io, projparse_somerc) { // --------------------------------------------------------------------------- TEST(io, projparse_krovak) { - auto obj = PROJStringParser().createFromPROJString("+proj=krovak"); + auto obj = + PROJStringParser().createFromPROJString("+proj=krovak +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7591,8 +7606,8 @@ TEST(io, projparse_krovak) { // --------------------------------------------------------------------------- TEST(io, projparse_krovak_axis_swu) { - auto obj = - PROJStringParser().createFromPROJString("+proj=krovak +axis=swu"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=krovak +axis=swu +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7608,7 +7623,8 @@ TEST(io, projparse_krovak_axis_swu) { // --------------------------------------------------------------------------- TEST(io, projparse_etmerc) { - auto obj = PROJStringParser().createFromPROJString("+proj=etmerc"); + auto obj = + PROJStringParser().createFromPROJString("+proj=etmerc +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); auto wkt2 = crs->exportToWKT( @@ -7623,7 +7639,7 @@ TEST(io, projparse_etmerc) { PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=etmerc +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 " - "+datum=WGS84 +units=m +no_defs"); + "+datum=WGS84 +units=m +no_defs +type=crs"); auto wkt1 = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()); @@ -7636,7 +7652,8 @@ TEST(io, projparse_etmerc) { // --------------------------------------------------------------------------- TEST(io, projparse_merc_variant_B) { - auto obj = PROJStringParser().createFromPROJString("+proj=merc +lat_ts=1"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=merc +lat_ts=1 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7658,7 +7675,7 @@ TEST(io, projparse_merc_variant_B) { TEST(io, projparse_merc_google_mercator) { auto obj = PROJStringParser().createFromPROJString( "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 " - "+k=1 +units=m +nadgrids=@null"); + "+k=1 +units=m +nadgrids=@null +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7675,7 +7692,7 @@ TEST(io, projparse_merc_google_mercator) { TEST(io, projparse_merc_stere_polar_variant_B) { auto obj = PROJStringParser().createFromPROJString( - "+proj=stere +lat_0=90 +lat_ts=70"); + "+proj=stere +lat_0=90 +lat_ts=70 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7694,7 +7711,7 @@ TEST(io, projparse_merc_stere_polar_variant_B) { TEST(io, projparse_merc_stere_polar_variant_A) { auto obj = PROJStringParser().createFromPROJString( - "+proj=stere +lat_0=-90 +k=0.994"); + "+proj=stere +lat_0=-90 +k=0.994 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7713,7 +7730,7 @@ TEST(io, projparse_merc_stere_polar_variant_A) { TEST(io, projparse_merc_stere_polar_k_and_lat_ts) { auto obj = PROJStringParser().createFromPROJString( - "+proj=stere +lat_0=90 +lat_ts=90 +k=1"); + "+proj=stere +lat_0=90 +lat_ts=90 +k=1 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); auto wkt = crs->exportToWKT( @@ -7731,21 +7748,22 @@ TEST(io, projparse_merc_stere_polar_k_and_lat_ts) { PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 " - "+units=m +no_defs"); + "+units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_merc_stere_polar_k_and_lat_ts_incompatible) { EXPECT_THROW(PROJStringParser().createFromPROJString( - "+proj=stere +lat_0=90 +lat_ts=70 +k=0.994"), + "+proj=stere +lat_0=90 +lat_ts=70 +k=0.994 +type=crs"), ParsingException); } // --------------------------------------------------------------------------- TEST(io, projparse_merc_stere) { - auto obj = PROJStringParser().createFromPROJString("+proj=stere +lat_0=30"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=stere +lat_0=30 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7760,7 +7778,8 @@ TEST(io, projparse_merc_stere) { // --------------------------------------------------------------------------- TEST(io, projparse_utm) { - auto obj = PROJStringParser().createFromPROJString("+proj=utm +zone=1"); + auto obj = + PROJStringParser().createFromPROJString("+proj=utm +zone=1 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7780,8 +7799,8 @@ TEST(io, projparse_utm) { // --------------------------------------------------------------------------- TEST(io, projparse_utm_south) { - auto obj = - PROJStringParser().createFromPROJString("+proj=utm +zone=1 +south"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=utm +zone=1 +south +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7802,7 +7821,8 @@ TEST(io, projparse_utm_south) { // --------------------------------------------------------------------------- TEST(io, projparse_laea_north_pole) { - auto obj = PROJStringParser().createFromPROJString("+proj=laea +lat_0=90"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=laea +lat_0=90 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7817,7 +7837,8 @@ TEST(io, projparse_laea_north_pole) { // --------------------------------------------------------------------------- TEST(io, projparse_laea_south_pole) { - auto obj = PROJStringParser().createFromPROJString("+proj=laea +lat_0=-90"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=laea +lat_0=-90 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7832,7 +7853,8 @@ TEST(io, projparse_laea_south_pole) { // --------------------------------------------------------------------------- TEST(io, projparse_laea_spherical) { - auto obj = PROJStringParser().createFromPROJString("+proj=laea +R=6371228"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=laea +R=6371228 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->getEPSGCode(), @@ -7855,7 +7877,8 @@ TEST(io, projparse_laea_spherical) { // --------------------------------------------------------------------------- TEST(io, projparse_eqc_spherical) { - auto obj = PROJStringParser().createFromPROJString("+proj=eqc +R=6371228"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=eqc +R=6371228 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->getEPSGCode(), @@ -7879,7 +7902,7 @@ TEST(io, projparse_eqc_spherical) { TEST(io, projparse_non_earth_ellipsoid) { std::string input("+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +R=1 +units=m " - "+no_defs"); + "+no_defs +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -7979,7 +8002,7 @@ TEST(io, projparse_axisswap_unitconvert_proj_unitconvert_numeric_axisswap) { TEST(io, projparse_projected_units) { auto obj = PROJStringParser().createFromPROJString( - "+proj=tmerc +x_0=0.304800609601219 +units=us-ft"); + "+proj=tmerc +x_0=0.304800609601219 +units=us-ft +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -7999,7 +8022,7 @@ TEST(io, projparse_projected_units) { TEST(io, projparse_projected_to_meter_known) { auto obj = PROJStringParser().createFromPROJString( - "+proj=tmerc +to_meter=0.304800609601219"); + "+proj=tmerc +to_meter=0.304800609601219 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -8018,8 +8041,8 @@ TEST(io, projparse_projected_to_meter_known) { // --------------------------------------------------------------------------- TEST(io, projparse_projected_to_meter_unknown) { - auto obj = - PROJStringParser().createFromPROJString("+proj=tmerc +to_meter=0.1234"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=tmerc +to_meter=0.1234 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -8041,8 +8064,8 @@ TEST(io, projparse_projected_to_meter_unknown) { // --------------------------------------------------------------------------- TEST(io, projparse_projected_vunits) { - auto obj = - PROJStringParser().createFromPROJString("+proj=tmerc +vunits=ft"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=tmerc +vunits=ft +type=crs"); auto crs = nn_dynamic_pointer_cast<CompoundCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -8061,7 +8084,8 @@ TEST(io, projparse_projected_vunits) { TEST(io, projparse_projected_unknown) { auto obj = PROJStringParser().createFromPROJString( - "+proj=mbt_s +unused_flag +lat_0=45 +lon_0=0 +k=1 +x_0=10 +y_0=0"); + "+proj=mbt_s +unused_flag +lat_0=45 +lon_0=0 +k=1 +x_0=10 +y_0=0 " + "+type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -8106,7 +8130,7 @@ TEST(io, projparse_projected_unknown) { EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=mbt_s +unused_flag +lat_0=45 +lon_0=0 +k=1 +x_0=10 " - "+y_0=0 +datum=WGS84 +units=m +no_defs"); + "+y_0=0 +datum=WGS84 +units=m +no_defs +type=crs"); { auto obj2 = WKTParser().createFromWKT(expected_wkt1); @@ -8133,8 +8157,8 @@ TEST(io, projparse_projected_unknown) { // --------------------------------------------------------------------------- TEST(io, projparse_geocent) { - auto obj = - PROJStringParser().createFromPROJString("+proj=geocent +ellps=WGS84"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=geocent +ellps=WGS84 +type=crs"); auto crs = nn_dynamic_pointer_cast<GeodeticCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -8156,7 +8180,7 @@ TEST(io, projparse_geocent) { TEST(io, projparse_geocent_towgs84) { auto obj = PROJStringParser().createFromPROJString( - "+proj=geocent +ellps=WGS84 +towgs84=1,2,3"); + "+proj=geocent +ellps=WGS84 +towgs84=1,2,3 +type=crs"); auto crs = nn_dynamic_pointer_cast<BoundCRS>(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); @@ -8182,7 +8206,8 @@ TEST(io, projparse_geocent_towgs84) { crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), - "+proj=geocent +ellps=WGS84 +towgs84=1,2,3,0,0,0,0 +units=m +no_defs"); + "+proj=geocent +ellps=WGS84 +towgs84=1,2,3,0,0,0,0 +units=m +no_defs " + "+type=crs"); } // --------------------------------------------------------------------------- @@ -8226,7 +8251,7 @@ TEST(io, projparse_cart_unit_numeric) { // --------------------------------------------------------------------------- TEST(io, projparse_longlat_wktext) { - std::string input("+proj=longlat +foo +wktext"); + std::string input("+proj=longlat +foo +wktext +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast<GeodeticCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -8240,7 +8265,7 @@ TEST(io, projparse_longlat_wktext) { // --------------------------------------------------------------------------- TEST(io, projparse_geocent_wktext) { - std::string input("+proj=geocent +foo +wktext"); + std::string input("+proj=geocent +foo +wktext +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast<GeodeticCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -8254,7 +8279,7 @@ TEST(io, projparse_geocent_wktext) { // --------------------------------------------------------------------------- TEST(io, projparse_projected_wktext) { - std::string input("+proj=merc +foo +wktext"); + std::string input("+proj=merc +foo +wktext +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -8587,7 +8612,7 @@ TEST(io, projparse_longlat_title) { std::string projString("+title=Ile d'Amsterdam 1963 +proj=longlat " "+towgs84=109.7530,-528.1330,-362.2440 " "+a=6378388.0000 +rf=297.0000000000000 +units=m " - "+no_defs"); + "+no_defs +type=crs"); auto obj = PROJStringParser().createFromPROJString(projString); auto crs = nn_dynamic_pointer_cast<BoundCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -8600,7 +8625,7 @@ TEST(io, projparse_longlat_title) { PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=longlat +ellps=intl +towgs84=109.753,-528.133,-362.244,0,0,0,0 " - "+no_defs"); + "+no_defs +type=crs"); } // --------------------------------------------------------------------------- @@ -8610,7 +8635,8 @@ TEST(io, projparse_projected_title) { "+title=Amsterdam 1963 +proj=tmerc " "+towgs84=109.7530,-528.1330,-362.2440 +a=6378388.0000 " "+rf=297.0000000000000 +lat_0=0.000000000 +lon_0=75.000000000 " - "+k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs"); + "+k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs " + "+type=crs"); auto obj = PROJStringParser().createFromPROJString(projString); auto crs = nn_dynamic_pointer_cast<BoundCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -8623,7 +8649,8 @@ TEST(io, projparse_projected_title) { PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=utm +zone=43 +south +ellps=intl " - "+towgs84=109.753,-528.133,-362.244,0,0,0,0 +units=m +no_defs"); + "+towgs84=109.753,-528.133,-362.244,0,0,0,0 +units=m +no_defs " + "+type=crs"); } // --------------------------------------------------------------------------- @@ -8632,8 +8659,9 @@ TEST(io, projparse_init) { auto dbContext = DatabaseContext::create(); // Not allowed in non-compatibillity mode - EXPECT_THROW(PROJStringParser().createFromPROJString("init=epsg:4326"), - ParsingException); + EXPECT_THROW( + PROJStringParser().createFromPROJString("init=epsg:4326 +type=crs"), + ParsingException); { // EPSG:4326 is normally latitude-longitude order with degree, @@ -8649,7 +8677,8 @@ TEST(io, projparse_init) { { // EPSG:3040 is normally northing-easting order, but in compatibillity // mode it will be easting-northing - auto obj = createFromUserInput("init=epsg:3040", dbContext, true); + auto obj = + createFromUserInput("init=epsg:3040 +type=crs", dbContext, true); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); EXPECT_TRUE(crs->coordinateSystem()->isEquivalentTo( @@ -8691,11 +8720,12 @@ TEST(io, projparse_init) { { auto obj = createFromUserInput( - "init=epsg:4326 proj=longlat ellps=GRS80", dbContext, true); + "init=epsg:4326 proj=longlat ellps=GRS80 +type=crs", dbContext, + true); auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), - "+proj=longlat +ellps=GRS80 +no_defs"); + "+proj=longlat +ellps=GRS80 +no_defs +type=crs"); } } @@ -8713,8 +8743,9 @@ TEST(io, projparse_errors) { EXPECT_THROW(PROJStringParser().createFromPROJString("step"), ParsingException); - EXPECT_THROW(PROJStringParser().createFromPROJString("proj=unknown"), - ParsingException); + EXPECT_THROW( + PROJStringParser().createFromPROJString("proj=unknown +type=crs"), + ParsingException); EXPECT_THROW( PROJStringParser().createFromPROJString( @@ -8733,61 +8764,64 @@ TEST(io, projparse_errors) { // --------------------------------------------------------------------------- TEST(io, projparse_longlat_errors) { - EXPECT_THROW( - PROJStringParser().createFromPROJString("+proj=longlat +datum=unknown"), - ParsingException); - - EXPECT_THROW( - PROJStringParser().createFromPROJString("+proj=longlat +ellps=unknown"), - ParsingException); - EXPECT_THROW(PROJStringParser().createFromPROJString( - "+proj=longlat +a=invalid +b=1"), + "+proj=longlat +datum=unknown +type=crs"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( - "+proj=longlat +a=1 +b=invalid"), + "+proj=longlat +ellps=unknown +type=crs"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( - "+proj=longlat +a=invalid +rf=1"), + "+proj=longlat +a=invalid +b=1 +type=crs"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( - "+proj=longlat +a=1 +rf=invalid"), + "+proj=longlat +a=1 +b=invalid +type=crs"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( - "+proj=longlat +a=1 +f=invalid"), + "+proj=longlat +a=invalid +rf=1 +type=crs"), ParsingException); - EXPECT_THROW( - PROJStringParser().createFromPROJString("+proj=longlat +R=invalid"), - ParsingException); - - EXPECT_THROW(PROJStringParser().createFromPROJString("+proj=longlat +b=1"), + EXPECT_THROW(PROJStringParser().createFromPROJString( + "+proj=longlat +a=1 +rf=invalid +type=crs"), ParsingException); - EXPECT_THROW(PROJStringParser().createFromPROJString("+proj=longlat +rf=1"), + EXPECT_THROW(PROJStringParser().createFromPROJString( + "+proj=longlat +a=1 +f=invalid +type=crs"), ParsingException); - EXPECT_THROW(PROJStringParser().createFromPROJString("+proj=longlat +f=0"), + EXPECT_THROW(PROJStringParser().createFromPROJString( + "+proj=longlat +R=invalid +type=crs"), ParsingException); EXPECT_THROW( - PROJStringParser().createFromPROJString("+proj=longlat +pm=unknown"), + PROJStringParser().createFromPROJString("+proj=longlat +b=1 +type=crs"), ParsingException); - EXPECT_THROW( - PROJStringParser().createFromPROJString( - "+proj=longlat +ellps=GRS80 +towgs84=1.2,2,3,4,5,6,invalid"), - ParsingException); + EXPECT_THROW(PROJStringParser().createFromPROJString( + "+proj=longlat +rf=1 +type=crs"), + ParsingException); EXPECT_THROW( - PROJStringParser().createFromPROJString("+proj=longlat +axis=foo"), + PROJStringParser().createFromPROJString("+proj=longlat +f=0 +type=crs"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( + "+proj=longlat +pm=unknown +type=crs"), + ParsingException); + + EXPECT_THROW(PROJStringParser().createFromPROJString( + "+proj=longlat +ellps=GRS80 " + "+towgs84=1.2,2,3,4,5,6,invalid +type=crs"), + ParsingException); + + EXPECT_THROW(PROJStringParser().createFromPROJString( + "+proj=longlat +axis=foo +type=crs"), + ParsingException); + + EXPECT_THROW(PROJStringParser().createFromPROJString( "+proj=pipeline +step +proj=longlat +ellps=GRS80 +step " "+proj=unitconvert +xy_in=rad +xy_out=foo"), ParsingException); @@ -8806,15 +8840,15 @@ TEST(io, projparse_longlat_errors) { // --------------------------------------------------------------------------- TEST(io, projparse_projected_errors) { - EXPECT_THROW( - PROJStringParser().createFromPROJString("+proj=tmerc +units=foo"), - ParsingException); - EXPECT_THROW( - PROJStringParser().createFromPROJString("+proj=tmerc +x_0=foo"), - ParsingException); - EXPECT_THROW( - PROJStringParser().createFromPROJString("+proj=tmerc +lat_0=foo"), - ParsingException); + EXPECT_THROW(PROJStringParser().createFromPROJString( + "+proj=tmerc +units=foo +type=crs"), + ParsingException); + EXPECT_THROW(PROJStringParser().createFromPROJString( + "+proj=tmerc +x_0=foo +type=crs"), + ParsingException); + EXPECT_THROW(PROJStringParser().createFromPROJString( + "+proj=tmerc +lat_0=foo +type=crs"), + ParsingException); // Inconsistent pm values between geogCRS and projectedCRS EXPECT_THROW(PROJStringParser().createFromPROJString( "+proj=pipeline +step +proj=longlat +ellps=WGS84 " @@ -8828,7 +8862,7 @@ TEST(io, createFromUserInput) { auto dbContext = DatabaseContext::create(); EXPECT_THROW(createFromUserInput("foo", nullptr), ParsingException); EXPECT_THROW(createFromUserInput("GEOGCRS", nullptr), ParsingException); - EXPECT_THROW(createFromUserInput("+proj=unhandled", nullptr), + EXPECT_THROW(createFromUserInput("+proj=unhandled +type=crs", nullptr), ParsingException); EXPECT_THROW(createFromUserInput("EPSG:4326", nullptr), ParsingException); EXPECT_THROW( diff --git a/test/unit/test_operation.cpp b/test/unit/test_operation.cpp index bdadd830..3cf633b6 100644 --- a/test/unit/test_operation.cpp +++ b/test/unit/test_operation.cpp @@ -1378,7 +1378,7 @@ TEST(operation, tmerc_south_oriented_export) { ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=tmerc +axis=wsu +lat_0=0 +lon_0=29 +k=1 +x_0=0 +y_0=0 " - "+ellps=WGS84 +units=m +no_defs"); + "+ellps=WGS84 +units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- @@ -1630,7 +1630,7 @@ TEST(operation, bonne_export) { ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=bonne +lat_1=1 +lon_0=2 +x_0=3 +y_0=4 +ellps=WGS84 " - "+units=m +no_defs"); + "+units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- @@ -2127,7 +2127,7 @@ TEST(operation, createEquidistantCylindricalSpherical) { TEST(operation, equidistant_cylindrical_lat_0) { auto obj = PROJStringParser().createFromPROJString( - "+proj=eqc +ellps=sphere +lat_0=-2 +lat_ts=1 +lon_0=-10"); + "+proj=eqc +ellps=sphere +lat_0=-2 +lat_ts=1 +lon_0=-10 +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -2141,7 +2141,7 @@ TEST(operation, equidistant_cylindrical_lat_0) { .get()); EXPECT_EQ(projString, "+proj=eqc +lat_ts=1 +lat_0=-2 +lon_0=-10 +x_0=0 +y_0=0 " - "+ellps=sphere +units=m +no_defs"); + "+ellps=sphere +units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- @@ -3073,9 +3073,10 @@ TEST(operation, webmerc_export) { "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=webmerc " "+lat_0=0 +lon_0=2 +x_0=3 +y_0=4 +ellps=WGS84"); - EXPECT_EQ(projCRS->exportToPROJString(PROJStringFormatter::create().get()), - "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=2 +x_0=3 " - "+y_0=4 +k=1 +units=m +nadgrids=@null +wktext +no_defs"); + EXPECT_EQ( + projCRS->exportToPROJString(PROJStringFormatter::create().get()), + "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=2 +x_0=3 " + "+y_0=4 +k=1 +units=m +nadgrids=@null +wktext +no_defs +type=crs"); } // --------------------------------------------------------------------------- @@ -3172,9 +3173,10 @@ TEST(operation, webmerc_import_from_GDAL_wkt1_EPSG_3785_deprecated) { auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); - EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), - "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 " - "+y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs"); + EXPECT_EQ( + crs->exportToPROJString(PROJStringFormatter::create().get()), + "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 " + "+y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs +type=crs"); auto convGot = crs->derivingConversion(); @@ -3237,9 +3239,10 @@ TEST(operation, webmerc_import_from_WKT2_EPSG_3785_deprecated) { auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); - EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), - "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 " - "+y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs"); + EXPECT_EQ( + crs->exportToPROJString(PROJStringFormatter::create().get()), + "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 " + "+y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs +type=crs"); EXPECT_EQ( crs->exportToWKT( @@ -4080,7 +4083,7 @@ TEST(operation, laborde_oblique_mercator) { // Content of EPSG:29701 "Tananarive (Paris) / Laborde Grid" auto projString = "+proj=labrd +lat_0=-18.9 +lon_0=44.1 +azi=18.9 " "+k=0.9995 +x_0=400000 +y_0=800000 +ellps=intl +pm=paris " - "+units=m +no_defs"; + "+units=m +no_defs +type=crs"; auto obj = PROJStringParser().createFromPROJString(projString); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); @@ -4694,13 +4697,13 @@ TEST(operation, geogCRS_to_geogCRS_init_IGNF_to_init_IGNF_context) { TEST(operation, geogCRS_to_geogCRS_3D) { - auto geogcrs_m_obj = - PROJStringParser().createFromPROJString("+proj=longlat +vunits=m"); + auto geogcrs_m_obj = PROJStringParser().createFromPROJString( + "+proj=longlat +vunits=m +type=crs"); auto geogcrs_m = nn_dynamic_pointer_cast<CRS>(geogcrs_m_obj); ASSERT_TRUE(geogcrs_m != nullptr); - auto geogcrs_ft_obj = - PROJStringParser().createFromPROJString("+proj=longlat +vunits=ft"); + auto geogcrs_ft_obj = PROJStringParser().createFromPROJString( + "+proj=longlat +vunits=ft +type=crs"); auto geogcrs_ft = nn_dynamic_pointer_cast<CRS>(geogcrs_ft_obj); ASSERT_TRUE(geogcrs_ft != nullptr); @@ -4721,7 +4724,7 @@ TEST(operation, geogCRS_to_geogCRS_3D) { } auto geogcrs_m_with_pm_obj = PROJStringParser().createFromPROJString( - "+proj=longlat +pm=paris +vunits=m"); + "+proj=longlat +pm=paris +vunits=m +type=crs"); auto geogcrs_m_with_pm = nn_dynamic_pointer_cast<CRS>(geogcrs_m_with_pm_obj); ASSERT_TRUE(geogcrs_m_with_pm != nullptr); @@ -5345,14 +5348,14 @@ TEST(operation, boundCRS_of_geogCRS_to_unrelated_geogCRS) { // --------------------------------------------------------------------------- TEST(operation, createOperation_boundCRS_identified_by_datum) { - auto objSrc = - PROJStringParser().createFromPROJString("+proj=longlat +datum=WGS84"); + auto objSrc = PROJStringParser().createFromPROJString( + "+proj=longlat +datum=WGS84 +type=crs"); auto src = nn_dynamic_pointer_cast<GeographicCRS>(objSrc); ASSERT_TRUE(src != nullptr); auto objDest = PROJStringParser().createFromPROJString( "+proj=utm +zone=32 +a=6378249.2 +b=6356515 " - "+towgs84=-263.0,6.0,431.0 +no_defs"); + "+towgs84=-263.0,6.0,431.0 +no_defs +type=crs"); auto dest = nn_dynamic_pointer_cast<BoundCRS>(objDest); ASSERT_TRUE(dest != nullptr); @@ -5379,12 +5382,12 @@ TEST(operation, createOperation_boundCRS_identified_by_datum) { TEST(operation, boundCRS_of_clrk_66_geogCRS_to_nad83_geogCRS) { auto objSrc = PROJStringParser().createFromPROJString( - "+proj=latlong +ellps=clrk66 +nadgrids=ntv1_can.dat,conus"); + "+proj=latlong +ellps=clrk66 +nadgrids=ntv1_can.dat,conus +type=crs"); auto src = nn_dynamic_pointer_cast<CRS>(objSrc); ASSERT_TRUE(src != nullptr); - auto objDest = - PROJStringParser().createFromPROJString("+proj=latlong +datum=NAD83"); + auto objDest = PROJStringParser().createFromPROJString( + "+proj=latlong +datum=NAD83 +type=crs"); auto dest = nn_dynamic_pointer_cast<CRS>(objDest); ASSERT_TRUE(dest != nullptr); @@ -5401,12 +5404,13 @@ TEST(operation, boundCRS_of_clrk_66_geogCRS_to_nad83_geogCRS) { TEST(operation, boundCRS_of_clrk_66_projCRS_to_nad83_geogCRS) { auto objSrc = PROJStringParser().createFromPROJString( - "+proj=utm +zone=17 +ellps=clrk66 +nadgrids=ntv1_can.dat,conus"); + "+proj=utm +zone=17 +ellps=clrk66 +nadgrids=ntv1_can.dat,conus " + "+type=crs"); auto src = nn_dynamic_pointer_cast<CRS>(objSrc); ASSERT_TRUE(src != nullptr); - auto objDest = - PROJStringParser().createFromPROJString("+proj=latlong +datum=NAD83"); + auto objDest = PROJStringParser().createFromPROJString( + "+proj=latlong +datum=NAD83 +type=crs"); auto dest = nn_dynamic_pointer_cast<CRS>(objDest); ASSERT_TRUE(dest != nullptr); @@ -5553,12 +5557,12 @@ TEST(operation, boundCRS_to_boundCRS_unralated_hub) { TEST(operation, boundCRS_of_projCRS_towgs84_to_boundCRS_of_projCRS_nadgrids) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=utm +zone=15 +datum=NAD83 +units=m +no_defs +ellps=GRS80 " - "+towgs84=0,0,0"); + "+towgs84=0,0,0 +type=crs"); auto src = nn_dynamic_pointer_cast<CRS>(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = PROJStringParser().createFromPROJString( "+proj=utm +zone=15 +datum=NAD27 +units=m +no_defs +ellps=clrk66 " - "+nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat"); + "+nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat +type=crs"); auto dst = nn_dynamic_pointer_cast<CRS>(objDst); ASSERT_TRUE(dst != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( @@ -6140,13 +6144,13 @@ TEST(operation, vertCRS_to_vertCRS) { TEST(operation, compoundCRS_to_geogCRS_3D) { - auto compoundcrs_ft_obj = - PROJStringParser().createFromPROJString("+proj=merc +vunits=ft"); + auto compoundcrs_ft_obj = PROJStringParser().createFromPROJString( + "+proj=merc +vunits=ft +type=crs"); auto compoundcrs_ft = nn_dynamic_pointer_cast<CRS>(compoundcrs_ft_obj); ASSERT_TRUE(compoundcrs_ft != nullptr); - auto geogcrs_m_obj = - PROJStringParser().createFromPROJString("+proj=longlat +vunits=m"); + auto geogcrs_m_obj = PROJStringParser().createFromPROJString( + "+proj=longlat +vunits=m +type=crs"); auto geogcrs_m = nn_dynamic_pointer_cast<CRS>(geogcrs_m_obj); ASSERT_TRUE(geogcrs_m != nullptr); @@ -6300,7 +6304,7 @@ TEST(operation, createOperation_on_crs_with_canonical_bound_crs) { TEST(operation, createOperation_fallback_to_proj4_strings) { auto objDest = PROJStringParser().createFromPROJString( - "+proj=longlat +geoc +ellps=WGS84"); + "+proj=longlat +geoc +ellps=WGS84 +type=crs"); auto dest = nn_dynamic_pointer_cast<GeographicCRS>(objDest); ASSERT_TRUE(dest != nullptr); |
