diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2020-09-25 22:53:38 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2020-09-26 11:09:23 +0200 |
| commit | 2e104e092578347de11208e9a3a80a3bf711265d (patch) | |
| tree | 821679ce3db494a531c7727ad4b5db926b005370 /test | |
| parent | 485509f3b3f5133f0bb0db5ef63e932615fa2f2e (diff) | |
| download | PROJ-2e104e092578347de11208e9a3a80a3bf711265d.tar.gz PROJ-2e104e092578347de11208e9a3a80a3bf711265d.zip | |
Implement ellipsoidal formulation of +proj=ortho (fixes #397)
- Map ESRI 'Local' to +proj=ortho when Scale_Factor = 1 and Azimuth = 0
- Map ESRI 'Orthographic' to a PROJ WKT2 'Orthographic (Spherical)'
which maps to +proj=ortho +f=0 to froce spherical evaluation
Diffstat (limited to 'test')
| -rw-r--r-- | test/gie/builtins.gie | 68 | ||||
| -rw-r--r-- | test/unit/test_io.cpp | 68 |
2 files changed, 134 insertions, 2 deletions
diff --git a/test/gie/builtins.gie b/test/gie/builtins.gie index f755526e..48afc00a 100644 --- a/test/gie/builtins.gie +++ b/test/gie/builtins.gie @@ -4266,7 +4266,7 @@ expect -223374.577355253 -111701.072127637 =============================================================================== # Orthographic -# Azi, Sph. +# Azi, Sph&Ell. =============================================================================== ------------------------------------------------------------------------------- @@ -4421,6 +4421,72 @@ expect failure errno tolerance_condition accept 0.70710678118 0.7071067812 expect 45 0 + +------------------------------------------------------------------------------- +# Test the ellipsoidal formulation + +# Test data from Guidance Note 7 part 2, March 2020, p. 90 +------------------------------------------------------------------------------- +operation +proj=ortho +ellps=WGS84 +lat_0=55 +lon_0=5 +------------------------------------------------------------------------------- +tolerance 1 mm +accept 2.12955 53.80939444444444 +expect -189011.711 -128640.567 +roundtrip 1 + +# Equatorial +operation +proj=ortho +ellps=WGS84 +tolerance 0.1 mm +accept 0 0 +expect 0 0 +roundtrip 1 + +accept 0 89.99 +expect 0 6356752.2167 +roundtrip 1 + +accept 0 -89.99 +expect 0 -6356752.2167 +roundtrip 1 + +# Consistant with WGS84 semi-minor axis +# The inverse transformation doesn't converge due to properties of the projection +accept 0 90 +expect 0 6356752.3142 + +# North pole tests +operation +proj=ortho +ellps=WGS84 +lat_0=90 +tolerance 0.1 mm +accept 0 90 +expect 0 0 +roundtrip 1 + +accept 1 89.999 +expect 1.9493 -111.6770 +roundtrip 1 + +# Consistant with WGS84 semi-major axis +# The inverse transformation doesn't converge due to properties of the projection +accept 0 0 +expect 0 -6378137 + +# South pole tests +operation +proj=ortho +ellps=WGS84 +lat_0=-90 +tolerance 0.1 mm +accept 0 -90 +expect 0 0 +roundtrip 1 + +accept 1 -89.999 +expect 1.9493 111.6770 +roundtrip 1 + +# Consistant with WGS84 semi-major axis +# The inverse transformation doesn't converge due to properties of the projection +accept 0 0 +expect 0 6378137 + + =============================================================================== # Perspective Conic # Conic, Sph diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp index f2464e5c..34396fcf 100644 --- a/test/unit/test_io.cpp +++ b/test/unit/test_io.cpp @@ -5225,6 +5225,21 @@ static const struct { {"False_Northing", 2}, {"Longitude_Of_Center", 3}, {"Latitude_Of_Center", 4}}, + "Orthographic (Spherical)", + { + {"Latitude of natural origin", 4}, + {"Longitude of natural origin", 3}, + {"False easting", 1}, + {"False northing", 2}, + }}, + + {"Local", + {{"False_Easting", 1}, + {"False_Northing", 2}, + {"Scale_Factor", 1}, + {"Azimuth", 0}, + {"Longitude_Of_Center", 3}, + {"Latitude_Of_Center", 4}}, "Orthographic", { {"Latitude of natural origin", 4}, @@ -5233,6 +5248,24 @@ static const struct { {"False northing", 2}, }}, + // Local with unsupported value for Azimuth + {"Local", + {{"False_Easting", 1}, + {"False_Northing", 2}, + {"Scale_Factor", 1}, + {"Azimuth", 123}, + {"Longitude_Of_Center", 3}, + {"Latitude_Of_Center", 4}}, + "Local", + { + {"False_Easting", 1}, + {"False_Northing", 2}, + {"Scale_Factor", 1}, + {"Azimuth", 123}, + {"Longitude_Of_Center", 3}, + {"Latitude_Of_Center", 4}, + }}, + {"Winkel_Tripel", {{"False_Easting", 1}, {"False_Northing", 2}, @@ -5543,7 +5576,6 @@ static const struct { {"Longitude_Of_Origin", 3}, {"Latitude_Of_Origin", 4}}, }, - }; TEST(wkt_parse, esri_projcs) { @@ -9201,6 +9233,40 @@ TEST(io, projparse_non_earth_ellipsoid) { // --------------------------------------------------------------------------- +TEST(io, projparse_ortho_ellipsoidal) { + std::string input("+proj=ortho +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 " + "+ellps=WGS84 +units=m +no_defs +type=crs"); + auto obj = PROJStringParser().createFromPROJString(input); + auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); + ASSERT_TRUE(crs != nullptr); + EXPECT_EQ(crs->derivingConversion()->method()->getEPSGCode(), + EPSG_CODE_METHOD_ORTHOGRAPHIC); + EXPECT_EQ( + crs->exportToPROJString( + PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) + .get()), + input); +} + +// --------------------------------------------------------------------------- + +TEST(io, projparse_ortho_spherical) { + std::string input("+proj=ortho +f=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 " + "+ellps=WGS84 +units=m +no_defs +type=crs"); + auto obj = PROJStringParser().createFromPROJString(input); + auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); + ASSERT_TRUE(crs != nullptr); + EXPECT_EQ(crs->derivingConversion()->method()->nameStr(), + PROJ_WKT2_NAME_ORTHOGRAPHIC_SPHERICAL); + EXPECT_EQ( + crs->exportToPROJString( + PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) + .get()), + input); +} + +// --------------------------------------------------------------------------- + TEST(io, projparse_axisswap_unitconvert_longlat_proj) { std::string input = "+type=crs +proj=pipeline +step +proj=axisswap +order=2,1 +step " |
