aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2018-12-28 19:04:27 +0100
committerEven Rouault <even.rouault@spatialys.com>2018-12-28 19:04:27 +0100
commit18e63a90b187bcf6421694ed95e90923516c5fef (patch)
tree7aff781ace7dd3704e3f96c32c6bcf01edf6c804 /test
parent123011447a2d7d25041cc3e466408a0d81bb4d3b (diff)
parentd43a09983fd0c115a175613c7d77a648b0500791 (diff)
downloadPROJ-18e63a90b187bcf6421694ed95e90923516c5fef.tar.gz
PROJ-18e63a90b187bcf6421694ed95e90923516c5fef.zip
Merge remote-tracking branch 'rouault/gdalbarn'
Diffstat (limited to 'test')
-rw-r--r--test/unit/test_io.cpp106
-rw-r--r--test/unit/test_operation.cpp118
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")