Statistics
| Revision:

root / trunk / libraries / libjni-proj4 / src / PJ_goode.c @ 13136

History | View | Annotate | Download (1.12 KB)

1
#ifndef lint
2
static const char SCCSID[]="@(#)PJ_goode.c        4.1 94/02/15     GIE     REL";
3
#endif
4
#define PROJ_PARMS__ \
5
        struct PJconsts        *sinu; \
6
        struct PJconsts        *moll;
7
#define PJ_LIB__
8
#include        <projects.h>
9
PROJ_HEAD(goode, "Goode Homolosine") "\n\tPCyl, Sph.";
10
        C_NAMESPACE PJ
11
*pj_sinu(PJ *), *pj_moll(PJ *);
12
#define Y_COR                0.05280
13
#define PHI_LIM        .71093078197902358062
14
FORWARD(s_forward); /* spheroid */
15
        if (fabs(lp.phi) <= PHI_LIM)
16
                xy = P->sinu->fwd(lp, P->sinu);
17
        else {
18
                xy = P->moll->fwd(lp, P->moll);
19
                xy.y -= lp.phi >= 0.0 ? Y_COR : -Y_COR;
20
        }
21
        return (xy);
22
}
23
INVERSE(s_inverse); /* spheroid */
24
        if (fabs(xy.y) <= PHI_LIM)
25
                lp = P->sinu->inv(xy, P->sinu);
26
        else {
27
                xy.y += xy.y >= 0.0 ? Y_COR : -Y_COR;
28
                lp = P->moll->inv(xy, P->moll);
29
        }
30
        return (lp);
31
}
32
FREEUP;
33
        if (P) {
34
                if (P->sinu)
35
                        (*(P->sinu->pfree))(P->sinu);
36
                if (P->moll)
37
                        (*(P->moll->pfree))(P->moll);
38
                pj_dalloc(P);
39
        }
40
}
41
ENTRY2(goode, sinu, moll)
42
        P->es = 0.;
43
        if (!(P->sinu = pj_sinu(0)) || !(P->moll = pj_moll(0)))
44
                E_ERROR_0;
45
        if (!(P->sinu = pj_sinu(P->sinu)) || !(P->moll = pj_moll(P->moll)))
46
                E_ERROR_0;
47
        P->fwd = s_forward;
48
        P->inv = s_inverse;
49
ENDENTRY(P)