From 565a4bd035b9d4a83955808efef20f1d8dfa24cf Mon Sep 17 00:00:00 2001 From: Frank Warmerdam Date: Thu, 18 Mar 1999 16:34:52 +0000 Subject: New git-svn-id: http://svn.osgeo.org/metacrs/proj/trunk@776 4e78687f-474d-0410-85f9-8d5e500ac6b2 --- src/pj_inv.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/pj_inv.c (limited to 'src/pj_inv.c') diff --git a/src/pj_inv.c b/src/pj_inv.c new file mode 100644 index 00000000..16dd90dd --- /dev/null +++ b/src/pj_inv.c @@ -0,0 +1,32 @@ +/* general inverse projection */ +#ifndef lint +static const char SCCSID[]="@(#)pj_inv.c 4.5 93/06/12 GIE REL"; +#endif +#define PJ_LIB__ +#include +#include +# define EPS 1.0e-12 + LP /* inverse projection entry */ +pj_inv(XY xy, PJ *P) { + LP lp; + + /* can't do as much preliminary checking as with forward */ + if (xy.x == HUGE_VAL || xy.y == HUGE_VAL) { + lp.lam = lp.phi = HUGE_VAL; + pj_errno = -15; + } + errno = pj_errno = 0; + xy.x = (xy.x * P->to_meter - P->x0) * P->ra; /* descale and de-offset */ + xy.y = (xy.y * P->to_meter - P->y0) * P->ra; + lp = (*P->inv)(xy, P); /* inverse project */ + if (pj_errno || (pj_errno = errno)) + lp.lam = lp.phi = HUGE_VAL; + else { + lp.lam += P->lam0; /* reduce from del lp.lam */ + if (!P->over) + lp.lam = adjlon(lp.lam); /* adjust longitude to CM */ + if (P->geoc && fabs(fabs(lp.phi)-HALFPI) > EPS) + lp.phi = atan(P->one_es * tan(lp.phi)); + } + return lp; +} -- cgit v1.2.3