aboutsummaryrefslogtreecommitdiff
path: root/src/PJ_wag7.c
diff options
context:
space:
mode:
authorThomas Knudsen <lastname DOT firstname AT gmail DOT com>2016-04-12 17:25:22 +0200
committerThomas Knudsen <lastname DOT firstname AT gmail DOT com>2016-04-12 17:25:22 +0200
commit86a3221bdc26ea2cdbe85fcf270263ce02fef0e6 (patch)
tree3d50ff375a58f75a9f6ff0e4d8d9f957449318fc /src/PJ_wag7.c
parentf50841c72455fe01c3d7a3310c1eba9b5eec40b8 (diff)
downloadPROJ-86a3221bdc26ea2cdbe85fcf270263ce02fef0e6.tar.gz
PROJ-86a3221bdc26ea2cdbe85fcf270263ce02fef0e6.zip
refactoring + added selftest for 8 more projections
calcofi, cass,cc,wag2, wag3, wag7, wink1, wink2
Diffstat (limited to 'src/PJ_wag7.c')
-rw-r--r--src/PJ_wag7.c66
1 files changed, 59 insertions, 7 deletions
diff --git a/src/PJ_wag7.c b/src/PJ_wag7.c
index db29ffb1..847566d8 100644
--- a/src/PJ_wag7.c
+++ b/src/PJ_wag7.c
@@ -1,15 +1,67 @@
#define PJ_LIB__
#include <projects.h>
+
PROJ_HEAD(wag7, "Wagner VII") "\n\tMisc Sph, no inv.";
-FORWARD(s_forward); /* sphere */
+
+
+
+static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */
+ XY xy = {0.0, 0.0};
double theta, ct, D;
- (void) P;
- theta = asin(xy.y = 0.90630778703664996 * sin(lp.phi));
- xy.x = 2.66723 * (ct = cos(theta)) * sin(lp.lam /= 3.);
- xy.y *= 1.24104 * (D = 1/(sqrt(0.5 * (1 + ct * cos(lp.lam)))));
+ (void) P; /* Shut up compiler warnnings about unused P */
+
+ theta = asin (xy.y = 0.90630778703664996 * sin(lp.phi));
+ xy.x = 2.66723 * (ct = cos (theta)) * sin (lp.lam /= 3.);
+ xy.y *= 1.24104 * (D = 1/(sqrt (0.5 * (1 + ct * cos (lp.lam)))));
xy.x *= D;
return (xy);
}
-FREEUP; if (P) pj_dalloc(P); }
-ENTRY0(wag7) P->fwd = s_forward; P->inv = 0; P->es = 0.; ENDENTRY(P)
+
+
+static void *freeup_new (PJ *P) { /* Destructor */
+ return pj_dealloc(P);
+}
+
+static void freeup (PJ *P) {
+ freeup_new (P);
+ return;
+}
+
+
+
+PJ *PROJECTION(wag7) {
+ P->fwd = s_forward;
+ P->inv = 0;
+ P->es = 0.;
+ return P;
+}
+
+
+#ifdef PJ_OMIT_SELFTEST
+int pj_wag7_selftest (void) {return 0;}
+#else
+
+int pj_wag7_selftest (void) {
+ double tolerance_lp = 1e-10;
+ double tolerance_xy = 1e-7;
+
+ char s_args[] = {"+proj=wag7 +a=6400000 +lat_1=0.5 +lat_2=2"};
+
+ LP fwd_in[] = {
+ { 2, 1},
+ { 2,-1},
+ {-2, 1},
+ {-2,-1}
+ };
+
+ XY s_fwd_expect[] = {
+ { 198601.87695731167, 125637.0457141714},
+ { 198601.87695731167, -125637.0457141714},
+ {-198601.87695731167, 125637.0457141714},
+ {-198601.87695731167, -125637.0457141714},
+ };
+
+ return pj_generic_selftest (0, s_args, tolerance_xy, tolerance_lp, 4, 4, fwd_in, 0, s_fwd_expect, 0, 0, 0);
+}
+#endif