aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHoward Butler <howard@hobu.co>2015-12-13 15:55:02 -0600
committerHoward Butler <howard@hobu.co>2015-12-13 15:55:02 -0600
commit3795cdf7cb98c0b89f16351a7bd2348831786525 (patch)
treeb2f3a9fc29806fbb08dfee24d8f37f222a9ae910 /src
parent953cc00fd87425395cabe37641cda905c4b587c1 (diff)
parent659b9e542c4622c4344c49cbe989af849666a59a (diff)
downloadPROJ-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.c18
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)