From 92f89a90e94fb1a94ce5337dfa4a9256b305c7e0 Mon Sep 17 00:00:00 2001 From: Jeff Whitaker Date: Sat, 12 Dec 2015 14:04:22 -0700 Subject: inverse for hammer projection --- src/PJ_hammer.c | 18 ++++++++++++++++-- 1 file 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 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) -- cgit v1.2.3 From 3d2501d0ee7b4724677cb19c6968888c4da31c3c Mon Sep 17 00:00:00 2001 From: Jeff Whitaker Date: Sun, 13 Dec 2015 07:40:20 -0700 Subject: changed spaces to tabs (to match rest of code) --- src/PJ_hammer.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/PJ_hammer.c b/src/PJ_hammer.c index fb5f3de3..f85d8fa8 100644 --- a/src/PJ_hammer.c +++ b/src/PJ_hammer.c @@ -15,16 +15,16 @@ FORWARD(s_forward); /* spheroid */ return (xy); } INVERSE(s_inverse); /* spheroid */ - double z; + 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; + 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); - } + lp.lam = aatan2(P->w * xy.x * z,2. * z * z - 1)/P->w; + p.phi = aasin(P->ctx,z * xy.y); + } return (lp); } FREEUP; if (P) pj_dalloc(P); } -- cgit v1.2.3 From 82d76066b36d4b24518c7ba04b37bf0e588a4d59 Mon Sep 17 00:00:00 2001 From: Jeff Whitaker Date: Sun, 13 Dec 2015 07:45:32 -0700 Subject: fix typo --- src/PJ_hammer.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/PJ_hammer.c b/src/PJ_hammer.c index f85d8fa8..31e7a127 100644 --- a/src/PJ_hammer.c +++ b/src/PJ_hammer.c @@ -2,7 +2,7 @@ double w; \ double m, rm; #define PJ_LIB__ -# define EPS 1.0e-10 +#define EPS 1.0e-10 # include PROJ_HEAD(hammer, "Hammer & Eckert-Greifendorff") "\n\tMisc Sph, \n\tW= M="; @@ -23,7 +23,7 @@ INVERSE(s_inverse); /* spheroid */ pj_errno = -14; } else { lp.lam = aatan2(P->w * xy.x * z,2. * z * z - 1)/P->w; - p.phi = aasin(P->ctx,z * xy.y); + lp.phi = aasin(P->ctx,z * xy.y); } return (lp); } -- cgit v1.2.3 From f8feacc4a71b1224ee1fe8b2bb5e79fd3bddefb2 Mon Sep 17 00:00:00 2001 From: Jeff Whitaker Date: Sun, 13 Dec 2015 10:12:59 -0700 Subject: add test for hammer projection (forward and inverse) --- nad/testvarious | 16 ++++++++++++++++ nad/tv_out.dist | 8 ++++++++ 2 files changed, 24 insertions(+) diff --git a/nad/testvarious b/nad/testvarious index 4f3ca324..972dc222 100755 --- a/nad/testvarious +++ b/nad/testvarious @@ -266,6 +266,22 @@ $EXE +proj=robin +datum=WGS84 \ 1741397.30 4276351.58 0.00 EOF echo "##############################################################" >> ${OUT} +echo "Test hammer projection (pull request #329)" >> ${OUT} +$EXE +proj=latlong +datum=WGS84 \ + +to +proj=hammer +datum=WGS84 \ + -E >>${OUT} <>${OUT} <> ${OUT} echo "Test healpix forward projection on sphere" >> ${OUT} $EXE +proj=latlong +a=1 +lon_0=0 \ +to +proj=healpix +a=1 +lon_0=0 -f '%.'5'f' \ diff --git a/nad/tv_out.dist b/nad/tv_out.dist index f3c6c39f..e58f6da1 100644 --- a/nad/tv_out.dist +++ b/nad/tv_out.dist @@ -92,6 +92,14 @@ Test robinson projection (#113) -2963455.42 4805073.65 0.00 35dW 45dN 0.000 1741397.30 4276351.58 0.00 20d0'0.002"E 40d0'0.066"N 0.000 ############################################################## +Test hammer projection (pull request #329) +-30 40 -2711575.08 4395506.62 0.00 +-35 45 -2964412.70 4929091.33 0.00 +20 40 1811748.54 4377349.50 0.00 +-2711575.08 4395506.62 0.00 30dW 40dN 0.000 +-2964412.70 4929091.33 0.00 35dW 45dN 0.000 +1811748.54 4377349.50 0.00 20dE 40dN 0.000 +############################################################## Test healpix forward projection on sphere 0 41.81031 0.00000 0.78540 0.00000 -90 0 -1.57080 0.00000 0.00000 -- cgit v1.2.3 From 659b9e542c4622c4344c49cbe989af849666a59a Mon Sep 17 00:00:00 2001 From: Jeff Whitaker Date: Sun, 13 Dec 2015 13:00:37 -0700 Subject: add Changelog entry --- ChangeLog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ChangeLog b/ChangeLog index dfa67267..ece889c4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2015-12-13: jswhit + * : Add inverse hammer transform (pull request #329). + 2015-09-10 sisyphus * : Rename PVALUE in pj_param.cto prevent Windows variable name clash -- cgit v1.2.3