diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2018-12-28 19:04:27 +0100 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2018-12-28 19:04:27 +0100 |
| commit | 18e63a90b187bcf6421694ed95e90923516c5fef (patch) | |
| tree | 7aff781ace7dd3704e3f96c32c6bcf01edf6c804 /test | |
| parent | 123011447a2d7d25041cc3e466408a0d81bb4d3b (diff) | |
| parent | d43a09983fd0c115a175613c7d77a648b0500791 (diff) | |
| download | PROJ-18e63a90b187bcf6421694ed95e90923516c5fef.tar.gz PROJ-18e63a90b187bcf6421694ed95e90923516c5fef.zip | |
Merge remote-tracking branch 'rouault/gdalbarn'
Diffstat (limited to 'test')
| -rw-r--r-- | test/unit/test_io.cpp | 106 | ||||
| -rw-r--r-- | test/unit/test_operation.cpp | 118 |
2 files changed, 217 insertions, 7 deletions
diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp index 5ea92fd0..a029a886 100644 --- a/test/unit/test_io.cpp +++ b/test/unit/test_io.cpp @@ -350,12 +350,16 @@ static void checkEPSG_4326(GeographicCRSPtr crs, bool latLong = true, auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 2); if (latLong) { - EXPECT_EQ(cs->axisList()[0]->nameStr(), "Latitude"); - EXPECT_EQ(cs->axisList()[0]->abbreviation(), "lat"); + EXPECT_TRUE(cs->axisList()[0]->nameStr() == "Latitude" || + cs->axisList()[0]->nameStr() == "Geodetic latitude") + << cs->axisList()[0]->nameStr(); + EXPECT_EQ(tolower(cs->axisList()[0]->abbreviation()), "lat"); EXPECT_EQ(cs->axisList()[0]->direction(), AxisDirection::NORTH); - EXPECT_EQ(cs->axisList()[1]->nameStr(), "Longitude"); - EXPECT_EQ(cs->axisList()[1]->abbreviation(), "lon"); + EXPECT_TRUE(cs->axisList()[1]->nameStr() == "Longitude" || + cs->axisList()[1]->nameStr() == "Geodetic longitude") + << cs->axisList()[1]->nameStr(); + EXPECT_EQ(tolower(cs->axisList()[1]->abbreviation()), "lon"); EXPECT_EQ(cs->axisList()[1]->direction(), AxisDirection::EAST); } else { EXPECT_EQ(cs->axisList()[0]->nameStr(), "Longitude"); @@ -1005,8 +1009,6 @@ TEST(wkt_parse, wkt1_projected) { " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" - " AXIS[\"latitude\",NORTH],\n" - " AXIS[\"longitude\",EAST],\n" " AUTHORITY[\"EPSG\",\"4326\"]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",0],\n" @@ -1019,10 +1021,14 @@ TEST(wkt_parse, wkt1_projected) { " AXIS[\"(E)\",EAST],\n" " AXIS[\"(N)\",NORTH],\n" " AUTHORITY[\"EPSG\",\"32631\"]]"; - auto obj = WKTParser().createFromWKT(wkt); + auto obj = WKTParser() + .attachDatabaseContext(DatabaseContext::create()) + .createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); checkProjected(crs); + + EXPECT_TRUE(!crs->baseCRS()->identifiers().empty()); } // --------------------------------------------------------------------------- @@ -1058,6 +1064,46 @@ TEST(wkt_parse, wkt1_projected_no_axis) { // --------------------------------------------------------------------------- +TEST(wkt_parse, wkt1_projected_wrong_axis_geogcs) { + auto wkt = "PROJCS[\"WGS 84 / UTM zone 31N\",\n" + " GEOGCS[\"WGS 84\",\n" + " DATUM[\"WGS_1984\",\n" + " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" + " AUTHORITY[\"EPSG\",\"7030\"]],\n" + " AUTHORITY[\"EPSG\",\"6326\"]],\n" + " PRIMEM[\"Greenwich\",0,\n" + " AUTHORITY[\"EPSG\",\"8901\"]],\n" + " UNIT[\"degree\",0.0174532925199433,\n" + " AUTHORITY[\"EPSG\",\"9122\"]],\n" + " AXIS[\"longitude\",EAST],\n" + " AXIS[\"latitude\",NORTH],\n" + " AUTHORITY[\"EPSG\",\"4326\"]],\n" + " PROJECTION[\"Transverse_Mercator\"],\n" + " PARAMETER[\"latitude_of_origin\",0],\n" + " PARAMETER[\"central_meridian\",3],\n" + " PARAMETER[\"scale_factor\",0.9996],\n" + " PARAMETER[\"false_easting\",500000],\n" + " PARAMETER[\"false_northing\",0],\n" + " UNIT[\"metre\",1,\n" + " AUTHORITY[\"EPSG\",\"9001\"]],\n" + " AUTHORITY[\"EPSG\",\"32631\"]]"; + WKTParser parser; + parser.setStrict(false).attachDatabaseContext(DatabaseContext::create()); + auto obj = parser.createFromWKT(wkt); + EXPECT_TRUE(!parser.warningList().empty()); + auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); + ASSERT_TRUE(crs != nullptr); + + EXPECT_TRUE(crs->baseCRS()->identifiers().empty()); + + auto cs = crs->baseCRS()->coordinateSystem(); + ASSERT_EQ(cs->axisList().size(), 2); + EXPECT_EQ(cs->axisList()[0]->direction(), AxisDirection::EAST); + EXPECT_EQ(cs->axisList()[1]->direction(), AxisDirection::NORTH); +} + +// --------------------------------------------------------------------------- + TEST(wkt_parse, wkt1_projected_with_PROJ4_extension) { auto wkt = "PROJCS[\"unnamed\",\n" " GEOGCS[\"WGS 84\",\n" @@ -2279,6 +2325,52 @@ TEST(wkt_parse, BOUNDCRS_transformation_from_codes) { // --------------------------------------------------------------------------- +TEST(wkt_parse, boundcrs_of_verticalcrs_to_geog3Dcrs) { + auto wkt = + "BOUNDCRS[\n" + " SOURCECRS[\n" + " VERTCRS[\"my_height\",\n" + " VDATUM[\"my_height\"],\n" + " CS[vertical,1],\n" + " AXIS[\"up\",up,\n" + " LENGTHUNIT[\"metre\",1,\n" + " ID[\"EPSG\",9001]]]]],\n" + " TARGETCRS[\n" + " GEODCRS[\"WGS 84\",\n" + " DATUM[\"World Geodetic System 1984\",\n" + " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" + " LENGTHUNIT[\"metre\",1]]],\n" + " PRIMEM[\"Greenwich\",0,\n" + " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" + " CS[ellipsoidal,3],\n" + " AXIS[\"latitude\",north,\n" + " ORDER[1],\n" + " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" + " AXIS[\"longitude\",east,\n" + " ORDER[2],\n" + " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" + " AXIS[\"ellipsoidal height\",up,\n" + " ORDER[3],\n" + " LENGTHUNIT[\"metre\",1]],\n" + " ID[\"EPSG\",4979]]],\n" + " ABRIDGEDTRANSFORMATION[\"my_height height to WGS84 ellipsoidal " + "height\",\n" + " METHOD[\"GravityRelatedHeight to Geographic3D\"],\n" + " PARAMETERFILE[\"Geoid (height correction) model file\"," + " \"./tmp/fake.gtx\",\n" + " ID[\"EPSG\",8666]]]]"; + + auto obj = WKTParser().createFromWKT(wkt); + auto crs = nn_dynamic_pointer_cast<BoundCRS>(obj); + ASSERT_TRUE(crs != nullptr); + + EXPECT_EQ(crs->baseCRS()->nameStr(), "my_height"); + + EXPECT_EQ(crs->hubCRS()->nameStr(), GeographicCRS::EPSG_4979->nameStr()); +} + +// --------------------------------------------------------------------------- + TEST(wkt_parse, geogcs_TOWGS84_3terms) { auto wkt = "GEOGCS[\"my GEOGCRS\",\n" " DATUM[\"WGS_1984\",\n" diff --git a/test/unit/test_operation.cpp b/test/unit/test_operation.cpp index 636db7a7..0c127afa 100644 --- a/test/unit/test_operation.cpp +++ b/test/unit/test_operation.cpp @@ -4260,6 +4260,32 @@ TEST(operation, geogCRS_to_geogCRS_context_default) { // --------------------------------------------------------------------------- +TEST(operation, geogCRS_to_geogCRS_context_match_by_name) { + auto authFactory = + AuthorityFactory::create(DatabaseContext::create(), "EPSG"); + auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0); + ctxt->setSpatialCriterion( + CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); + ctxt->setAllowUseIntermediateCRS(false); + auto NAD27 = GeographicCRS::create( + PropertyMap().set(IdentifiedObject::NAME_KEY, + GeographicCRS::EPSG_4267->nameStr()), + GeographicCRS::EPSG_4267->datum(), + GeographicCRS::EPSG_4267->datumEnsemble(), + GeographicCRS::EPSG_4267->coordinateSystem()); + auto list = CoordinateOperationFactory::create()->createOperations( + NAD27, GeographicCRS::EPSG_4326, ctxt); + auto listInv = CoordinateOperationFactory::create()->createOperations( + GeographicCRS::EPSG_4326, NAD27, ctxt); + auto listRef = CoordinateOperationFactory::create()->createOperations( + GeographicCRS::EPSG_4267, GeographicCRS::EPSG_4326, ctxt); + EXPECT_EQ(list.size(), listRef.size()); + EXPECT_EQ(listInv.size(), listRef.size()); + EXPECT_GE(listRef.size(), 2U); +} + +// --------------------------------------------------------------------------- + TEST(operation, geogCRS_to_geogCRS_context_filter_accuracy) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); @@ -5534,6 +5560,98 @@ TEST(operation, boundCRS_to_boundCRS_unralated_hub) { // --------------------------------------------------------------------------- +TEST(operation, boundCRS_with_basecrs_with_extent_to_geogCRS) { + + auto wkt = + "BOUNDCRS[\n" + " SOURCECRS[\n" + " PROJCRS[\"NAD83 / California zone 3 (ftUS)\",\n" + " BASEGEODCRS[\"NAD83\",\n" + " DATUM[\"North American Datum 1983\",\n" + " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" + " LENGTHUNIT[\"metre\",1]]],\n" + " PRIMEM[\"Greenwich\",0,\n" + " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" + " CONVERSION[\"SPCS83 California zone 3 (US Survey " + "feet)\",\n" + " METHOD[\"Lambert Conic Conformal (2SP)\",\n" + " ID[\"EPSG\",9802]],\n" + " PARAMETER[\"Latitude of false origin\",36.5,\n" + " ANGLEUNIT[\"degree\",0.0174532925199433],\n" + " ID[\"EPSG\",8821]],\n" + " PARAMETER[\"Longitude of false origin\",-120.5,\n" + " ANGLEUNIT[\"degree\",0.0174532925199433],\n" + " ID[\"EPSG\",8822]],\n" + " PARAMETER[\"Latitude of 1st standard parallel\"," + " 38.4333333333333,\n" + " ANGLEUNIT[\"degree\",0.0174532925199433],\n" + " ID[\"EPSG\",8823]],\n" + " PARAMETER[\"Latitude of 2nd standard parallel\"," + " 37.0666666666667,\n" + " ANGLEUNIT[\"degree\",0.0174532925199433],\n" + " ID[\"EPSG\",8824]],\n" + " PARAMETER[\"Easting at false origin\",6561666.667,\n" + " LENGTHUNIT[\"US survey foot\"," + " 0.304800609601219],\n" + " ID[\"EPSG\",8826]],\n" + " PARAMETER[\"Northing at false origin\",1640416.667,\n" + " LENGTHUNIT[\"US survey foot\"," + " 0.304800609601219],\n" + " ID[\"EPSG\",8827]]],\n" + " CS[Cartesian,2],\n" + " AXIS[\"easting (X)\",east,\n" + " ORDER[1],\n" + " LENGTHUNIT[\"US survey foot\"," + " 0.304800609601219]],\n" + " AXIS[\"northing (Y)\",north,\n" + " ORDER[2],\n" + " LENGTHUNIT[\"US survey foot\"," + " 0.304800609601219]],\n" + " SCOPE[\"unknown\"],\n" + " AREA[\"USA - California - SPCS - 3\"],\n" + " BBOX[36.73,-123.02,38.71,-117.83],\n" + " ID[\"EPSG\",2227]]],\n" + " TARGETCRS[\n" + " GEODCRS[\"WGS 84\",\n" + " DATUM[\"World Geodetic System 1984\",\n" + " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" + " LENGTHUNIT[\"metre\",1]]],\n" + " PRIMEM[\"Greenwich\",0,\n" + " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" + " CS[ellipsoidal,2],\n" + " AXIS[\"latitude\",north,\n" + " ORDER[1],\n" + " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" + " AXIS[\"longitude\",east,\n" + " ORDER[2],\n" + " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" + " ID[\"EPSG\",4326]]],\n" + " ABRIDGEDTRANSFORMATION[\"NAD83 to WGS 84 (1)\",\n" + " METHOD[\"Geocentric translations (geog2D domain)\",\n" + " ID[\"EPSG\",9603]],\n" + " PARAMETER[\"X-axis translation\",0,\n" + " ID[\"EPSG\",8605]],\n" + " PARAMETER[\"Y-axis translation\",0,\n" + " ID[\"EPSG\",8606]],\n" + " PARAMETER[\"Z-axis translation\",0,\n" + " ID[\"EPSG\",8607]],\n" + " SCOPE[\"unknown\"],\n" + " AREA[\"North America - Canada and USA (CONUS, Alaska " + "mainland)\"],\n" + " BBOX[23.81,-172.54,86.46,-47.74],\n" + " ID[\"EPSG\",1188]]]"; + auto obj = WKTParser().createFromWKT(wkt); + auto boundCRS = nn_dynamic_pointer_cast<BoundCRS>(obj); + ASSERT_TRUE(boundCRS != nullptr); + auto op = CoordinateOperationFactory::create()->createOperation( + NN_CHECK_ASSERT(boundCRS), GeographicCRS::EPSG_4326); + ASSERT_TRUE(op != nullptr); + EXPECT_EQ(op->nameStr(), "Inverse of SPCS83 California zone 3 (US Survey " + "feet) + NAD83 to WGS 84 (1)"); +} + +// --------------------------------------------------------------------------- + static VerticalCRSNNPtr createVerticalCRS() { PropertyMap propertiesVDatum; propertiesVDatum.set(Identifier::CODESPACE_KEY, "EPSG") |
