diff options
| -rw-r--r-- | src/projections/ocea.cpp | 13 | ||||
| -rw-r--r-- | test/gie/builtins.gie | 96 |
2 files changed, 105 insertions, 4 deletions
diff --git a/src/projections/ocea.cpp b/src/projections/ocea.cpp index 4e28f727..3141dd11 100644 --- a/src/projections/ocea.cpp +++ b/src/projections/ocea.cpp @@ -50,7 +50,7 @@ static PJ_LP s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ *PROJECTION(ocea) { - double phi_0=0.0, phi_1, phi_2, lam_1, lam_2, lonz, alpha; + double phi_1, phi_2, lam_1, lam_2, lonz, alpha; struct pj_opaque *Q = static_cast<struct pj_opaque*>(pj_calloc (1, sizeof (struct pj_opaque))); if (nullptr==Q) @@ -63,12 +63,17 @@ PJ *PROJECTION(ocea) { /*If the keyword "alpha" is found in the sentence then use 1point+1azimuth*/ if ( pj_param(P->ctx, P->params, "talpha").i) { /*Define Pole of oblique transformation from 1 point & 1 azimuth*/ - alpha = pj_param(P->ctx, P->params, "ralpha").f; + // ERO: I've added M_PI so that the alpha is the angle from point 1 to point 2 + // from the North in a clockwise direction + // (to be consistent with omerc behaviour) + alpha = M_PI + pj_param(P->ctx, P->params, "ralpha").f; lonz = pj_param(P->ctx, P->params, "rlonc").f; /*Equation 9-8 page 80 (http://pubs.usgs.gov/pp/1395/report.pdf)*/ - lam_p = atan(-cos(alpha)/(-sin(phi_0) * sin(alpha))) + lonz; + // Actually slightliy modified to use atan2(), as it is suggested by + // Snyder for equation 9-1, but this is not mentionned here + lam_p = atan2(-cos(alpha) , -sin(P->phi0) * sin(alpha)) + lonz; /*Equation 9-7 page 80 (http://pubs.usgs.gov/pp/1395/report.pdf)*/ - phi_p = asin(cos(phi_0) * sin(alpha)); + phi_p = asin(cos(P->phi0) * sin(alpha)); /*If the keyword "alpha" is NOT found in the sentence then use 2points*/ } else { /*Define Pole of oblique transformation from 2 points*/ diff --git a/test/gie/builtins.gie b/test/gie/builtins.gie index a4fb5055..c8eb3a11 100644 --- a/test/gie/builtins.gie +++ b/test/gie/builtins.gie @@ -3717,6 +3717,85 @@ expect 179.999104753 -0.001790493 accept -200 -100 expect -179.999104753 -0.001790493 +Direction North +------------------------------------------------------------------------------- +operation +proj=ocea +a=6400000 +lat_1=45 +lat_2=45.0000001 +lon_1=0 +lon_2=0 +------------------------------------------------------------------------------- +tolerance 1 mm +accept 2 1 +expect 19994423.837934091687 223322.760576728586 + +------------------------------------------------------------------------------- +operation +proj=ocea +a=6400000 +lat_0=45 +alpha=0 +------------------------------------------------------------------------------- +tolerance 1 mm +accept 2 1 +expect 19994423.837934091687 223322.760576728586 + + +Direction South +------------------------------------------------------------------------------- +operation +proj=ocea +a=6400000 +lat_1=45 +lat_2=44.999999 +lon_1=0 +lon_2=0 +------------------------------------------------------------------------------- +tolerance 1 mm +accept 2 1 +expect 111769.145040585790 -223322.760576727480 + +------------------------------------------------------------------------------- +operation +proj=ocea +a=6400000 +lat_0=45 +alpha=180 +------------------------------------------------------------------------------- +tolerance 1 mm +accept 2 1 +expect 111769.145040585790 -223322.760576727480 + + +Direction East +------------------------------------------------------------------------------- +operation +proj=ocea +a=6400000 +lat_1=45 +lat_2=45 +lon_1=0 +lon_2=1e-8 +------------------------------------------------------------------------------- +tolerance 1 mm +accept 2 1 +expect 9742698.935838246718 4443057.188599349000 + +------------------------------------------------------------------------------- +operation +proj=ocea +a=6400000 +lat_0=45 +alpha=90 +------------------------------------------------------------------------------- +tolerance 1 mm +accept 2 1 +expect 9742698.935838246718 4443057.188599349000 + + +Direction West +------------------------------------------------------------------------------- +operation +proj=ocea +a=6400000 +lat_1=45 +lat_2=45 +lon_1=0 +lon_2=-1e-8 +------------------------------------------------------------------------------- +tolerance 1 mm +accept 2 1 +expect 10363494.047136424109 -4443057.188599349000 + +------------------------------------------------------------------------------- +operation +proj=ocea +a=6400000 +lat_0=45 +alpha=270 +------------------------------------------------------------------------------- +tolerance 1 mm +accept 2 1 +expect 10363494.047136424109 -4443057.188599349000 + + +Direction North-East +------------------------------------------------------------------------------- +operation +proj=ocea +a=6400000 +lat_1=45 +lat_2=45.00001 +lon_1=0 +lon_2=1e-5 +------------------------------------------------------------------------------- +# 3 mm needed for MacOSX... +tolerance 3 mm +accept 2 1 +expect 18596261.668446537107 2747542.17330662999 + +------------------------------------------------------------------------------- +operation +proj=ocea +a=6400000 +lat_0=45 +alpha=35.264383770917604 +------------------------------------------------------------------------------- +tolerance 1 mm +accept 2 1 +expect 18596261.668446537107 2747542.17330662999 =============================================================================== Oblated Equal Area @@ -3809,6 +3888,23 @@ accept 0 1e200 expect failure errno invalid_x_or_y + +Direction North-East +------------------------------------------------------------------------------- +operation +proj=omerc +a=6400000 +lat_0=45 +lat_1=45 +lat_2=45.00001 +lon_1=0 +lon_2=1e-5 +------------------------------------------------------------------------------- +tolerance 1 mm +accept 2 1 +expect -3569.825230822232 -5093592.310871849768 + +------------------------------------------------------------------------------- +operation +proj=omerc +a=6400000 +lat_0=45 +alpha=35.264383770917604 +------------------------------------------------------------------------------- +tolerance 1 mm +accept 2 1 +expect -3569.825230822232 -5093592.310871849768 + + =============================================================================== Ortelius Oval Misc Sph, no inv. |
