diff options
| author | Howard Butler <howard@hobu.co> | 2015-12-13 15:55:02 -0600 |
|---|---|---|
| committer | Howard Butler <howard@hobu.co> | 2015-12-13 15:55:02 -0600 |
| commit | 3795cdf7cb98c0b89f16351a7bd2348831786525 (patch) | |
| tree | b2f3a9fc29806fbb08dfee24d8f37f222a9ae910 /src | |
| parent | 953cc00fd87425395cabe37641cda905c4b587c1 (diff) | |
| parent | 659b9e542c4622c4344c49cbe989af849666a59a (diff) | |
| download | PROJ-3795cdf7cb98c0b89f16351a7bd2348831786525.tar.gz PROJ-3795cdf7cb98c0b89f16351a7bd2348831786525.zip | |
Merge pull request #329 from jswhit/master
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..31e7a127 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) |
