diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2020-10-07 23:58:36 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2020-10-08 17:31:56 +0200 |
| commit | 53672bdf7074e3737f6e6a53ee7373dcbccd6ea4 (patch) | |
| tree | dfbdcb78c020aa43a3597210eb0d998e9b8f1e21 /test/unit | |
| parent | 9dc3bf503b0455526a4d180930f8414621ea6187 (diff) | |
| download | PROJ-53672bdf7074e3737f6e6a53ee7373dcbccd6ea4.tar.gz PROJ-53672bdf7074e3737f6e6a53ee7373dcbccd6ea4.zip | |
Make CRS identification work with CRS with DatumEnsemble
Diffstat (limited to 'test/unit')
| -rw-r--r-- | test/unit/test_crs.cpp | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/test/unit/test_crs.cpp b/test/unit/test_crs.cpp index e8758932..ec30580a 100644 --- a/test/unit/test_crs.cpp +++ b/test/unit/test_crs.cpp @@ -1680,6 +1680,90 @@ TEST(crs, geodeticcrs_identify_db) { EXPECT_EQ(res.front().first->identifiers()[0]->code(), "7844"); EXPECT_EQ(res.front().second, 100); } + { + // Identify with DatumEnsemble + auto wkt = + "GEOGCRS[\"WGS 84\"," + " ENSEMBLE[\"World Geodetic System 1984 ensemble\"," + " MEMBER[\"World Geodetic System 1984 (Transit)\"," + " ID[\"EPSG\",1166]]," + " MEMBER[\"World Geodetic System 1984 (G730)\"," + " ID[\"EPSG\",1152]]," + " MEMBER[\"World Geodetic System 1984 (G873)\"," + " ID[\"EPSG\",1153]]," + " MEMBER[\"World Geodetic System 1984 (G1150)\"," + " ID[\"EPSG\",1154]]," + " MEMBER[\"World Geodetic System 1984 (G1674)\"," + " ID[\"EPSG\",1155]]," + " MEMBER[\"World Geodetic System 1984 (G1762)\"," + " ID[\"EPSG\",1156]]," + " ELLIPSOID[\"WGS 84\",6378137,298.257223563," + " LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]," + " ID[\"EPSG\",7030]]," + " ENSEMBLEACCURACY[2]]," + " PRIMEM[\"Greenwich\",0," + " ANGLEUNIT[\"degree\",0.0174532925199433,ID[\"EPSG\",9102]]," + " ID[\"EPSG\",8901]]," + " CS[ellipsoidal,2," + " ID[\"EPSG\",6422]]," + " AXIS[\"Geodetic latitude (Lat)\",north," + " ORDER[1]]," + " AXIS[\"Geodetic longitude (Lon)\",east," + " ORDER[2]]," + " ANGLEUNIT[\"degree (supplier to define representation)\"," + "0.0174532925199433,ID[\"EPSG\",9122]]]"; + auto obj = WKTParser().createFromWKT(wkt); + auto crs = nn_dynamic_pointer_cast<GeodeticCRS>(obj); + ASSERT_TRUE(crs != nullptr); + + auto allFactory = AuthorityFactory::create(dbContext, std::string()); + auto res = crs->identify(allFactory); + ASSERT_EQ(res.size(), 1U); + EXPECT_EQ(res.front().first->getEPSGCode(), 4326); + EXPECT_EQ(res.front().second, 100.0); + } + { + // Identify with DatumEnsemble and unknown CRS name + auto wkt = + "GEOGCRS[\"unknown\"," + " ENSEMBLE[\"World Geodetic System 1984 ensemble\"," + " MEMBER[\"World Geodetic System 1984 (Transit)\"," + " ID[\"EPSG\",1166]]," + " MEMBER[\"World Geodetic System 1984 (G730)\"," + " ID[\"EPSG\",1152]]," + " MEMBER[\"World Geodetic System 1984 (G873)\"," + " ID[\"EPSG\",1153]]," + " MEMBER[\"World Geodetic System 1984 (G1150)\"," + " ID[\"EPSG\",1154]]," + " MEMBER[\"World Geodetic System 1984 (G1674)\"," + " ID[\"EPSG\",1155]]," + " MEMBER[\"World Geodetic System 1984 (G1762)\"," + " ID[\"EPSG\",1156]]," + " ELLIPSOID[\"WGS 84\",6378137,298.257223563," + " LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]," + " ID[\"EPSG\",7030]]," + " ENSEMBLEACCURACY[2]]," + " PRIMEM[\"Greenwich\",0," + " ANGLEUNIT[\"degree\",0.0174532925199433,ID[\"EPSG\",9102]]," + " ID[\"EPSG\",8901]]," + " CS[ellipsoidal,2," + " ID[\"EPSG\",6422]]," + " AXIS[\"Geodetic latitude (Lat)\",north," + " ORDER[1]]," + " AXIS[\"Geodetic longitude (Lon)\",east," + " ORDER[2]]," + " ANGLEUNIT[\"degree (supplier to define representation)\"," + "0.0174532925199433,ID[\"EPSG\",9122]]]"; + auto obj = WKTParser().createFromWKT(wkt); + auto crs = nn_dynamic_pointer_cast<GeodeticCRS>(obj); + ASSERT_TRUE(crs != nullptr); + + auto allFactory = AuthorityFactory::create(dbContext, std::string()); + auto res = crs->identify(allFactory); + ASSERT_EQ(res.size(), 1U); + EXPECT_EQ(res.front().first->getEPSGCode(), 4326); + EXPECT_EQ(res.front().second, 70.0); + } } // --------------------------------------------------------------------------- @@ -2694,6 +2778,105 @@ TEST(crs, projectedCRS_identify_db) { EXPECT_EQ(res.front().first->getEPSGCode(), 2154); EXPECT_EQ(res.front().second, 90); } + { + // Identify with DatumEnsemble + auto wkt = + "PROJCRS[\"WGS 84 / UTM zone 31N\"," + " BASEGEOGCRS[\"WGS 84\"," + " ENSEMBLE[\"World Geodetic System 1984 ensemble\"," + " MEMBER[\"World Geodetic System 1984 (Transit)\"," + " ID[\"EPSG\",1166]]," + " MEMBER[\"World Geodetic System 1984 (G730)\"," + " ID[\"EPSG\",1152]]," + " MEMBER[\"World Geodetic System 1984 (G873)\"," + " ID[\"EPSG\",1153]]," + " MEMBER[\"World Geodetic System 1984 (G1150)\"," + " ID[\"EPSG\",1154]]," + " MEMBER[\"World Geodetic System 1984 (G1674)\"," + " ID[\"EPSG\",1155]]," + " MEMBER[\"World Geodetic System 1984 (G1762)\"," + " ID[\"EPSG\",1156]]," + " ELLIPSOID[\"WGS 84\",6378137,298.257223563," + " LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]]," + " ENSEMBLEACCURACY[2]]]," + " CONVERSION[\"UTM zone 31N\"," + " METHOD[\"Transverse Mercator\"," + " ID[\"EPSG\",9807]]," + " PARAMETER[\"Latitude of natural origin\",0," + " ANGLEUNIT[\"degree\",0.0174532925199433,ID[\"EPSG\",9102]]]," + " PARAMETER[\"Longitude of natural origin\",3," + " ANGLEUNIT[\"degree\",0.0174532925199433,ID[\"EPSG\",9102]]]," + " PARAMETER[\"Scale factor at natural origin\",0.9996," + " SCALEUNIT[\"unity\",1,ID[\"EPSG\",9201]]]," + " PARAMETER[\"False easting\",500000," + " LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]]," + " PARAMETER[\"False northing\",0," + " LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]]]," + " CS[Cartesian,2]," + " AXIS[\"Easting (E)\",east," + " ORDER[1]]," + " AXIS[\"Northing (N)\",north," + " ORDER[2]]," + " LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]]"; + auto obj = WKTParser().createFromWKT(wkt); + auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); + ASSERT_TRUE(crs != nullptr); + + auto allFactory = AuthorityFactory::create(dbContext, std::string()); + auto res = crs->identify(allFactory); + ASSERT_EQ(res.size(), 1U); + EXPECT_EQ(res.front().first->getEPSGCode(), 32631); + EXPECT_EQ(res.front().second, 100.0); + } + { + // Identify with DatumEnsemble and unknown CRS name + auto wkt = + "PROJCRS[\"unknown\"," + " BASEGEOGCRS[\"unknown\"," + " ENSEMBLE[\"World Geodetic System 1984 ensemble\"," + " MEMBER[\"World Geodetic System 1984 (Transit)\"," + " ID[\"EPSG\",1166]]," + " MEMBER[\"World Geodetic System 1984 (G730)\"," + " ID[\"EPSG\",1152]]," + " MEMBER[\"World Geodetic System 1984 (G873)\"," + " ID[\"EPSG\",1153]]," + " MEMBER[\"World Geodetic System 1984 (G1150)\"," + " ID[\"EPSG\",1154]]," + " MEMBER[\"World Geodetic System 1984 (G1674)\"," + " ID[\"EPSG\",1155]]," + " MEMBER[\"World Geodetic System 1984 (G1762)\"," + " ID[\"EPSG\",1156]]," + " ELLIPSOID[\"WGS 84\",6378137,298.257223563," + " LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]]," + " ENSEMBLEACCURACY[2]]]," + " CONVERSION[\"UTM zone 31N\"," + " METHOD[\"Transverse Mercator\"," + " ID[\"EPSG\",9807]]," + " PARAMETER[\"Latitude of natural origin\",0," + " ANGLEUNIT[\"degree\",0.0174532925199433,ID[\"EPSG\",9102]]]," + " PARAMETER[\"Longitude of natural origin\",3," + " ANGLEUNIT[\"degree\",0.0174532925199433,ID[\"EPSG\",9102]]]," + " PARAMETER[\"Scale factor at natural origin\",0.9996," + " SCALEUNIT[\"unity\",1,ID[\"EPSG\",9201]]]," + " PARAMETER[\"False easting\",500000," + " LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]]," + " PARAMETER[\"False northing\",0," + " LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]]]," + " CS[Cartesian,2]," + " AXIS[\"Easting (E)\",east," + " ORDER[1]]," + " AXIS[\"Northing (N)\",north," + " ORDER[2]]," + " LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]]"; + auto obj = WKTParser().createFromWKT(wkt); + auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); + ASSERT_TRUE(crs != nullptr); + + auto res = crs->identify(factoryEPSG); + ASSERT_EQ(res.size(), 1U); + EXPECT_EQ(res.front().first->getEPSGCode(), 32631); + EXPECT_GE(res.front().second, 70.0); + } } // --------------------------------------------------------------------------- |
