svn-gvsig-desktop / trunk / libraries / libjni-proj4 / src / PJ_ocea.c @ 7098
History | View | Annotate | Download (1.98 KB)
1 |
#ifndef lint
|
---|---|
2 |
static const char SCCSID[]="@(#)PJ_ocea.c 4.1 94/02/15 GIE REL"; |
3 |
#endif
|
4 |
#define PROJ_PARMS__ \
|
5 |
double rok; \
|
6 |
double rtk; \
|
7 |
double sinphi; \
|
8 |
double cosphi; \
|
9 |
double singam; \
|
10 |
double cosgam;
|
11 |
#define PJ_LIB__
|
12 |
#include <projects.h> |
13 |
PROJ_HEAD(ocea, "Oblique Cylindrical Equal Area") "\n\tCyl, Sph" |
14 |
"lonc= alpha= or\n\tlat_1= lat_2= lon_1= lon_2=";
|
15 |
FORWARD(s_forward); /* spheroid */
|
16 |
double t;
|
17 |
|
18 |
xy.y = sin(lp.lam); |
19 |
/*
|
20 |
xy.x = atan2((tan(lp.phi) * P->cosphi + P->sinphi * xy.y) , cos(lp.lam));
|
21 |
*/
|
22 |
t = cos(lp.lam); |
23 |
xy.x = atan((tan(lp.phi) * P->cosphi + P->sinphi * xy.y) / t); |
24 |
if (t < 0.) |
25 |
xy.x += PI; |
26 |
xy.x *= P->rtk; |
27 |
xy.y = P->rok * (P->sinphi * sin(lp.phi) - P->cosphi * cos(lp.phi) * xy.y); |
28 |
return (xy);
|
29 |
} |
30 |
INVERSE(s_inverse); /* spheroid */
|
31 |
double t, s;
|
32 |
|
33 |
xy.y /= P->rok; |
34 |
xy.x /= P->rtk; |
35 |
t = sqrt(1. - xy.y * xy.y);
|
36 |
lp.phi = asin(xy.y * P->sinphi + t * P->cosphi * (s = sin(xy.x))); |
37 |
lp.lam = atan2(t * P->sinphi * s - xy.y * P->cosphi, |
38 |
t * cos(xy.x)); |
39 |
return (lp);
|
40 |
} |
41 |
FREEUP; if (P) pj_dalloc(P); }
|
42 |
ENTRY0(ocea) |
43 |
double phi_0=0.0, phi_1, phi_2, lam_1, lam_2, lonz, alpha; |
44 |
|
45 |
P->rok = P->a / P->k0; |
46 |
P->rtk = P->a * P->k0; |
47 |
if ( pj_param(P->params, "talpha").i) { |
48 |
alpha = pj_param(P->params, "ralpha").f;
|
49 |
lonz = pj_param(P->params, "rlonc").f;
|
50 |
P->singam = atan(-cos(alpha)/(-sin(phi_0) * sin(alpha))) + lonz; |
51 |
P->sinphi = asin(cos(phi_0) * sin(alpha)); |
52 |
} else {
|
53 |
phi_1 = pj_param(P->params, "rlat_1").f;
|
54 |
phi_2 = pj_param(P->params, "rlat_2").f;
|
55 |
lam_1 = pj_param(P->params, "rlon_1").f;
|
56 |
lam_2 = pj_param(P->params, "rlon_2").f;
|
57 |
P->singam = atan2(cos(phi_1) * sin(phi_2) * cos(lam_1) - |
58 |
sin(phi_1) * cos(phi_2) * cos(lam_2), |
59 |
sin(phi_1) * cos(phi_2) * sin(lam_2) - |
60 |
cos(phi_1) * sin(phi_2) * sin(lam_1) ); |
61 |
P->sinphi = atan(-cos(P->singam - lam_1) / tan(phi_1)); |
62 |
} |
63 |
P->lam0 = P->singam + HALFPI; |
64 |
P->cosphi = cos(P->sinphi); |
65 |
P->sinphi = sin(P->sinphi); |
66 |
P->cosgam = cos(P->singam); |
67 |
P->singam = sin(P->singam); |
68 |
P->inv = s_inverse; |
69 |
P->fwd = s_forward; |
70 |
P->es = 0.;
|
71 |
ENDENTRY(P) |