aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/projections/ocea.cpp13
-rw-r--r--test/gie/builtins.gie96
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.