1 #define PJ_LIB__ 2 #include <math.h> 3 4 #include "proj.h" 5 #include "proj_internal.h" 6 7 PROJ_HEAD(boggs, "Boggs Eumorphic") "\n\tPCyl, no inv, Sph"; 8 # define NITER 20 9 # define EPS 1e-7 10 # define FXC 2.00276 11 # define FXC2 1.11072 12 # define FYC 0.49931 13 14 boggs_s_forward(PJ_LP lp,PJ * P)15static PJ_XY boggs_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forward */ 16 PJ_XY xy = {0.0,0.0}; 17 double theta, th1, c; 18 int i; 19 (void) P; 20 21 theta = lp.phi; 22 if (fabs(fabs(lp.phi) - M_HALFPI) < EPS) 23 xy.x = 0.; 24 else { 25 c = sin(theta) * M_PI; 26 for (i = NITER; i; --i) { 27 th1 = (theta + sin(theta) - c) / (1. + cos(theta)); 28 theta -= th1; 29 if (fabs(th1) < EPS) break; 30 } 31 theta *= 0.5; 32 xy.x = FXC * lp.lam / (1. / cos(lp.phi) + FXC2 / cos(theta)); 33 } 34 xy.y = FYC * (lp.phi + M_SQRT2 * sin(theta)); 35 return (xy); 36 } 37 38 39 PROJECTION(boggs)40PJ *PROJECTION(boggs) { 41 P->es = 0.; 42 P->fwd = boggs_s_forward; 43 return P; 44 } 45