diff options
| author | Jeff Whitaker <jswhit@fastmail.fm> | 2015-12-12 14:04:22 -0700 |
|---|---|---|
| committer | Jeff Whitaker <jswhit@fastmail.fm> | 2015-12-12 14:04:22 -0700 |
| commit | 92f89a90e94fb1a94ce5337dfa4a9256b305c7e0 (patch) | |
| tree | 8fb9de6aca34235be813ea9be5d08eb337a620ec /src | |
| parent | 953cc00fd87425395cabe37641cda905c4b587c1 (diff) | |
| download | PROJ-92f89a90e94fb1a94ce5337dfa4a9256b305c7e0.tar.gz PROJ-92f89a90e94fb1a94ce5337dfa4a9256b305c7e0.zip | |
inverse for hammer projection
Diffstat (limited to 'src')
| -rw-r--r-- | src/PJ_hammer.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/PJ_hammer.c b/src/PJ_hammer.c index 719a2ce4..fb5f3de3 100644 --- a/src/PJ_hammer.c +++ b/src/PJ_hammer.c @@ -2,9 +2,10 @@ double w; \ double m, rm; #define PJ_LIB__ +# define EPS 1.0e-10 # include <projects.h> PROJ_HEAD(hammer, "Hammer & Eckert-Greifendorff") - "\n\tMisc Sph, no inv.\n\tW= M="; + "\n\tMisc Sph, \n\tW= M="; FORWARD(s_forward); /* spheroid */ double cosphi, d; @@ -13,6 +14,19 @@ FORWARD(s_forward); /* spheroid */ xy.y = P->rm * d * sin(lp.phi); return (xy); } +INVERSE(s_inverse); /* spheroid */ + double z; + z = sqrt(1. - 0.25*P->w*P->w*xy.x*xy.x - 0.25*xy.y*xy.y); + if (fabs(2.*z*z-1.) < EPS) { + lp.lam = HUGE_VAL; + lp.phi = HUGE_VAL; + pj_errno = -14; + } else { + lp.lam = aatan2(P->w * xy.x * z,2. * z * z - 1)/P->w; + lp.phi = aasin(P->ctx,z * xy.y); + } + return (lp); +} FREEUP; if (P) pj_dalloc(P); } ENTRY0(hammer) if (pj_param(P->ctx, P->params, "tW").i) { @@ -25,5 +39,5 @@ ENTRY0(hammer) P->m = 1.; P->rm = 1. / P->m; P->m /= P->w; - P->es = 0.; P->fwd = s_forward; + P->es = 0.; P->fwd = s_forward; P->inv = s_inverse; ENDENTRY(P) |
