~ubuntu-branches/ubuntu/vivid/proj/vivid

« back to all changes in this revision

Viewing changes to src/pj_fwd.c

  • Committer: Bazaar Package Importer
  • Author(s): Peter S Galbraith
  • Date: 2002-01-11 10:27:12 UTC
  • Revision ID: james.westby@ubuntu.com-20020111102712-ayi18r8y2eesv0y9
Tags: upstream-4.4.5
ImportĀ upstreamĀ versionĀ 4.4.5

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* general forward projection */
 
2
#ifndef lint
 
3
static const char SCCSID[]="@(#)pj_fwd.c        4.4     93/06/12        GIE     REL";
 
4
#endif
 
5
#define PJ_LIB__
 
6
#include <projects.h>
 
7
#include <errno.h>
 
8
# define EPS 1.0e-12
 
9
        XY /* forward projection entry */
 
10
pj_fwd(LP lp, PJ *P) {
 
11
        XY xy;
 
12
        double t;
 
13
 
 
14
        /* check for forward and latitude or longitude overange */
 
15
        if ((t = fabs(lp.phi)-HALFPI) > EPS || fabs(lp.lam) > 10.) {
 
16
                xy.x = xy.y = HUGE_VAL;
 
17
                pj_errno = -14;
 
18
        } else { /* proceed with projection */
 
19
                errno = pj_errno = 0;
 
20
                if (fabs(t) <= EPS)
 
21
                        lp.phi = lp.phi < 0. ? -HALFPI : HALFPI;
 
22
                else if (P->geoc)
 
23
                        lp.phi = atan(P->rone_es * tan(lp.phi));
 
24
                lp.lam -= P->lam0;      /* compute del lp.lam */
 
25
                if (!P->over)
 
26
                        lp.lam = adjlon(lp.lam); /* adjust del longitude */
 
27
                xy = (*P->fwd)(lp, P); /* project */
 
28
                if (pj_errno || (pj_errno = errno))
 
29
                        xy.x = xy.y = HUGE_VAL;
 
30
                /* adjust for major axis and easting/northings */
 
31
                else {
 
32
                        xy.x = P->fr_meter * (P->a * xy.x + P->x0);
 
33
                        xy.y = P->fr_meter * (P->a * xy.y + P->y0);
 
34
                }
 
35
        }
 
36
        return xy;
 
37
}