From f09ce26597f18d98a80e102cd5a124a92741a500 Mon Sep 17 00:00:00 2001 From: Jeff Whitaker Date: Fri, 16 Dec 2011 09:04:17 -0700 Subject: [PATCH 01/14] update to pyproj 1.9.0 --- src/PJ_aea.c | 12 +- src/PJ_aeqd.c | 22 +- src/PJ_airy.c | 8 +- src/PJ_aitoff.c | 8 +- src/PJ_bipc.c | 2 +- src/PJ_bonne.c | 4 +- src/PJ_cass.c | 2 +- src/PJ_cea.c | 7 +- src/PJ_chamb.c | 24 +- src/PJ_eck4.c | 4 +- src/PJ_eqc.c | 2 +- src/PJ_eqdc.c | 6 +- src/PJ_fouc_s.c | 4 +- src/PJ_geos.c | 8 +- src/PJ_gn_sinu.c | 16 +- src/PJ_goode.c | 3 + src/PJ_gstmerc.c | 2 +- src/PJ_hammer.c | 10 +- src/PJ_healpix.c | 672 ++++++++++++++++++++++++++++++++++++++ src/PJ_igh.c | 190 +++++++++++ src/PJ_imw_p.c | 12 +- src/PJ_krovak.c | 23 +- src/PJ_labrd.c | 4 +- src/PJ_lagrng.c | 4 +- src/PJ_lcc.c | 10 +- src/PJ_lcca.c | 8 +- src/PJ_loxim.c | 2 +- src/PJ_lsat.c | 8 +- src/PJ_mbt_fps.c | 6 +- src/PJ_merc.c | 6 +- src/PJ_mod_ster.c | 2 +- src/PJ_moll.c | 6 +- src/PJ_nell.c | 4 +- src/PJ_nsper.c | 6 +- src/PJ_ob_tran.c | 34 +- src/PJ_ocea.c | 14 +- src/PJ_oea.c | 20 +- src/PJ_omerc.c | 274 +++++++++------- src/PJ_putp2.c | 4 +- src/PJ_putp4p.c | 6 +- src/PJ_putp6.c | 2 +- src/PJ_robin.c | 76 ++--- src/PJ_rpoly.c | 2 +- src/PJ_sconics.c | 8 +- src/PJ_somerc.c | 10 +- src/PJ_stere.c | 6 +- src/PJ_sterea.c | 11 +- src/PJ_sts.c | 2 +- src/PJ_tmerc.c | 12 +- src/PJ_tpeqd.c | 20 +- src/PJ_urm5.c | 8 +- src/PJ_urmfps.c | 8 +- src/PJ_wag2.c | 4 +- src/PJ_wag3.c | 2 +- src/PJ_wink1.c | 2 +- src/PJ_wink2.c | 2 +- src/_geod.c | 20 +- src/_proj.c | 20 +- src/_pyproj.pxi | 2 +- src/aasincos.c | 12 +- src/biveval.c | 128 ++++---- src/dmstor.c | 9 +- src/emess.h | 4 - src/geod_inv.c | 2 +- src/geod_set.c | 66 ++-- src/geodesic.h | 33 +- src/hypot.c | 36 ++ src/mk_cheby.c | 12 +- src/nad_init.c | 171 +++++++++- src/pj_apply_gridshift.c | 128 ++++++-- src/pj_apply_vgridshift.c | 208 ++++++++++++ src/pj_auth.c | 14 +- src/pj_ctx.c | 179 ++++++++++ src/pj_datum_set.c | 12 +- src/pj_datums.c | 4 +- src/pj_ell_set.c | 63 ++-- src/pj_factors.c | 8 +- src/pj_fwd.c | 9 +- src/pj_gauss.c | 8 +- src/pj_gridinfo.c | 330 ++++++++++++++----- src/pj_gridlist.c | 110 ++----- src/pj_init.c | 577 +++++++++++++++++--------------- src/pj_initcache.c | 124 +++---- src/pj_inv.c | 8 +- src/pj_list.h | 4 + src/pj_log.c | 73 +++++ src/pj_malloc.c | 14 +- src/pj_mlfn.c | 6 +- src/pj_mutex.c | 28 +- src/pj_open_lib.c | 21 +- src/pj_param.c | 14 +- src/pj_phi2.c | 4 +- src/pj_pr_list.c | 2 +- src/pj_strerrno.c | 6 +- src/pj_transform.c | 316 ++++++++++++++---- src/pj_utils.c | 60 ++-- src/proj_api.h | 31 +- src/proj_etmerc.c | 252 ++++++++++++++ src/proj_mdist.c | 6 +- src/proj_rouss.c | 4 +- src/projects.h | 93 ++++-- src/pycompat.h | 7 + src/vector1.c | 2 +- 103 files changed, 3592 insertions(+), 1282 deletions(-) create mode 100644 src/PJ_healpix.c create mode 100644 src/PJ_igh.c create mode 100644 src/hypot.c create mode 100644 src/pj_apply_vgridshift.c create mode 100644 src/pj_ctx.c create mode 100644 src/pj_log.c create mode 100644 src/proj_etmerc.c create mode 100644 src/pycompat.h diff --git a/src/PJ_aea.c b/src/PJ_aea.c index c37993657..53f03b02d 100644 --- a/src/PJ_aea.c +++ b/src/PJ_aea.c @@ -1,5 +1,5 @@ /****************************************************************************** - * $Id: PJ_aea.c 1504 2009-01-06 02:11:57Z warmerdam $ + * $Id: PJ_aea.c 1856 2010-06-11 03:26:04Z warmerdam $ * * Project: PROJ.4 * Purpose: Implementation of the aea (Albers Equal Area) projection. @@ -43,7 +43,7 @@ #define PJ_LIB__ #include -PJ_CVSID("$Id: PJ_aea.c 1504 2009-01-06 02:11:57Z warmerdam $"); +PJ_CVSID("$Id: PJ_aea.c 1856 2010-06-11 03:26:04Z warmerdam $"); # define EPS10 1.e-10 # define TOL7 1.e-7 @@ -153,10 +153,10 @@ setup(PJ *P) { return P; } ENTRY1(aea,en) - P->phi1 = pj_param(P->params, "rlat_1").f; - P->phi2 = pj_param(P->params, "rlat_2").f; + P->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; + P->phi2 = pj_param(P->ctx, P->params, "rlat_2").f; ENDENTRY(setup(P)) ENTRY1(leac,en) - P->phi2 = pj_param(P->params, "rlat_1").f; - P->phi1 = pj_param(P->params, "bsouth").i ? - HALFPI: HALFPI; + P->phi2 = pj_param(P->ctx, P->params, "rlat_1").f; + P->phi1 = pj_param(P->ctx, P->params, "bsouth").i ? - HALFPI: HALFPI; ENDENTRY(setup(P)) diff --git a/src/PJ_aeqd.c b/src/PJ_aeqd.c index dea9edff1..6ff287189 100644 --- a/src/PJ_aeqd.c +++ b/src/PJ_aeqd.c @@ -1,5 +1,5 @@ /****************************************************************************** - * $Id: PJ_aeqd.c 1504 2009-01-06 02:11:57Z warmerdam $ + * $Id: PJ_aeqd.c 1856 2010-06-11 03:26:04Z warmerdam $ * * Project: PROJ.4 * Purpose: Implementation of the aeqd (Azimuthal Equidistant) projection. @@ -40,7 +40,7 @@ #define PJ_LIB__ #include -PJ_CVSID("$Id: PJ_aeqd.c 1504 2009-01-06 02:11:57Z warmerdam $"); +PJ_CVSID("$Id: PJ_aeqd.c 1856 2010-06-11 03:26:04Z warmerdam $"); PROJ_HEAD(aeqd, "Azimuthal Equidistant") "\n\tAzi, Sph&Ell\n\tlat_0 guam"; @@ -87,7 +87,7 @@ FORWARD(e_forward); /* elliptical */ ct = cos(t); st = sin(t); Az = atan2(sin(lp.lam) * ct, P->cosph0 * st - P->sinph0 * coslam * ct); cA = cos(Az); sA = sin(Az); - s = aasin( fabs(sA) < TOL ? + s = aasin( P->ctx, fabs(sA) < TOL ? (P->cosph0 * st - P->sinph0 * coslam * ct) / cA : sin(lp.lam) * ct / sA ); H = P->He * cA; @@ -147,7 +147,7 @@ INVERSE(e_guam_inv); /* Guam elliptical */ lp.phi = P->phi0; for (i = 0; i < 3; ++i) { t = P->e * sin(lp.phi); - lp.phi = pj_inv_mlfn(P->M1 + xy.y - + lp.phi = pj_inv_mlfn(P->ctx, P->M1 + xy.y - x2 * tan(lp.phi) * (t = sqrt(1. - t * t)), P->es, P->en); } lp.lam = xy.x * t / cos(lp.phi); @@ -170,8 +170,8 @@ INVERSE(e_inverse); /* elliptical */ D = c / P->N1; E = D * (1. - D * D * (A * (1. + A) / 6. + B * (1. + 3.*A) * D / 24.)); F = 1. - E * E * (A / 2. + B * E / 6.); - psi = aasin(P->sinph0 * cos(E) + t * sin(E)); - lp.lam = aasin(sin(Az) * sin(E) / cos(psi)); + psi = aasin(P->ctx, P->sinph0 * cos(E) + t * sin(E)); + lp.lam = aasin(P->ctx, sin(Az) * sin(E) / cos(psi)); if ((t = fabs(psi)) < EPS10) lp.phi = 0.; else if (fabs(t - HALFPI) < 0.) @@ -180,7 +180,7 @@ INVERSE(e_inverse); /* elliptical */ lp.phi = atan((1. - P->es * F * P->sinph0 / sin(psi)) * tan(psi) / P->one_es); } else { /* Polar */ - lp.phi = pj_inv_mlfn(P->mode == N_POLE ? P->Mp - c : P->Mp + c, + lp.phi = pj_inv_mlfn(P->ctx, P->mode == N_POLE ? P->Mp - c : P->Mp + c, P->es, P->en); lp.lam = atan2(xy.x, P->mode == N_POLE ? -xy.y : xy.y); } @@ -201,11 +201,11 @@ INVERSE(s_inverse); /* spherical */ sinc = sin(c_rh); cosc = cos(c_rh); if (P->mode == EQUIT) { - lp.phi = aasin(xy.y * sinc / c_rh); + lp.phi = aasin(P->ctx, xy.y * sinc / c_rh); xy.x *= sinc; xy.y = cosc * c_rh; } else { - lp.phi = aasin(cosc * P->sinph0 + xy.y * sinc * P->cosph0 / + lp.phi = aasin(P->ctx,cosc * P->sinph0 + xy.y * sinc * P->cosph0 / c_rh); xy.y = (cosc - P->sinph0 * sin(lp.phi)) * c_rh; xy.x *= sinc * P->cosph0; @@ -228,7 +228,7 @@ FREEUP; } } ENTRY1(aeqd, en) - P->phi0 = pj_param(P->params, "rlat_0").f; + P->phi0 = pj_param(P->ctx, P->params, "rlat_0").f; if (fabs(fabs(P->phi0) - HALFPI) < EPS10) { P->mode = P->phi0 < 0. ? S_POLE : N_POLE; P->sinph0 = P->phi0 < 0. ? -1. : 1.; @@ -246,7 +246,7 @@ ENTRY1(aeqd, en) P->inv = s_inverse; P->fwd = s_forward; } else { if (!(P->en = pj_enfn(P->es))) E_ERROR_0; - if (pj_param(P->params, "bguam").i) { + if (pj_param(P->ctx, P->params, "bguam").i) { P->M1 = pj_mlfn(P->phi0, P->sinph0, P->cosph0, P->en); P->inv = e_guam_inv; P->fwd = e_guam_fwd; } else { diff --git a/src/PJ_airy.c b/src/PJ_airy.c index 2de02ee21..abb4d1278 100644 --- a/src/PJ_airy.c +++ b/src/PJ_airy.c @@ -1,5 +1,5 @@ /****************************************************************************** - * $Id: PJ_airy.c 1504 2009-01-06 02:11:57Z warmerdam $ + * $Id: PJ_airy.c 1856 2010-06-11 03:26:04Z warmerdam $ * * Project: PROJ.4 * Purpose: Implementation of the airy (Airy) projection. @@ -37,7 +37,7 @@ #define PJ_LIB__ #include -PJ_CVSID("$Id: PJ_airy.c 1504 2009-01-06 02:11:57Z warmerdam $"); +PJ_CVSID("$Id: PJ_airy.c 1856 2010-06-11 03:26:04Z warmerdam $"); PROJ_HEAD(airy, "Airy") "\n\tMisc Sph, no inv.\n\tno_cut lat_b="; @@ -94,8 +94,8 @@ FREEUP; if (P) pj_dalloc(P); } ENTRY0(airy) double beta; - P->no_cut = pj_param(P->params, "bno_cut").i; - beta = 0.5 * (HALFPI - pj_param(P->params, "rlat_b").f); + P->no_cut = pj_param(P->ctx, P->params, "bno_cut").i; + beta = 0.5 * (HALFPI - pj_param(P->ctx, P->params, "rlat_b").f); if (fabs(beta) < EPS) P->Cb = -0.5; else { diff --git a/src/PJ_aitoff.c b/src/PJ_aitoff.c index a49b30bbc..1e39b2f37 100644 --- a/src/PJ_aitoff.c +++ b/src/PJ_aitoff.c @@ -1,5 +1,5 @@ /****************************************************************************** - * $Id: PJ_aitoff.c 1504 2009-01-06 02:11:57Z warmerdam $ + * $Id: PJ_aitoff.c 1856 2010-06-11 03:26:04Z warmerdam $ * * Project: PROJ.4 * Purpose: Implementation of the aitoff (Aitoff) and wintri (Winkel Tripel) @@ -34,7 +34,7 @@ #define PJ_LIB__ #include -PJ_CVSID("$Id: PJ_aitoff.c 1504 2009-01-06 02:11:57Z warmerdam $"); +PJ_CVSID("$Id: PJ_aitoff.c 1856 2010-06-11 03:26:04Z warmerdam $"); PROJ_HEAD(aitoff, "Aitoff") "\n\tMisc Sph"; PROJ_HEAD(wintri, "Winkel Tripel") "\n\tMisc Sph\n\tlat_1"; @@ -66,9 +66,9 @@ ENTRY0(aitoff) ENDENTRY(setup(P)) ENTRY0(wintri) P->mode = 1; - if (pj_param(P->params, "tlat_1").i) + if (pj_param(P->ctx, P->params, "tlat_1").i) { - if ((P->cosphi1 = cos(pj_param(P->params, "rlat_1").f)) == 0.) + if ((P->cosphi1 = cos(pj_param(P->ctx, P->params, "rlat_1").f)) == 0.) E_ERROR(-22) } else /* 50d28' or acos(2/pi) */ diff --git a/src/PJ_bipc.c b/src/PJ_bipc.c index 5cb74256b..471e7266c 100644 --- a/src/PJ_bipc.c +++ b/src/PJ_bipc.c @@ -125,7 +125,7 @@ INVERSE(s_inverse); /* spheroid */ } FREEUP; if (P) pj_dalloc(P); } ENTRY0(bipc) - P->noskew = pj_param(P->params, "bns").i; + P->noskew = pj_param(P->ctx, P->params, "bns").i; P->inv = s_inverse; P->fwd = s_forward; P->es = 0.; diff --git a/src/PJ_bonne.c b/src/PJ_bonne.c index 81a5bf983..4b1e78669 100644 --- a/src/PJ_bonne.c +++ b/src/PJ_bonne.c @@ -45,7 +45,7 @@ INVERSE(e_inverse); /* ellipsoid */ double s, rh; rh = hypot(xy.x, xy.y = P->am1 - xy.y); - lp.phi = pj_inv_mlfn(P->am1 + P->m1 - rh, P->es, P->en); + lp.phi = pj_inv_mlfn(P->ctx, P->am1 + P->m1 - rh, P->es, P->en); if ((s = fabs(lp.phi)) < HALFPI) { s = sin(lp.phi); lp.lam = rh * atan2(xy.x, xy.y) * @@ -65,7 +65,7 @@ FREEUP; ENTRY1(bonne, en) double c; - P->phi1 = pj_param(P->params, "rlat_1").f; + P->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; if (fabs(P->phi1) < EPS10) E_ERROR(-23); if (P->es) { P->en = pj_enfn(P->es); diff --git a/src/PJ_cass.c b/src/PJ_cass.c index 4539c66b0..38fa9db5d 100644 --- a/src/PJ_cass.c +++ b/src/PJ_cass.c @@ -40,7 +40,7 @@ FORWARD(s_forward); /* spheroid */ INVERSE(e_inverse); /* ellipsoid */ double ph1; - ph1 = pj_inv_mlfn(P->m0 + xy.y, P->es, P->en); + ph1 = pj_inv_mlfn(P->ctx, P->m0 + xy.y, P->es, P->en); P->tn = tan(ph1); P->t = P->tn * P->tn; P->n = sin(ph1); P->r = 1. / (1. - P->es * P->n * P->n); diff --git a/src/PJ_cea.c b/src/PJ_cea.c index 97e4f3aa6..f5b788380 100644 --- a/src/PJ_cea.c +++ b/src/PJ_cea.c @@ -42,10 +42,9 @@ FREEUP; ENTRY1(cea, apa) double t; - if (pj_param(P->params, "tlat_ts").i && - (P->k0 = cos(t = pj_param(P->params, "rlat_ts").f)) < 0.) E_ERROR(-24) - else - t = 0.; + if (pj_param(P->ctx, P->params, "tlat_ts").i && + (P->k0 = cos(t = pj_param(P->ctx, P->params, "rlat_ts").f)) < 0.) + E_ERROR(-24); if (P->es) { t = sin(t); P->k0 /= sqrt(1. - P->es * t * t); diff --git a/src/PJ_chamb.c b/src/PJ_chamb.c index c17a71335..65f21129d 100644 --- a/src/PJ_chamb.c +++ b/src/PJ_chamb.c @@ -17,17 +17,17 @@ PROJ_HEAD(chamb, "Chamberlin Trimetric") "\n\tMisc Sph, no inv." #define THIRD 0.333333333333333333 #define TOL 1e-9 static VECT /* distance and azimuth from point 1 to point 2 */ -vect(double dphi, double c1, double s1, double c2, double s2, double dlam) { +vect(projCtx ctx, double dphi, double c1, double s1, double c2, double s2, double dlam) { VECT v; double cdl, dp, dl; cdl = cos(dlam); if (fabs(dphi) > 1. || fabs(dlam) > 1.) - v.r = aacos(s1 * s2 + c1 * c2 * cdl); + v.r = aacos(ctx, s1 * s2 + c1 * c2 * cdl); else { /* more accurate for smaller distances */ dp = sin(.5 * dphi); dl = sin(.5 * dlam); - v.r = 2. * aasin(sqrt(dp * dp + c1 * c2 * dl * dl)); + v.r = 2. * aasin(ctx,sqrt(dp * dp + c1 * c2 * dl * dl)); } if (fabs(v.r) > TOL) v.Az = atan2(c2 * sin(dlam), c1 * s2 - s1 * c2 * cdl); @@ -36,8 +36,8 @@ vect(double dphi, double c1, double s1, double c2, double s2, double dlam) { return v; } static double /* law of cosines */ -lc(double b,double c,double a) { - return aacos(.5 * (b * b + c * c - a * a) / (b * c)); +lc(projCtx ctx, double b,double c,double a) { + return aacos(ctx, .5 * (b * b + c * c - a * a) / (b * c)); } FORWARD(s_forward); /* spheroid */ double sinphi, cosphi, a; @@ -47,7 +47,7 @@ FORWARD(s_forward); /* spheroid */ sinphi = sin(lp.phi); cosphi = cos(lp.phi); for (i = 0; i < 3; ++i) { /* dist/azimiths from control */ - v[i] = vect(lp.phi - P->c[i].phi, P->c[i].cosphi, P->c[i].sinphi, + v[i] = vect(P->ctx, lp.phi - P->c[i].phi, P->c[i].cosphi, P->c[i].sinphi, cosphi, sinphi, lp.lam - P->c[i].lam); if ( ! v[i].r) break; @@ -59,7 +59,7 @@ FORWARD(s_forward); /* spheroid */ xy = P->p; for (i = 0; i < 3; ++i) { j = i == 2 ? 0 : i + 1; - a = lc(P->c[i].v.r, v[i].r, v[j].r); + a = lc(P->ctx,P->c[i].v.r, v[i].r, v[j].r); if (v[i].Az < 0.) a = -a; if (! i) { /* coord comp unique to each arc */ @@ -87,22 +87,22 @@ ENTRY0(chamb) for (i = 0; i < 3; ++i) { /* get control point locations */ (void)sprintf(line, "rlat_%d", i+1); - P->c[i].phi = pj_param(P->params, line).f; + P->c[i].phi = pj_param(P->ctx, P->params, line).f; (void)sprintf(line, "rlon_%d", i+1); - P->c[i].lam = pj_param(P->params, line).f; + P->c[i].lam = pj_param(P->ctx, P->params, line).f; P->c[i].lam = adjlon(P->c[i].lam - P->lam0); P->c[i].cosphi = cos(P->c[i].phi); P->c[i].sinphi = sin(P->c[i].phi); } for (i = 0; i < 3; ++i) { /* inter ctl pt. distances and azimuths */ j = i == 2 ? 0 : i + 1; - P->c[i].v = vect(P->c[j].phi - P->c[i].phi, P->c[i].cosphi, P->c[i].sinphi, + P->c[i].v = vect(P->ctx,P->c[j].phi - P->c[i].phi, P->c[i].cosphi, P->c[i].sinphi, P->c[j].cosphi, P->c[j].sinphi, P->c[j].lam - P->c[i].lam); if (! P->c[i].v.r) E_ERROR(-25); /* co-linearity problem ignored for now */ } - P->beta_0 = lc(P->c[0].v.r, P->c[2].v.r, P->c[1].v.r); - P->beta_1 = lc(P->c[0].v.r, P->c[1].v.r, P->c[2].v.r); + P->beta_0 = lc(P->ctx,P->c[0].v.r, P->c[2].v.r, P->c[1].v.r); + P->beta_1 = lc(P->ctx,P->c[0].v.r, P->c[1].v.r, P->c[2].v.r); P->beta_2 = PI - P->beta_0; P->p.y = 2. * (P->c[0].p.y = P->c[1].p.y = P->c[2].v.r * sin(P->beta_0)); P->c[2].p.y = 0.; diff --git a/src/PJ_eck4.c b/src/PJ_eck4.c index 2b5c8101b..f90267dd1 100644 --- a/src/PJ_eck4.c +++ b/src/PJ_eck4.c @@ -35,9 +35,9 @@ FORWARD(s_forward); /* spheroid */ INVERSE(s_inverse); /* spheroid */ double c; - lp.phi = aasin(xy.y / C_y); + lp.phi = aasin(P->ctx,xy.y / C_y); lp.lam = xy.x / (C_x * (1. + (c = cos(lp.phi)))); - lp.phi = aasin((lp.phi + sin(lp.phi) * (c + 2.)) / C_p); + lp.phi = aasin(P->ctx,(lp.phi + sin(lp.phi) * (c + 2.)) / C_p); return (lp); } FREEUP; if (P) pj_dalloc(P); } diff --git a/src/PJ_eqc.c b/src/PJ_eqc.c index 533fb63e9..c69a6baad 100644 --- a/src/PJ_eqc.c +++ b/src/PJ_eqc.c @@ -16,7 +16,7 @@ INVERSE(s_inverse); /* spheroid */ } FREEUP; if (P) pj_dalloc(P); } ENTRY0(eqc) - if ((P->rc = cos(pj_param(P->params, "rlat_ts").f)) <= 0.) E_ERROR(-24); + if ((P->rc = cos(pj_param(P->ctx, P->params, "rlat_ts").f)) <= 0.) E_ERROR(-24); P->inv = s_inverse; P->fwd = s_forward; P->es = 0.; diff --git a/src/PJ_eqdc.c b/src/PJ_eqdc.c index eda95b0d3..01a0f03f2 100644 --- a/src/PJ_eqdc.c +++ b/src/PJ_eqdc.c @@ -28,7 +28,7 @@ INVERSE(e_inverse); /* sphere & ellipsoid */ } lp.phi = P->c - P->rho; if (P->ellips) - lp.phi = pj_inv_mlfn(lp.phi, P->es, P->en); + lp.phi = pj_inv_mlfn(P->ctx, lp.phi, P->es, P->en); lp.lam = atan2(xy.x, xy.y) / P->n; } else { lp.lam = 0.; @@ -51,8 +51,8 @@ ENTRY1(eqdc, en) double cosphi, sinphi; int secant; - P->phi1 = pj_param(P->params, "rlat_1").f; - P->phi2 = pj_param(P->params, "rlat_2").f; + P->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; + P->phi2 = pj_param(P->ctx, P->params, "rlat_2").f; if (fabs(P->phi1 + P->phi2) < EPS10) E_ERROR(-21); if (!(P->en = pj_enfn(P->es))) E_ERROR_0; diff --git a/src/PJ_fouc_s.c b/src/PJ_fouc_s.c index dee05a96b..b84b3f829 100644 --- a/src/PJ_fouc_s.c +++ b/src/PJ_fouc_s.c @@ -28,14 +28,14 @@ INVERSE(s_inverse); /* spheroid */ if (!i) lp.phi = xy.y < 0. ? -HALFPI : HALFPI; } else - lp.phi = aasin(xy.y); + lp.phi = aasin(P->ctx,xy.y); V = cos(lp.phi); lp.lam = xy.x * (P->n + P->n1 * V) / V; return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(fouc_s) - P->n = pj_param(P->params, "dn").f; + P->n = pj_param(P->ctx, P->params, "dn").f; if (P->n < 0. || P->n > 1.) E_ERROR(-99) P->n1 = 1. - P->n; diff --git a/src/PJ_geos.c b/src/PJ_geos.c index db9dd7e54..336a13679 100644 --- a/src/PJ_geos.c +++ b/src/PJ_geos.c @@ -4,7 +4,7 @@ ** Copyright (c) 2004 Gerald I. Evenden */ static const char -LIBPROJ_ID[] = "$Id: PJ_geos.c 1504 2009-01-06 02:11:57Z warmerdam $"; +LIBPROJ_ID[] = "$Id: PJ_geos.c 1856 2010-06-11 03:26:04Z warmerdam $"; /* ** See also (section 4.4.3.2): ** http://www.eumetsat.int/en/area4/msg/news/us_doc/cgms_03_26.pdf @@ -79,7 +79,7 @@ FORWARD(e_forward); /* ellipsoid */ return (xy); } INVERSE(s_inverse); /* spheroid */ - double Vx, Vy, Vz, a, b, c, det, k; + double Vx, Vy, Vz, a, b, det, k; /* Setting three components of vector from satellite to position.*/ Vx = -1.0; @@ -100,7 +100,7 @@ INVERSE(s_inverse); /* spheroid */ return (lp); } INVERSE(e_inverse); /* ellipsoid */ - double Vx, Vy, Vz, a, b, c, det, k; + double Vx, Vy, Vz, a, b, det, k; /* Setting three components of vector from satellite to position.*/ Vx = -1.0; @@ -124,7 +124,7 @@ INVERSE(e_inverse); /* ellipsoid */ } FREEUP; if (P) free(P); } ENTRY0(geos) - if ((P->h = pj_param(P->params, "dh").f) <= 0.) E_ERROR(-30); + if ((P->h = pj_param(P->ctx, P->params, "dh").f) <= 0.) E_ERROR(-30); if (P->phi0) E_ERROR(-46); P->radius_g = 1. + (P->radius_g_1 = P->h / P->a); P->C = P->radius_g * P->radius_g - 1.0; diff --git a/src/PJ_gn_sinu.c b/src/PJ_gn_sinu.c index 3bf9854f4..bfd8bc2df 100644 --- a/src/PJ_gn_sinu.c +++ b/src/PJ_gn_sinu.c @@ -21,7 +21,7 @@ FORWARD(e_forward); /* ellipsoid */ INVERSE(e_inverse); /* ellipsoid */ double s; - if ((s = fabs(lp.phi = pj_inv_mlfn(xy.y, P->es, P->en))) < HALFPI) { + if ((s = fabs(lp.phi = pj_inv_mlfn(P->ctx, xy.y, P->es, P->en))) < HALFPI) { s = sin(lp.phi); lp.lam = xy.x * sqrt(1. - P->es * s * s) / cos(lp.phi); } else if ((s - EPS10) < HALFPI) @@ -32,7 +32,7 @@ INVERSE(e_inverse); /* ellipsoid */ /* General spherical sinusoidals */ FORWARD(s_forward); /* sphere */ if (!P->m) - lp.phi = P->n != 1. ? aasin(P->n * sin(lp.phi)): lp.phi; + lp.phi = P->n != 1. ? aasin(P->ctx,P->n * sin(lp.phi)): lp.phi; else { double k, V; int i; @@ -52,11 +52,9 @@ FORWARD(s_forward); /* sphere */ return (xy); } INVERSE(s_inverse); /* sphere */ - double s; - xy.y /= P->C_y; - lp.phi = P->m ? aasin((P->m * xy.y + sin(xy.y)) / P->n) : - ( P->n != 1. ? aasin(sin(xy.y) / P->n) : xy.y ); + lp.phi = P->m ? aasin(P->ctx,(P->m * xy.y + sin(xy.y)) / P->n) : + ( P->n != 1. ? aasin(P->ctx,sin(xy.y) / P->n) : xy.y ); lp.lam = xy.x / (P->C_x * (P->m + cos(xy.y))); return (lp); } @@ -91,9 +89,9 @@ ENTRY1(mbtfps, en) setup(P); ENDENTRY(P) ENTRY1(gn_sinu, en) - if (pj_param(P->params, "tn").i && pj_param(P->params, "tm").i) { - P->n = pj_param(P->params, "dn").f; - P->m = pj_param(P->params, "dm").f; + if (pj_param(P->ctx, P->params, "tn").i && pj_param(P->ctx, P->params, "tm").i) { + P->n = pj_param(P->ctx, P->params, "dn").f; + P->m = pj_param(P->ctx, P->params, "dm").f; } else E_ERROR(-99) setup(P); diff --git a/src/PJ_goode.c b/src/PJ_goode.c index ed8ded8b4..387557e6a 100644 --- a/src/PJ_goode.c +++ b/src/PJ_goode.c @@ -39,6 +39,9 @@ ENTRY2(goode, sinu, moll) P->es = 0.; if (!(P->sinu = pj_sinu(0)) || !(P->moll = pj_moll(0))) E_ERROR_0; + P->sinu->es = 0.; + P->sinu->ctx = P->ctx; + P->moll->ctx = P->ctx; if (!(P->sinu = pj_sinu(P->sinu)) || !(P->moll = pj_moll(P->moll))) E_ERROR_0; P->fwd = s_forward; diff --git a/src/PJ_gstmerc.c b/src/PJ_gstmerc.c index 23b86ee82..bffe0b265 100644 --- a/src/PJ_gstmerc.c +++ b/src/PJ_gstmerc.c @@ -28,7 +28,7 @@ INVERSE(s_inverse); /* spheroid */ sinC= sin((xy.y*P->a - P->YS)/P->n2)/cosh((xy.x*P->a - P->XS)/P->n2); LC= log(pj_tsfn(-1.0*asin(sinC),0.0,0.0)); lp.lam= L/P->n1; - lp.phi= -1.0*pj_phi2(exp((LC-P->c)/P->n1),P->e); + lp.phi= -1.0*pj_phi2(P->ctx, exp((LC-P->c)/P->n1),P->e); /*fprintf(stderr,"inv:\nL =%16.13f\nsinC =%16.13f\nLC =%16.13f\nXY(%16.4f,%16.4f)=LP(%16.13f,%16.13f)\n",L,sinC,LC,((xy.x/P->ra)+P->x0)/P->to_meter,((xy.y/P->ra)+P->y0)/P->to_meter,lp.lam+P->lam0,lp.phi);*/ return (lp); } diff --git a/src/PJ_hammer.c b/src/PJ_hammer.c index d5ccbe100..fb5f3de3b 100644 --- a/src/PJ_hammer.c +++ b/src/PJ_hammer.c @@ -23,18 +23,18 @@ INVERSE(s_inverse); /* spheroid */ pj_errno = -14; } else { lp.lam = aatan2(P->w * xy.x * z,2. * z * z - 1)/P->w; - lp.phi = aasin(z * xy.y); + lp.phi = aasin(P->ctx,z * xy.y); } return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(hammer) - if (pj_param(P->params, "tW").i) { - if ((P->w = fabs(pj_param(P->params, "dW").f)) <= 0.) E_ERROR(-27); + if (pj_param(P->ctx, P->params, "tW").i) { + if ((P->w = fabs(pj_param(P->ctx, P->params, "dW").f)) <= 0.) E_ERROR(-27); } else P->w = .5; - if (pj_param(P->params, "tM").i) { - if ((P->m = fabs(pj_param(P->params, "dM").f)) <= 0.) E_ERROR(-27); + if (pj_param(P->ctx, P->params, "tM").i) { + if ((P->m = fabs(pj_param(P->ctx, P->params, "dM").f)) <= 0.) E_ERROR(-27); } else P->m = 1.; P->rm = 1. / P->m; diff --git a/src/PJ_healpix.c b/src/PJ_healpix.c new file mode 100644 index 000000000..799605b9a --- /dev/null +++ b/src/PJ_healpix.c @@ -0,0 +1,672 @@ +/****************************************************************************** + * $Id: PJ_healpix.c 1504 2011-10-18 14:58:57Z landcare $ + * + * Project: PROJ.4 + * Purpose: Implementation of the healpix projection. + * Definition: http://code.scenzgrid.org/index.php/p/scenzgrid-py/source/tree/master/docs/scenzgrid.pdf + * Author: Alex Raichev & Michael Speth , spethm@landcareresearch.co.nz + * + ****************************************************************************** + * Copyright (c) 2001, Thomas Flemming, tf@ttqv.com + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + *****************************************************************************/ + +#define PROJ_PARMS__ \ + int npole;\ + int spole; + +#define PJ_LIB__ +# include +PROJ_HEAD(healpix, "HEALPix") "\n\tSph., Ellps."; +PROJ_HEAD(rhealpix, "rHEALPix") "\n\tSph., Ellps.\n\tnpole= spole="; +# include +# define R1 {{ 0,-1},{ 1, 0}} /** Matrix for anticlockwise rotation by pi/2 **/ +# define R2 {{-1, 0},{ 0,-1}} /** Matrix for anticlockwise rotation by pi (R1 X R1) X = dot product **/ +# define R3 {{ 0, 1},{-1, 0}} /** Matrix for anticlockwise rotation by 3*pi/2 (R2 X R1) **/ +# define IDENT {{1,0},{0,1}} +/** + * 0 - Identity matrix
+ * 1 - Counter-clockwise rotation by PI/2
+ * 2 - Counter-clockwise rotation by PI
+ * 3 - Counter-clockwise rotation by 3*PI/2
+ * 4 - Counter-clockwise rotation by 3*PI/2
+ * 5 - Counter-clockwise rotation by PI
+ * 6 - Counter-clockwise rotation by PI/2
+ **/ +# define ROT { IDENT, R1, R2, R3, R3, R2, R1} +# define RFACTOR 3 /** Used for returning the rotation matrix **/ +/** Used for calculating if a point is within the HEALPix projection for sphere. **/ +# define EPS 1e-12 +typedef struct { + int cn; // the number 0 -> 4 indicating the position of the polar cap. + double x,y; // the coordinates of the pole points (point of most extreme latitude on the polar caps). + enum Region { north, south, equatorial } region; +} CapMap; +typedef struct { + double x,y; +} Point; +double rot[7][2][2] = ROT; + +/** + NOTES: Alex Raichev implemented the math in python and this is a port of his work. + The healpix projection is a Lambert cylindrical equal-area projection for + equaltorial latitudes and an interrupted Colignon projection for polar + latitudes. + **/ + +/** + * Returns the sign of the double. + * @param v the parameter whose sign is returned. + * @return 1 for positive number, -1 for negative, and 0 for zero. + **/ +double sign (double v) { + return v > 0 ? 1 : (v < 0 ? -1 : 0); +} +/** + * Scales the number by a factor. + * @param num the number to be scaled. + * @param factor the factor to scale the number by. + * @param isInverse 1 for scaling the number by 1 / factor and 0 for scaling by the factor. + * @return the scaled number. + **/ +double scale_number(double num, double factor, int isInverse){ + if(isInverse == 1){ + return num * 1.0/factor; + } + return num * factor; +} +/** + * Scales all the items of the array by a factor. + * @param xy + **/ +void scale_array(XY *array, double k, int inverse){ + double c = 0; + if (inverse == 1) { + c = 1.0/k; + }else{ + c = k; + } + array->x *= c; + array->y *= c; +} +/** + * Given an angle return its equivalent angle. + * @param x the angle to convert + * @return the equivalent angle such that -PI <= the angle returend <= PI + **/ +double standardize_lon(double x){ + if(x < -1*PI || x >= PI){ + x = x - 2*PI*floor(x/(2*PI)); + if(x >= PI){ + x = x - 2*PI; + } + } + return x; +} +/** + * Given an angle, return its unit-circle equivalent angle. + * @param x the angel to convert. + * @return the equivalent angle such that -PI/2 <= the angle returned <= PI/2. + **/ +double standardize_lat(double x){ + if( x < -PI/2.0 || x > PI/2){ + x = x-2.0*PI*floor(x/(2.0*PI)); + if(x > PI/2.0 && x <= 3.0*PI/2){ + x = PI - x; + }else{ + x = x - 2*PI; + } + } + return x; +} +/** + * Calculates if the point lies on or within the polygon. + * Very good explination of how this works: http://paulbourke.net/geometry/insidepoly/ + * @param nvert the number of vertices in the polygon. + * @param vert the x,y-coordinates of the polygon's vertices + * @param testx the x-coordinate of the test point. + * @param testy the y-coordinate of the test point. + * @return 1 if on or within the bounds of the polygon, and 0 otherwise. + **/ +int pnpoly(int nvert, double vert[][nvert], double testx, double testy){ + + int i,j,c = 0; + int counter = 0; + double xinters; + Point p1,p2; + + // check for boundrary cases + for(i = 0; i < nvert; i++){ + if(testx == vert[i][0] && testy == vert[i][1]){ + return 1; + } + } + + // initialize p1 + p1.x = vert[0][0]; + p1.y = vert[0][1]; + + for(i = 1; i < nvert; i++){ + p2.x = vert[i % nvert][0]; + p2.y = vert[i % nvert][1]; + + if(testy > MIN(p1.y,p2.y)){ + if (testy <= MAX(p1.y,p2.y)) { + if (testx <= MAX(p1.x,p2.x)) { + if (p1.y != p2.y) { + xinters = (testy-p1.y)*(p2.x-p1.x)/(p2.y-p1.y)+p1.x; + if (p1.x == p2.x || testx <= xinters){ + counter++; + } + } + } + } + } + p1 = p2; + } + if(counter % 2 == 0){ + return 0; + }else{ + return 1; + } + return c; +} +/** + * Calculates if the coordinates are within the image of projection. + * @param x the x-coordinate to check. + * @param y the y-coordinate to check. + * @param proj 0 for healpix and 1 for rhealpix. + * @param npole the positions of the polar squares, only used for rhealpix. + * @param spole the positions of the polar squares, only used for rhealpix. + * @return 1 if the coordinate is within the projection and 0 otherwise. + **/ +int in_image(double x, double y, int proj, int npole, int spole){ + if(proj == 0){ + double healpixVertsJit[][18] = { + {-1.0*PI-EPS ,PI/4.0}, + {-3.0*PI/4.0 ,PI/2.0+EPS}, + {-1.0*PI/2.0 ,PI/4.0+EPS}, + {-1.0*PI/4.0 ,PI/2.0+EPS}, + {0.0 ,PI/4.0+EPS}, + {PI/4.0 ,PI/2.0+EPS}, + {PI/2.0 ,PI/4.0+EPS}, + {3.0*PI/4.0 ,PI/2.0+EPS}, + {PI+EPS ,PI/4.0}, + {PI+EPS ,-1.0*PI/4.0}, + {3.0*PI/4.0 ,-1.0*PI/2.0-EPS}, + {PI/2.0 ,-1.0*PI/4.0-EPS}, + {PI/4.0 ,-1.0*PI/2.0-EPS}, + {0.0 ,-1.0*PI/4.0-EPS}, + {-1.0*PI/4.0 ,-1.0*PI/2.0-EPS}, + {-1.0*PI/2.0 ,-1.0*PI/4.0-EPS}, + {-3.0*PI/4.0 ,-1.0*PI/2.0-EPS}, + {-1.0*PI-EPS ,-1.0*PI/4.0}}; + return pnpoly(18,healpixVertsJit,x,y); + }else{ + // Used for calculating if a point is within the rHEALPix projection for sphere. + double rhealpixVertsJit[][12] = { + {-1.0*PI-EPS ,PI/4.0+EPS}, + {-1.0*PI + npole*PI/2.0-EPS ,PI/4.0+EPS}, + {-1.0*PI + npole*PI/2.0-EPS ,3*PI/4.0+EPS}, + {-1.0*PI + (npole + 1.0)*PI/2.0+EPS ,3*PI/4.0+EPS}, + {-1.0*PI + (npole + 1.0)*PI/2.0+EPS ,PI/4.0+EPS}, + {PI+EPS ,PI/4.0+EPS}, + {PI+EPS ,-1.0*PI/4.0-EPS}, + {-1.0*PI + (spole + 1.0)*PI/2.0+EPS ,-1.0*PI/4.0-EPS}, + {-1.0*PI + (spole + 1.0)*PI/2.0+EPS ,-3.0*PI/4.0-EPS}, + {-1.0*PI + spole*PI/2.0-EPS ,-3.0*PI/4.0-EPS}, + {-1.0*PI + spole*PI/2.0-EPS ,-1.0*PI/4.0-EPS}, + {-1.0*PI-EPS ,-1.0*PI/4.0-EPS}}; + return pnpoly(12,rhealpixVertsJit,x,y); + } +} +/** + * Returns an authalic latitude of the point given a point of geographic + * latitude phi on an ellipse of eccentricity e. + * pj_authlat is the inverse of the alex's auth_lat. + * @param phi + * @param e + * @param inverse 1 for inverse or 0 otherwise. + * @return the authalic latitude of the point. + **/ +double auth_lat(double phi, double e, int inverse){ + if(inverse == 0){ + double q_numerator = ((1.0 - pow(e,2.0)) * sin(phi)); + double q_demonitor = (1.0 - (pow(e*sin(phi),2.0))); + double q_subtractor = - (1.0 - pow(e,2.0)) / (2.0*e) * log((1.0 - e*sin(phi)) / (1.0+e*sin(phi))); + double q = ((1.0 - pow(e,2.0)) * sin(phi)) / (1.0 - (pow(e*sin(phi),2.0))) - + (1.0 - pow(e,2.0)) / (2.0*e) * log((1.0 - e*sin(phi)) / (1.0+e*sin(phi))); + + double qp = 1.0 - (1.0-pow(e,2.0)) / (2.0*e)*log((1.0 - e) / (1.0 + e)); + double ratio = q/qp; + // Rounding errors + if( fabsl(ratio) > 1){ + ratio = sign(ratio); + } + return asin(ratio); + } + return phi + (pow(e,2) / 3.0 + 31*pow(e,4) / 180.0 + 517.0*pow(e,6)/5040.0) * sin(2.0*phi) + + (23.0*pow(e,4)/360.0 + 251.0*pow(e,6)/3780.0)*sin(4.0*phi) + + 761.0*pow(e,6)/45360.0 * sin(6.0*phi); +} +/** + * Compute the forward signature functions of the HEALPix + * projection of a sphere with radius `R` and central meridian `lon0`. +**/ +XY healpix_sphere(LP lp, PJ *P){ + double lam = standardize_lon(lp.lam); + double phi = standardize_lat(lp.phi); + double phi0 = aasin(P->ctx, 2.0/3.0); + XY xy; + // equatorial region + if( fabsl(phi) <= phi0) { + xy.x = lam; + xy.y = 3.0*PI/8.0*sin(phi); + } else { + double lamc; + double sigma = sqrt(3.0 * (1 - fabsl(sin(phi)))); + double cn = floor(2 * lam / PI + 2); + if (cn >= 4) { + cn = 3; + } + lamc = -3*PI/4 + (PI/2)*cn; + xy.x = lamc + (lam - lamc) * sigma; + xy.y = sign(phi)*PI/4 * (2 - sigma); + } + xy.x = scale_number(xy.x,P->a,0); + xy.y = scale_number(xy.y,P->a,0); + return xy; +} +/** + * Compute the inverse signature functions of the HEALPix + * projection of a sphere with radius `R` and central meridian `lon0`. +**/ +LP healpix_sphere_inv(XY xy, PJ *P){ + double x,y,y0; + double cn; + double xc; + double tau; + LP lp; + // Scale down to radius 1 sphere + x = scale_number(xy.x,P->a,1); + y = scale_number(xy.y,P->a,1); + y0 = PI/4.0; + // Equatorial region. + if(fabsl(y) <= y0){ + lp.lam = x; + lp.phi = asin(8.0*y/(3.0*PI)); + } else if(fabsl(y) < PI/2.0){ + cn = floor(2.0 * x/PI + 2.0); + if(cn >= 4){ + cn = 3; + } + xc = -3.0 * PI/4.0 + (PI/2.0)*cn; + tau = 2.0 - 4.0*fabsl(y)/PI; + lp.lam = xc + (x - xc)/tau; + lp.phi = sign(y)*asin(1.0 - pow(tau , 2.0)/3.0); + } else { + lp.lam = -1.0*PI - P->lam0; + lp.phi = sign(y)*PI/2.0; + } + return (lp); +} +/** + * Adds one vector to another of length 2. + * @param a the first term. + * @param b the second term. + * @param ret holds the summation of the vectors. + **/ +static void vector_add(double a[], double b[],double * ret){ + int i; + for(i = 0; i < 2; i++){ + ret[i] = a[i] + b[i]; + } +} +/** + * Subs tracts one vector from another of length 2. + * @param a the minuend. + * @param b the subtrahend. + * @param ret the difference of the vectors where the difference is the result of a minus b. + **/ +static void vector_sub(double a[], double b[], double * ret){ + int i; + for(i = 0; i < 2; i++){ + ret[i] = a[i] - b[i]; + } +} +/** + * Calculates the dot product of the arrays. + * @param a the array that will be used to calculate the dot product. + * Must contain the same number of columns as b's rows. Must be a matrix with equal lengthed rows and columns. + * @param b the array that will be used to calculate the dot product; must contain the same number of rows as a's columns. + * @param length the size of the b array. Note, a's column size must equal b's length. + * @param ret the dot product of a and b. + **/ +static void dot_product(double a[2][2], double b[], double * ret){ + int i,j; + int length = 2; + for(i = 0; i < length; i++){ + ret[i] = 0; + for(j = 0; j < length; j++){ + ret[i] += a[i][j]*b[i]; + } + } +} +/** + * Returns the polar cap number, pole point coordinates, and region + * for x,y in the HEALPix projection of the sphere of radius R. + * @param x coordinate in the HEALPix or rHEALPix. + * @param y coordinate in the HEALPix or rHEALPix. + * @param npole integer between 0 and 3 indicating the position of the north pole. + * @param spole integer between 0 and 3 indicating teh position of the south pole. + * @param inverse 1 computes the rHEALPix projection and 0 computes forward. + * @return a structure containing the cap poles. + **/ +static CapMap get_cap(double x, double y, double R, int npole, int spole, int inverse){ + CapMap capmap; + double c; + + capmap.x = x; + capmap.y = y; + + if(inverse == 0){ + if(y > R*PI/4.0){ + capmap.region = north; + c = R*PI/2.0; + }else if(y < -1*R*PI/4.0){ + capmap.region = south; + c = -1*R*PI/2.0; + }else{ + capmap.region = equatorial; + capmap.cn = 0; + return capmap; + } + // polar region + if(x < -1*R*PI/2.0){ + capmap.cn = 0; + capmap.x = (-1*R*3.0*PI/4.0); + capmap.y = c; + }else if(x >= -1*R*PI/2.0 && x < 0){ + capmap.cn = 1; + capmap.x = -1*R*PI/4.0; + capmap.y = c; + }else if(x >= 0 && x < R*PI/2.0){ + capmap.cn = 2; + capmap.x = R*PI/4.0; + capmap.y = c; + }else{ + capmap.cn = 3; + capmap.x = R*3.0*PI/4.0; + capmap.y = c; + } + return capmap; + }else{ + double c; + double eps; + if(y > R*PI/4.0){ + capmap.region = north; + capmap.x = -1*R*3.0*PI/4.0 + npole*R*PI/2.0; + capmap.y = R*PI/2.0; + x = x - npole*R*PI/2.0; + }else if(y < -1*R*PI/4.0){ + capmap.region = south; + capmap.x = -1*R*3.0*PI/4.0 + spole*R*PI/2; + capmap.y = -1*R*PI/2.0; + x = x - spole*R*PI/2.0; + }else{ + capmap.region = equatorial; + capmap.cn = 0; + return capmap; + } + // Polar Region, find # of HEALPix polar cap number that + // x,y moves to when rHEALPix polar square is disassembled. + eps = R*1e-15; // Kludge. Fuzz to avoid some rounding errors. + if(capmap.region == north){ + if(y >= -1*x - R*PI/4.0 - eps && y < x + R*5.0*PI/4.0 - eps){ + capmap.cn = 1; + }else if(y > -1*x -1*R*PI/4.0 + eps && y >= x + R*5.0*PI/4.0 - eps){ + capmap.cn = 2; + }else if(y <= -1*x -1*R*PI/4.0 + eps && y > x + R*5.0*PI/4.0 + eps){ + capmap.cn = 3; + }else{ + capmap.cn = 0; + } + }else if(capmap.region == south){ + if(y <= x + R*PI/4.0 + eps && y > -1*x - R*5.0*PI/4 + eps){ + capmap.cn = 1; + }else if(y < x + R*PI/4.0 - eps && y <= -1*x - R*5.0*PI/4.0 + eps){ + capmap.cn = 2; + }else if(y >= x + R*PI/4.0 - eps && y < -1*x - R*5.0*PI/4.0 - eps){ + capmap.cn = 3; + }else { + capmap.cn = 0; + } + } + return capmap; + } +} +/** + * Rearrange point x,y in the HEALPix projection by + * combining the polar caps into two polar squares. + * Put the north polar square in position npole and + * the south polar square in position spole. + * @param x coordinate in the HEALPix projection of the sphere. + * @param y coordinate in the HEALPix projection of the sphere. + * @param R - the Sphere's radius. + * @param npole integer between 0 and 3 indicating the position + * of the north polar square. + * @param spole integer between 0 and 3 indicating the position + * of the south polar square. + * @param inverse 1 to uncombine the polar caps and 0 to combine. + **/ +static XY combine_caps(double x, double y, double R, int npole, int spole, int inverse){ + XY xy; + double v[2]; + double a[2]; + double vector[2]; + double tmpVect[2]; + double v_min_c[2]; + double ret_dot[2]; + double ret_add[2]; + CapMap capmap = get_cap(x,y,R,npole,spole,inverse); + + if(capmap.region == equatorial){ + xy.x = capmap.x; + xy.y = capmap.y; + return xy; + } + v[0] = x; + v[1] = y; + if(inverse == 0){ + // compute forward function by rotating, translating, and shifting xy. + int pole = 0; + double (*tmpRot)[2]; + double c[2] = {capmap.x,capmap.y}; + if(capmap.region == north){ + pole = npole; + tmpRot = rot[capmap.cn]; + a[0] = R*-3.0*PI/4.0; + a[1] = PI/2.0; + }else { + pole = spole; + tmpRot = rot[capmap.cn+RFACTOR]; + a[0] = R*-3.0*PI/4.0; + a[1] = PI/-2.0; + } + + tmpVect[0] = R*pole*PI/2.0; + tmpVect[1] = 0; + // translate, rotate, then shift + vector_sub(v,c,v_min_c); + dot_product(tmpRot,v_min_c,ret_dot); + vector_add(a,tmpVect,ret_add); + vector_add(ret_dot, ret_add, vector); + xy.x = vector[0]; + xy.y = vector[1]; + return xy; + }else{ + // compute inverse function. + // get the current position of rHEALPix polar squares + int pole = floor( (capmap.x + R*3.0*PI/4.0) / (R*PI/2.0)); + double tmpVect[2] = {R*pole*PI/2.0,0}; + double coord[2] = {x,y}; + double (*tmpRot)[2]; + int cn; + // translate polar square to position 0 + vector_sub(coord,tmpVect,v); + // disassemble + if(capmap.region == north){ + cn = capmap.cn + RFACTOR; + a[0] = R*-3*PI/4.0; + a[1] = PI/2.0; + }else{ + cn = capmap.cn; + a[0] = R*-3*PI/4.0; + a[1] = PI/-2.0; + } + tmpVect[0] = R*capmap.cn*PI/2.0; + tmpVect[1] = 0; + // Math: Rotate Matrix * v-a + a + R*CN*{PI/2,0} + vector_sub(v,a,v_min_c); + dot_product(rot[cn],v_min_c,ret_dot); + vector_add(ret_dot,a,ret_add); + vector_add(ret_add,tmpVect,vector); + xy.x = vector[0]; + xy.y = vector[1]; + return xy; + } +} +FORWARD(e_healpix_forward); /* ellipsoidal */ + //int r1[][2] = R1; + double bet = auth_lat(lp.phi, P->e, 0); + lp.phi = bet; + P->a = P->ra; + return healpix_sphere(lp,P); +} +FORWARD(s_healpix_forward); /* spheroid */ + return healpix_sphere(lp, P); +} +INVERSE(e_healpix_inverse); /* ellipsoidal */ + double bet; + P->a = P->ra; + + // Scale down to radius 1 sphere before checking x,y + double x = scale_number(xy.x,P->a,1); + double y = scale_number(xy.y,P->a,1); + // check if the point is in the image + if(in_image(x,y,0,0,0) == 0){ + lp.lam = HUGE_VAL; + lp.phi = HUGE_VAL; + pj_ctx_set_errno( P->ctx, -15); + return lp; + } + + lp = healpix_sphere_inv(xy, P); + + lp.phi = auth_lat(lp.phi,P->e,1); + + return (lp); +} +INVERSE(s_healpix_inverse); /* spheroid */ + double x = xy.x; + double y = xy.y; + // Scale down to radius 1 sphere before checking x,y + x = scale_number(x,P->a,1); + y = scale_number(y,P->a,1); + // check if the point is in the image + if(in_image(x,y,0,0,0) == 0){ + lp.lam = HUGE_VAL; + lp.phi = HUGE_VAL; + pj_ctx_set_errno( P->ctx, -15); + return lp; + } + return healpix_sphere_inv(xy, P); +} +FORWARD(e_rhealpix_forward); /* ellipsoidal */ + double bet = auth_lat(lp.phi,P->e,0); + lp.phi = bet; + xy = healpix_sphere(lp,P); + return combine_caps(xy.x, xy.y, P->a, P->npole, P->spole, 0); +} +FORWARD(s_rhealpix_forward); /* spheroid */ + // Compute forward function. + xy = healpix_sphere(lp,P); + return combine_caps(xy.x, xy.y, P->a, P->npole, P->spole, 0); +} +INVERSE(e_rhealpix_inverse); /* ellipsoidal */ + double x = scale_number(xy.x,P->a,1); + double y = scale_number(xy.y,P->a,1); + // check for out of bounds coordinates + if(in_image(x,y,1,P->npole,P->spole) == 0){ + lp.lam = HUGE_VAL; + lp.phi = HUGE_VAL; + pj_ctx_set_errno( P->ctx, -15); + return lp; + } + + xy = combine_caps(xy.x,xy.y,P->a,P->npole,P->spole,1); + lp = healpix_sphere_inv(xy, P); + lp.phi = auth_lat(lp.phi,P->e,1); + return lp; +} +INVERSE(s_rhealpix_inverse); /* spheroid */ + double x = scale_number(xy.x,P->a,1); + double y = scale_number(xy.y,P->a,1); + // check for out of bounds coordinates + if(in_image(x,y,1,P->npole,P->spole) == 0){ + lp.lam = HUGE_VAL; + lp.phi = HUGE_VAL; + pj_ctx_set_errno( P->ctx, -15); + return lp; + } + xy = combine_caps(xy.x,xy.y,P->a,P->npole,P->spole,1); + return healpix_sphere_inv(xy, P); +} +FREEUP; + if (P) { + pj_dalloc(P); + } +} +ENTRY0(healpix) + if(P->es){ + P->inv = e_healpix_inverse; P->fwd = e_healpix_forward; + }else{ + P->inv = s_healpix_inverse; P->fwd = s_healpix_forward; + } +ENDENTRY(P) +ENTRY0(rhealpix) + P->npole = pj_param(P->ctx, P->params,"inpole").i; + P->spole = pj_param(P->ctx,P->params,"ispole").i; + + // check for valid npole and spole inputs + if(P->npole < 0 || P->npole > 3){ + E_ERROR(-47); + } + if(P->spole < 0 || P->spole > 3){ + E_ERROR(-47); + } + + if(P->es){ + P->inv = e_rhealpix_inverse; P->fwd = e_rhealpix_forward; + }else{ + P->inv = s_rhealpix_inverse; P->fwd = s_rhealpix_forward; + } +ENDENTRY(P) diff --git a/src/PJ_igh.c b/src/PJ_igh.c new file mode 100644 index 000000000..4155c856e --- /dev/null +++ b/src/PJ_igh.c @@ -0,0 +1,190 @@ +#define PROJ_PARMS__ \ + struct PJconsts* pj[12]; \ + double dy0; +#define PJ_LIB__ +#include +PROJ_HEAD(igh, "Interrupted Goode Homolosine") "\n\tPCyl, Sph."; + C_NAMESPACE PJ +*pj_sinu(PJ *), *pj_moll(PJ *); + +static const double d4044118 = (40 + 44/60. + 11.8/3600.) * DEG_TO_RAD; // 40d 44' 11.8" [degrees] + +static const double d10 = 10 * DEG_TO_RAD; +static const double d20 = 20 * DEG_TO_RAD; +static const double d30 = 30 * DEG_TO_RAD; +static const double d40 = 40 * DEG_TO_RAD; +static const double d50 = 50 * DEG_TO_RAD; +static const double d60 = 60 * DEG_TO_RAD; +static const double d80 = 80 * DEG_TO_RAD; +static const double d90 = 90 * DEG_TO_RAD; +static const double d100 = 100 * DEG_TO_RAD; +static const double d140 = 140 * DEG_TO_RAD; +static const double d160 = 160 * DEG_TO_RAD; +static const double d180 = 180 * DEG_TO_RAD; + +static const double EPSLN = 1.e-10; // allow a little 'slack' on zone edge positions + +FORWARD(s_forward); /* spheroid */ + int z; + if (lp.phi >= d4044118) { // 1|2 + z = (lp.lam <= -d40 ? 1: 2); + } + else if (lp.phi >= 0) { // 3|4 + z = (lp.lam <= -d40 ? 3: 4); + } + else if (lp.phi >= -d4044118) { // 5|6|7|8 + if (lp.lam <= -d100) z = 5; // 5 + else if (lp.lam <= -d20) z = 6; // 6 + else if (lp.lam <= d80) z = 7; // 7 + else z = 8; // 8 + } + else { // 9|10|11|12 + if (lp.lam <= -d100) z = 9; // 9 + else if (lp.lam <= -d20) z = 10; // 10 + else if (lp.lam <= d80) z = 11; // 11 + else z = 12; // 12 + } + + lp.lam -= P->pj[z-1]->lam0; + xy = P->pj[z-1]->fwd(lp, P->pj[z-1]); + xy.x += P->pj[z-1]->x0; + xy.y += P->pj[z-1]->y0; + + return (xy); +} +INVERSE(s_inverse); /* spheroid */ + const double y90 = P->dy0 + sqrt(2); // lt=90 corresponds to y=y0+sqrt(2) + + int z = 0; + if (xy.y > y90+EPSLN || xy.y < -y90+EPSLN) // 0 + z = 0; + else if (xy.y >= d4044118) // 1|2 + z = (xy.x <= -d40? 1: 2); + else if (xy.y >= 0) // 3|4 + z = (xy.x <= -d40? 3: 4); + else if (xy.y >= -d4044118) { // 5|6|7|8 + if (xy.x <= -d100) z = 5; // 5 + else if (xy.x <= -d20) z = 6; // 6 + else if (xy.x <= d80) z = 7; // 7 + else z = 8; // 8 + } + else { // 9|10|11|12 + if (xy.x <= -d100) z = 9; // 9 + else if (xy.x <= -d20) z = 10; // 10 + else if (xy.x <= d80) z = 11; // 11 + else z = 12; // 12 + } + + if (z) + { + int ok = 0; + + xy.x -= P->pj[z-1]->x0; + xy.y -= P->pj[z-1]->y0; + lp = P->pj[z-1]->inv(xy, P->pj[z-1]); + lp.lam += P->pj[z-1]->lam0; + + switch (z) { + case 1: ok = (lp.lam >= -d180-EPSLN && lp.lam <= -d40+EPSLN) || + ((lp.lam >= -d40-EPSLN && lp.lam <= -d10+EPSLN) && + (lp.phi >= d60-EPSLN && lp.phi <= d90+EPSLN)); break; + case 2: ok = (lp.lam >= -d40-EPSLN && lp.lam <= d180+EPSLN) || + ((lp.lam >= -d180-EPSLN && lp.lam <= -d160+EPSLN) && + (lp.phi >= d50-EPSLN && lp.phi <= d90+EPSLN)) || + ((lp.lam >= -d50-EPSLN && lp.lam <= -d40+EPSLN) && + (lp.phi >= d60-EPSLN && lp.phi <= d90+EPSLN)); break; + case 3: ok = (lp.lam >= -d180-EPSLN && lp.lam <= -d40+EPSLN); break; + case 4: ok = (lp.lam >= -d40-EPSLN && lp.lam <= d180+EPSLN); break; + case 5: ok = (lp.lam >= -d180-EPSLN && lp.lam <= -d100+EPSLN); break; + case 6: ok = (lp.lam >= -d100-EPSLN && lp.lam <= -d20+EPSLN); break; + case 7: ok = (lp.lam >= -d20-EPSLN && lp.lam <= d80+EPSLN); break; + case 8: ok = (lp.lam >= d80-EPSLN && lp.lam <= d180+EPSLN); break; + case 9: ok = (lp.lam >= -d180-EPSLN && lp.lam <= -d100+EPSLN); break; + case 10: ok = (lp.lam >= -d100-EPSLN && lp.lam <= -d20+EPSLN); break; + case 11: ok = (lp.lam >= -d20-EPSLN && lp.lam <= d80+EPSLN); break; + case 12: ok = (lp.lam >= d80-EPSLN && lp.lam <= d180+EPSLN); break; + } + + z = (!ok? 0: z); // projectable? + } + // if (!z) pj_errno = -15; // invalid x or y + if (!z) lp.lam = HUGE_VAL; + if (!z) lp.phi = HUGE_VAL; + return (lp); +} +FREEUP; + if (P) { + int i; + for (i = 0; i < 12; ++i) + { + if (P->pj[i]) + (*(P->pj[i]->pfree))(P->pj[i]); + } + pj_dalloc(P); + } +} +ENTRY0(igh) +/* + Zones: + + -180 -40 180 + +--------------+-------------------------+ Zones 1,2,9,10,11 & 12: + |1 |2 | Mollweide projection + | | | + +--------------+-------------------------+ Zones 3,4,5,6,7 & 8: + |3 |4 | Sinusoidal projection + | | | + 0 +-------+------+-+-----------+-----------+ + |5 |6 |7 |8 | + | | | | | + +-------+--------+-----------+-----------+ + |9 |10 |11 |12 | + | | | | | + +-------+--------+-----------+-----------+ + -180 -100 -20 80 180 +*/ + +#define SETUP(n, proj, x_0, y_0, lon_0) \ + if (!(P->pj[n-1] = pj_##proj(0))) E_ERROR_0; \ + if (!(P->pj[n-1] = pj_##proj(P->pj[n-1]))) E_ERROR_0; \ + P->pj[n-1]->x0 = x_0; \ + P->pj[n-1]->y0 = y_0; \ + P->pj[n-1]->lam0 = lon_0; + + LP lp = { 0, d4044118 }; + XY xy1; + XY xy3; + + // sinusoidal zones + SETUP(3, sinu, -d100, 0, -d100); + SETUP(4, sinu, d30, 0, d30); + SETUP(5, sinu, -d160, 0, -d160); + SETUP(6, sinu, -d60, 0, -d60); + SETUP(7, sinu, d20, 0, d20); + SETUP(8, sinu, d140, 0, d140); + + // mollweide zones + SETUP(1, moll, -d100, 0, -d100); + + // y0 ? + xy1 = P->pj[0]->fwd(lp, P->pj[0]); // zone 1 + xy3 = P->pj[2]->fwd(lp, P->pj[2]); // zone 3 + // y0 + xy1.y = xy3.y for lt = 40d44'11.8" + P->dy0 = xy3.y - xy1.y; + + P->pj[0]->y0 = P->dy0; + + // mollweide zones (cont'd) + SETUP( 2, moll, d30, P->dy0, d30); + SETUP( 9, moll, -d160, -P->dy0, -d160); + SETUP(10, moll, -d60, -P->dy0, -d60); + SETUP(11, moll, d20, -P->dy0, d20); + SETUP(12, moll, d140, -P->dy0, d140); + + P->inv = s_inverse; + P->fwd = s_forward; + P->es = 0.; +ENDENTRY(P) + + + diff --git a/src/PJ_imw_p.c b/src/PJ_imw_p.c index 135b3dab8..ae411116d 100644 --- a/src/PJ_imw_p.c +++ b/src/PJ_imw_p.c @@ -13,12 +13,12 @@ PROJ_HEAD(imw_p, "International Map of the World Polyconic") phi12(PJ *P, double *del, double *sig) { int err = 0; - if (!pj_param(P->params, "tlat_1").i || - !pj_param(P->params, "tlat_2").i) { + if (!pj_param(P->ctx, P->params, "tlat_1").i || + !pj_param(P->ctx, P->params, "tlat_2").i) { err = -41; } else { - P->phi_1 = pj_param(P->params, "rlat_1").f; - P->phi_2 = pj_param(P->params, "rlat_2").f; + P->phi_1 = pj_param(P->ctx, P->params, "rlat_1").f; + P->phi_2 = pj_param(P->ctx, P->params, "rlat_2").f; *del = 0.5 * (P->phi_2 - P->phi_1); *sig = 0.5 * (P->phi_2 + P->phi_1); err = (fabs(*del) < EPS || fabs(*sig) < EPS) ? -42 : 0; @@ -113,8 +113,8 @@ ENTRY1(imw_p, en) P->phi_1 = P->phi_2; P->phi_2 = del; } - if (pj_param(P->params, "tlon_1").i) - P->lam_1 = pj_param(P->params, "rlon_1").f; + if (pj_param(P->ctx, P->params, "tlon_1").i) + P->lam_1 = pj_param(P->ctx, P->params, "rlon_1").f; else { /* use predefined based upon latitude */ sig = fabs(sig * RAD_TO_DEG); if (sig <= 60) sig = 2.; diff --git a/src/PJ_krovak.c b/src/PJ_krovak.c index 53e50994e..ac21df658 100644 --- a/src/PJ_krovak.c +++ b/src/PJ_krovak.c @@ -1,5 +1,5 @@ /****************************************************************************** - * $Id: PJ_krovak.c 1504 2009-01-06 02:11:57Z warmerdam $ + * $Id: PJ_krovak.c 1856 2010-06-11 03:26:04Z warmerdam $ * * Project: PROJ.4 * Purpose: Implementation of the krovak (Krovak) projection. @@ -37,7 +37,7 @@ #include #include -PJ_CVSID("$Id: PJ_krovak.c 1504 2009-01-06 02:11:57Z warmerdam $"); +PJ_CVSID("$Id: PJ_krovak.c 1856 2010-06-11 03:26:04Z warmerdam $"); PROJ_HEAD(krovak, "Krovak") "\n\tPCyl., Ellps."; @@ -69,12 +69,9 @@ PROJ_HEAD(krovak, "Krovak") "\n\tPCyl., Ellps."; FORWARD(e_forward); /* ellipsoid */ /* calculate xy from lat/lon */ - char errmess[255]; - char tmp[16]; - /* Constants, identical to inverse transform function */ double s45, s90, e2, e, alfa, uq, u0, g, k, k1, n0, ro0, ad, a, s0, n; - double gfi, u, fi0, lon17, lamdd, deltav, s, d, eps, ro; + double gfi, u, fi0, deltav, s, d, eps, ro; s45 = 0.785398163397448; /* 45° */ @@ -124,7 +121,7 @@ FORWARD(e_forward); /* ellipsoid */ xy.y = ro * cos(eps) / a; xy.x = ro * sin(eps) / a; - if( !pj_param(P -> params, "tczech").i ) + if( !pj_param(P->ctx, P->params, "tczech").i ) { xy.y *= -1.0; xy.x *= -1.0; @@ -140,7 +137,7 @@ INVERSE(e_inverse); /* ellipsoid */ /* Constants, identisch wie in der Umkehrfunktion */ double s45, s90, fi0, e2, e, alfa, uq, u0, g, k, k1, n0, ro0, ad, a, s0, n; - double u, l24, lamdd, deltav, s, d, eps, ro, fi1, xy0, lon17; + double u, deltav, s, d, eps, ro, fi1, xy0; int ok; s45 = 0.785398163397448; /* 45° */ @@ -179,7 +176,7 @@ INVERSE(e_inverse); /* ellipsoid */ xy.x=xy.y; xy.y=xy0; - if( !pj_param(P -> params, "tczech").i ) + if( !pj_param(P->ctx, P->params, "tczech").i ) { xy.x *= -1.0; xy.y *= -1.0; @@ -224,7 +221,7 @@ ENTRY0(krovak) /* read some Parameters, * here Latitude Truescale */ - ts = pj_param(P->params, "rlat_ts").f; + ts = pj_param(P->ctx, P->params, "rlat_ts").f; P->C_x = ts; /* we want Bessel as fixed ellipsoid */ @@ -232,17 +229,17 @@ ENTRY0(krovak) P->e = sqrt(P->es = 0.006674372230614); /* if latitude of projection center is not set, use 49d30'N */ - if (!pj_param(P->params, "tlat_0").i) + if (!pj_param(P->ctx, P->params, "tlat_0").i) P->phi0 = 0.863937979737193; /* if center long is not set use 42d30'E of Ferro - 17d40' for Ferro */ /* that will correspond to using longitudes relative to greenwich */ /* as input and output, instead of lat/long relative to Ferro */ - if (!pj_param(P->params, "tlon_0").i) + if (!pj_param(P->ctx, P->params, "tlon_0").i) P->lam0 = 0.7417649320975901 - 0.308341501185665; /* if scale not set default to 0.9999 */ - if (!pj_param(P->params, "tk").i) + if (!pj_param(P->ctx, P->params, "tk").i) P->k0 = 0.9999; /* always the same */ diff --git a/src/PJ_labrd.c b/src/PJ_labrd.c index 70cd2f425..4cb39ec8a 100644 --- a/src/PJ_labrd.c +++ b/src/PJ_labrd.c @@ -86,8 +86,8 @@ FREEUP; if (P) pj_dalloc(P); } ENTRY0(labrd) double Az, sinp, R, N, t; - P->rot = pj_param(P->params, "bno_rot").i == 0; - Az = pj_param(P->params, "razi").f; + P->rot = pj_param(P->ctx, P->params, "bno_rot").i == 0; + Az = pj_param(P->ctx, P->params, "razi").f; sinp = sin(P->phi0); t = 1. - P->es * sinp * sinp; N = 1. / sqrt(t); diff --git a/src/PJ_lagrng.c b/src/PJ_lagrng.c index d0e123a9f..8a13b3da3 100644 --- a/src/PJ_lagrng.c +++ b/src/PJ_lagrng.c @@ -26,9 +26,9 @@ FREEUP; if (P) pj_dalloc(P); } ENTRY0(lagrng) double phi1; - if ((P->rw = pj_param(P->params, "dW").f) <= 0) E_ERROR(-27); + if ((P->rw = pj_param(P->ctx, P->params, "dW").f) <= 0) E_ERROR(-27); P->hrw = 0.5 * (P->rw = 1. / P->rw); - phi1 = pj_param(P->params, "rlat_1").f; + phi1 = pj_param(P->ctx, P->params, "rlat_1").f; if (fabs(fabs(phi1 = sin(phi1)) - 1.) < TOL) E_ERROR(-22); P->a1 = pow((1. - phi1)/(1. + phi1), P->hrw); P->es = 0.; P->fwd = s_forward; diff --git a/src/PJ_lcc.c b/src/PJ_lcc.c index 80a85d0b9..9d3494bf9 100644 --- a/src/PJ_lcc.c +++ b/src/PJ_lcc.c @@ -34,7 +34,7 @@ INVERSE(e_inverse); /* ellipsoid & spheroid */ xy.y = -xy.y; } if (P->ellips) { - if ((lp.phi = pj_phi2(pow(rho / P->c, 1./P->n), P->e)) + if ((lp.phi = pj_phi2(P->ctx, pow(rho / P->c, 1./P->n), P->e)) == HUGE_VAL) I_ERROR; } else @@ -64,12 +64,12 @@ ENTRY0(lcc) double cosphi, sinphi; int secant; - P->phi1 = pj_param(P->params, "rlat_1").f; - if (pj_param(P->params, "tlat_2").i) - P->phi2 = pj_param(P->params, "rlat_2").f; + P->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; + if (pj_param(P->ctx, P->params, "tlat_2").i) + P->phi2 = pj_param(P->ctx, P->params, "rlat_2").f; else { P->phi2 = P->phi1; - if (!pj_param(P->params, "tlat_0").i) + if (!pj_param(P->ctx, P->params, "tlat_0").i) P->phi0 = P->phi1; } if (fabs(P->phi1 + P->phi2) < EPS10) E_ERROR(-21); diff --git a/src/PJ_lcca.c b/src/PJ_lcca.c index 2bb101adf..0e3289fe5 100644 --- a/src/PJ_lcca.c +++ b/src/PJ_lcca.c @@ -1,4 +1,4 @@ -static const char RCS_ID[] = "$Id: PJ_lcca.c 1504 2009-01-06 02:11:57Z warmerdam $"; +static const char RCS_ID[] = "$Id: PJ_lcca.c 1856 2010-06-11 03:26:04Z warmerdam $"; /* PROJ.4 Cartographic Projection System */ #define MAX_ITER 10 @@ -22,7 +22,7 @@ fSp(double S, double C) { return(1. + 3.* S * S * C); } FORWARD(e_forward); /* ellipsoid */ - double S, S3, r, dr; + double S, r, dr; S = pj_mlfn(lp.phi, sin(lp.phi), cos(lp.phi), P->en) - P->M0; dr = fS(S, P->C); @@ -46,7 +46,7 @@ INVERSE(e_inverse); /* ellipsoid & spheroid */ if (fabs(dif) < DEL_TOL) break; } if (!i) I_ERROR - lp.phi = pj_inv_mlfn(S + P->M0, P->es, P->en); + lp.phi = pj_inv_mlfn(P->ctx, S + P->M0, P->es, P->en); return (lp); } FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } @@ -54,7 +54,7 @@ ENTRY0(lcca) double s2p0, N0, R0, tan0, tan20; if (!(P->en = pj_enfn(P->es))) E_ERROR_0; - if (!pj_param(P->params, "tlat_0").i) E_ERROR(50); + if (!pj_param(P->ctx, P->params, "tlat_0").i) E_ERROR(50); if (P->phi0 == 0.) E_ERROR(51); P->l = sin(P->phi0); P->M0 = pj_mlfn(P->phi0, P->l, cos(P->phi0), P->en); diff --git a/src/PJ_loxim.c b/src/PJ_loxim.c index 80c153184..595423f76 100644 --- a/src/PJ_loxim.c +++ b/src/PJ_loxim.c @@ -33,7 +33,7 @@ INVERSE(s_inverse); /* spheroid */ } FREEUP; if (P) pj_dalloc(P); } ENTRY0(loxim); - P->phi1 = pj_param(P->params, "rlat_1").f; + P->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; if ((P->cosphi1 = cos(P->phi1)) < EPS) E_ERROR(-22); P->tanphi1 = tan(FORTPI + 0.5 * P->phi1); P->inv = s_inverse; P->fwd = s_forward; diff --git a/src/PJ_lsat.c b/src/PJ_lsat.c index e8edb5429..d11a5c149 100644 --- a/src/PJ_lsat.c +++ b/src/PJ_lsat.c @@ -66,7 +66,7 @@ FORWARD(e_forward); /* ellipsoid */ } if (l) { sp = sin(lp.phi); - phidp = aasin((P->one_es * P->ca * sp - P->sa * cos(lp.phi) * + phidp = aasin(P->ctx,(P->one_es * P->ca * sp - P->sa * cos(lp.phi) * sin(lamt)) / sqrt(1. - P->es * sp * sp)); tanph = log(tan(FORTPI + .5 * phidp)); sd = sin(lamdp); @@ -116,7 +116,7 @@ INVERSE(e_inverse); /* ellipsoid */ lamt -= HALFPI * (1. - scl) * sl; lp.lam = lamt - P->p22 * lamdp; if (fabs(P->sa) < TOL) - lp.phi = aasin(spp / sqrt(P->one_es * P->one_es + P->es * sppsq)); + lp.phi = aasin(P->ctx,spp / sqrt(P->one_es * P->one_es + P->es * sppsq)); else lp.phi = atan((tan(lamdp) * cos(lamt) - P->ca * sin(lamt)) / (P->one_es * P->sa)); @@ -127,9 +127,9 @@ ENTRY0(lsat) int land, path; double lam, alf, esc, ess; - land = pj_param(P->params, "ilsat").i; + land = pj_param(P->ctx, P->params, "ilsat").i; if (land <= 0 || land > 5) E_ERROR(-28); - path = pj_param(P->params, "ipath").i; + path = pj_param(P->ctx, P->params, "ipath").i; if (path <= 0 || path > (land <= 3 ? 251 : 233)) E_ERROR(-29); if (land <= 3) { P->lam0 = DEG_TO_RAD * 128.87 - TWOPI / 251. * path; diff --git a/src/PJ_mbt_fps.c b/src/PJ_mbt_fps.c index 63e02ca3f..57a96e72e 100644 --- a/src/PJ_mbt_fps.c +++ b/src/PJ_mbt_fps.c @@ -27,11 +27,11 @@ FORWARD(s_forward); /* spheroid */ return (xy); } INVERSE(s_inverse); /* spheroid */ - double t, s; + double t; - lp.phi = C2 * (t = aasin(xy.y / C_y)); + lp.phi = C2 * (t = aasin(P->ctx,xy.y / C_y)); lp.lam = xy.x / (C_x * (1. + 3. * cos(lp.phi)/cos(t))); - lp.phi = aasin((C1 * sin(t) + sin(lp.phi)) / C3); + lp.phi = aasin(P->ctx,(C1 * sin(t) + sin(lp.phi)) / C3); return (lp); } FREEUP; if (P) pj_dalloc(P); } diff --git a/src/PJ_merc.c b/src/PJ_merc.c index f8e0426a0..4b991c1ca 100644 --- a/src/PJ_merc.c +++ b/src/PJ_merc.c @@ -15,7 +15,7 @@ FORWARD(s_forward); /* spheroid */ return (xy); } INVERSE(e_inverse); /* ellipsoid */ - if ((lp.phi = pj_phi2(exp(- xy.y / P->k0), P->e)) == HUGE_VAL) I_ERROR; + if ((lp.phi = pj_phi2(P->ctx, exp(- xy.y / P->k0), P->e)) == HUGE_VAL) I_ERROR; lp.lam = xy.x / P->k0; return (lp); } @@ -29,8 +29,8 @@ ENTRY0(merc) double phits=0.0; int is_phits; - if( (is_phits = pj_param(P->params, "tlat_ts").i) ) { - phits = fabs(pj_param(P->params, "rlat_ts").f); + if( (is_phits = pj_param(P->ctx, P->params, "tlat_ts").i) ) { + phits = fabs(pj_param(P->ctx, P->params, "rlat_ts").f); if (phits >= HALFPI) E_ERROR(-24); } if (P->es) { /* ellipsoid */ diff --git a/src/PJ_mod_ster.c b/src/PJ_mod_ster.c index 854f35e11..185e95e37 100644 --- a/src/PJ_mod_ster.c +++ b/src/PJ_mod_ster.c @@ -60,7 +60,7 @@ INVERSE(e_inverse); /* ellipsoid */ lp.phi = P->phi0; return lp; } - chi = aasin(cosz * P->schio + p.i * sinz * P->cchio / rh); + chi = aasin(P->ctx, cosz * P->schio + p.i * sinz * P->cchio / rh); phi = chi; for (nn = 20; nn ;--nn) { esphi = P->e * sin(phi); diff --git a/src/PJ_moll.c b/src/PJ_moll.c index ce14cfbc9..98f0457d2 100644 --- a/src/PJ_moll.c +++ b/src/PJ_moll.c @@ -27,12 +27,10 @@ FORWARD(s_forward); /* spheroid */ return (xy); } INVERSE(s_inverse); /* spheroid */ - double th, s; - - lp.phi = aasin(xy.y / P->C_y); + lp.phi = aasin(P->ctx, xy.y / P->C_y); lp.lam = xy.x / (P->C_x * cos(lp.phi)); lp.phi += lp.phi; - lp.phi = aasin((lp.phi + sin(lp.phi)) / P->C_p); + lp.phi = aasin(P->ctx, (lp.phi + sin(lp.phi)) / P->C_p); return (lp); } FREEUP; if (P) pj_dalloc(P); } diff --git a/src/PJ_nell.c b/src/PJ_nell.c index 5de57cbcc..dd41b468f 100644 --- a/src/PJ_nell.c +++ b/src/PJ_nell.c @@ -21,10 +21,8 @@ FORWARD(s_forward); /* spheroid */ return (xy); } INVERSE(s_inverse); /* spheroid */ - double th, s; - lp.lam = 2. * xy.x / (1. + cos(xy.y)); - lp.phi = aasin(0.5 * (xy.y + sin(xy.y))); + lp.phi = aasin(P->ctx,0.5 * (xy.y + sin(xy.y))); return (lp); } FREEUP; if (P) pj_dalloc(P); } diff --git a/src/PJ_nsper.c b/src/PJ_nsper.c index a3ee264e7..0f355b93e 100644 --- a/src/PJ_nsper.c +++ b/src/PJ_nsper.c @@ -115,7 +115,7 @@ INVERSE(s_inverse); /* spheroid */ FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { - if ((P->height = pj_param(P->params, "dh").f) <= 0.) E_ERROR(-30); + if ((P->height = pj_param(P->ctx, P->params, "dh").f) <= 0.) E_ERROR(-30); if (fabs(fabs(P->phi0) - HALFPI) < EPS10) P->mode = P->phi0 < 0. ? S_POLE : N_POLE; else if (fabs(P->phi0) < EPS10) @@ -141,8 +141,8 @@ ENDENTRY(setup(P)) ENTRY0(tpers) double omega, gamma; - omega = pj_param(P->params, "dtilt").f * DEG_TO_RAD; - gamma = pj_param(P->params, "dazi").f * DEG_TO_RAD; + omega = pj_param(P->ctx, P->params, "dtilt").f * DEG_TO_RAD; + gamma = pj_param(P->ctx, P->params, "dazi").f * DEG_TO_RAD; P->tilt = 1; P->cg = cos(gamma); P->sg = sin(gamma); P->cw = cos(omega); P->sw = sin(omega); diff --git a/src/PJ_ob_tran.c b/src/PJ_ob_tran.c index 460a600f9..34e0f6b80 100644 --- a/src/PJ_ob_tran.c +++ b/src/PJ_ob_tran.c @@ -21,7 +21,7 @@ FORWARD(o_forward); /* spheroid */ cosphi = cos(lp.phi); lp.lam = adjlon(aatan2(cosphi * sin(lp.lam), P->sphip * cosphi * coslam + P->cphip * sinphi) + P->lamp); - lp.phi = aasin(P->sphip * sinphi - P->cphip * cosphi * coslam); + lp.phi = aasin(P->ctx,P->sphip * sinphi - P->cphip * cosphi * coslam); return (P->link->fwd(lp, P->link)); } FORWARD(t_forward); /* spheroid */ @@ -32,7 +32,7 @@ FORWARD(t_forward); /* spheroid */ cosphi = cos(lp.phi); coslam = cos(lp.lam); lp.lam = adjlon(aatan2(cosphi * sin(lp.lam), sin(lp.phi)) + P->lamp); - lp.phi = aasin(- cosphi * coslam); + lp.phi = aasin(P->ctx, - cosphi * coslam); return (P->link->fwd(lp, P->link)); } INVERSE(o_inverse); /* spheroid */ @@ -43,7 +43,7 @@ INVERSE(o_inverse); /* spheroid */ coslam = cos(lp.lam -= P->lamp); sinphi = sin(lp.phi); cosphi = cos(lp.phi); - lp.phi = aasin(P->sphip * sinphi + P->cphip * cosphi * coslam); + lp.phi = aasin(P->ctx,P->sphip * sinphi + P->cphip * cosphi * coslam); lp.lam = aatan2(cosphi * sin(lp.lam), P->sphip * cosphi * coslam - P->cphip * sinphi); } @@ -57,7 +57,7 @@ INVERSE(t_inverse); /* spheroid */ cosphi = cos(lp.phi); t = lp.lam - P->lamp; lp.lam = aatan2(cosphi * sin(t), - sin(lp.phi)); - lp.phi = aasin(cosphi * cos(t)); + lp.phi = aasin(P->ctx,cosphi * cos(t)); } return (lp); } @@ -74,7 +74,7 @@ ENTRY1(ob_tran, link) char *name, *s; /* get name of projection to be translated */ - if (!(name = pj_param(P->params, "so_proj").s)) E_ERROR(-26); + if (!(name = pj_param(P->ctx, P->params, "so_proj").s)) E_ERROR(-26); for (i = 0; (s = pj_list[i].id) && strcmp(name, s) ; ++i) ; if (!s || !(P->link = (*pj_list[i].proj)(0))) E_ERROR(-37); /* copy existing header into new */ @@ -97,12 +97,12 @@ ENTRY1(ob_tran, link) freeup(P); return 0; } - if (pj_param(P->params, "to_alpha").i) { + if (pj_param(P->ctx, P->params, "to_alpha").i) { double lamc, phic, alpha; - lamc = pj_param(P->params, "ro_lon_c").f; - phic = pj_param(P->params, "ro_lat_c").f; - alpha = pj_param(P->params, "ro_alpha").f; + lamc = pj_param(P->ctx, P->params, "ro_lon_c").f; + phic = pj_param(P->ctx, P->params, "ro_lat_c").f; + alpha = pj_param(P->ctx, P->params, "ro_alpha").f; /* if (fabs(phic) <= TOL || fabs(fabs(phic) - HALFPI) <= TOL || @@ -111,17 +111,17 @@ ENTRY1(ob_tran, link) if (fabs(fabs(phic) - HALFPI) <= TOL) E_ERROR(-32); P->lamp = lamc + aatan2(-cos(alpha), -sin(alpha) * sin(phic)); - phip = aasin(cos(phic) * sin(alpha)); - } else if (pj_param(P->params, "to_lat_p").i) { /* specified new pole */ - P->lamp = pj_param(P->params, "ro_lon_p").f; - phip = pj_param(P->params, "ro_lat_p").f; + phip = aasin(P->ctx,cos(phic) * sin(alpha)); + } else if (pj_param(P->ctx, P->params, "to_lat_p").i) { /* specified new pole */ + P->lamp = pj_param(P->ctx, P->params, "ro_lon_p").f; + phip = pj_param(P->ctx, P->params, "ro_lat_p").f; } else { /* specified new "equator" points */ double lam1, lam2, phi1, phi2, con; - lam1 = pj_param(P->params, "ro_lon_1").f; - phi1 = pj_param(P->params, "ro_lat_1").f; - lam2 = pj_param(P->params, "ro_lon_2").f; - phi2 = pj_param(P->params, "ro_lat_2").f; + lam1 = pj_param(P->ctx, P->params, "ro_lon_1").f; + phi1 = pj_param(P->ctx, P->params, "ro_lat_1").f; + lam2 = pj_param(P->ctx, P->params, "ro_lon_2").f; + phi2 = pj_param(P->ctx, P->params, "ro_lat_2").f; if (fabs(phi1 - phi2) <= TOL || (con = fabs(phi1)) <= TOL || fabs(con - HALFPI) <= TOL || diff --git a/src/PJ_ocea.c b/src/PJ_ocea.c index cdffd6e4c..8c7bd1614 100644 --- a/src/PJ_ocea.c +++ b/src/PJ_ocea.c @@ -41,16 +41,16 @@ ENTRY0(ocea) P->rok = P->a / P->k0; P->rtk = P->a * P->k0; - if ( pj_param(P->params, "talpha").i) { - alpha = pj_param(P->params, "ralpha").f; - lonz = pj_param(P->params, "rlonc").f; + if ( pj_param(P->ctx, P->params, "talpha").i) { + alpha = pj_param(P->ctx, P->params, "ralpha").f; + lonz = pj_param(P->ctx, P->params, "rlonc").f; P->singam = atan(-cos(alpha)/(-sin(phi_0) * sin(alpha))) + lonz; P->sinphi = asin(cos(phi_0) * sin(alpha)); } else { - phi_1 = pj_param(P->params, "rlat_1").f; - phi_2 = pj_param(P->params, "rlat_2").f; - lam_1 = pj_param(P->params, "rlon_1").f; - lam_2 = pj_param(P->params, "rlon_2").f; + phi_1 = pj_param(P->ctx, P->params, "rlat_1").f; + phi_2 = pj_param(P->ctx, P->params, "rlat_2").f; + lam_1 = pj_param(P->ctx, P->params, "rlon_1").f; + lam_2 = pj_param(P->ctx, P->params, "rlon_2").f; P->singam = atan2(cos(phi_1) * sin(phi_2) * cos(lam_1) - sin(phi_1) * cos(phi_2) * cos(lam_2), sin(phi_1) * cos(phi_2) * sin(lam_2) - diff --git a/src/PJ_oea.c b/src/PJ_oea.c index b5e42a1f7..b84a7ea64 100644 --- a/src/PJ_oea.c +++ b/src/PJ_oea.c @@ -13,9 +13,9 @@ FORWARD(s_forward); /* sphere */ sp = sin(lp.phi); cl = cos(lp.lam); Az = aatan2(cp * sin(lp.lam), P->cp0 * sp - P->sp0 * cp * cl) + P->theta; - shz = sin(0.5 * aacos(P->sp0 * sp + P->cp0 * cp * cl)); - M = aasin(shz * sin(Az)); - N = aasin(shz * cos(Az) * cos(M) / cos(M * P->two_r_m)); + shz = sin(0.5 * aacos(P->ctx, P->sp0 * sp + P->cp0 * cp * cl)); + M = aasin(P->ctx, shz * sin(Az)); + N = aasin(P->ctx, shz * cos(Az) * cos(M) / cos(M * P->two_r_m)); xy.y = P->n * sin(N * P->two_r_n); xy.x = P->m * sin(M * P->two_r_m) * cos(N) / cos(N * P->two_r_n); return (xy); @@ -23,26 +23,26 @@ FORWARD(s_forward); /* sphere */ INVERSE(s_inverse); /* sphere */ double N, M, xp, yp, z, Az, cz, sz, cAz; - N = P->hn * aasin(xy.y * P->rn); - M = P->hm * aasin(xy.x * P->rm * cos(N * P->two_r_n) / cos(N)); + N = P->hn * aasin(P->ctx,xy.y * P->rn); + M = P->hm * aasin(P->ctx,xy.x * P->rm * cos(N * P->two_r_n) / cos(N)); xp = 2. * sin(M); yp = 2. * sin(N) * cos(M * P->two_r_m) / cos(M); cAz = cos(Az = aatan2(xp, yp) - P->theta); - z = 2. * aasin(0.5 * hypot(xp, yp)); + z = 2. * aasin(P->ctx, 0.5 * hypot(xp, yp)); sz = sin(z); cz = cos(z); - lp.phi = aasin(P->sp0 * cz + P->cp0 * sz * cAz); + lp.phi = aasin(P->ctx, P->sp0 * cz + P->cp0 * sz * cAz); lp.lam = aatan2(sz * sin(Az), P->cp0 * cz - P->sp0 * sz * cAz); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(oea) - if (((P->n = pj_param(P->params, "dn").f) <= 0.) || - ((P->m = pj_param(P->params, "dm").f) <= 0.)) + if (((P->n = pj_param(P->ctx, P->params, "dn").f) <= 0.) || + ((P->m = pj_param(P->ctx, P->params, "dm").f) <= 0.)) E_ERROR(-39) else { - P->theta = pj_param(P->params, "rtheta").f; + P->theta = pj_param(P->ctx, P->params, "rtheta").f; P->sp0 = sin(P->phi0); P->cp0 = cos(P->phi0); P->rn = 1./ P->n; diff --git a/src/PJ_omerc.c b/src/PJ_omerc.c index 1b862dbbd..51d398d24 100644 --- a/src/PJ_omerc.c +++ b/src/PJ_omerc.c @@ -1,166 +1,190 @@ +/* +** Copyright (c) 2003, 2006 Gerald I. Evenden +*/ +/* +** Permission is hereby granted, free of charge, to any person obtaining +** a copy of this software and associated documentation files (the +** "Software"), to deal in the Software without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Software, and to +** permit persons to whom the Software is furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ #define PROJ_PARMS__ \ - double alpha, lamc, lam1, phi1, lam2, phi2, Gamma, al, bl, el, \ - singam, cosgam, sinrot, cosrot, u_0; \ - int ellips, rot; + double A, B, E, AB, ArB, BrA, rB, singam, cosgam, sinrot, cosrot; \ + double v_pole_n, v_pole_s, u_0; \ + int no_rot; #define PJ_LIB__ -#include +#include + PROJ_HEAD(omerc, "Oblique Mercator") - "\n\tCyl, Sph&Ell\n\t no_rot rot_conv no_uoff and\n\t" -"alpha= lonc= or\n\t lon_1= lat_1= lon_2= lat_2="; + "\n\tCyl, Sph&Ell no_rot\n\t" +"alpha= [gamma=] [no_off] lonc= or\n\t lon_1= lat_1= lon_2= lat_2="; #define TOL 1.e-7 #define EPS 1.e-10 -#define TSFN0(x) tan(.5 * (HALFPI - (x))) -FORWARD(e_forward); /* ellipsoid & spheroid */ - double con, q, s, ul, us, vl, vs; - vl = sin(P->bl * lp.lam); - if (fabs(fabs(lp.phi) - HALFPI) <= EPS) { - ul = lp.phi < 0. ? -P->singam : P->singam; - us = P->al * lp.phi / P->bl; +FORWARD(e_forward); /* ellipsoid */ + double Q, S, T, U, V, temp, u, v; + + if (fabs(fabs(lp.phi) - HALFPI) > EPS) { + Q = P->E / pow(pj_tsfn(lp.phi, sin(lp.phi), P->e), P->B); + temp = 1. / Q; + S = .5 * (Q - temp); + T = .5 * (Q + temp); + V = sin(P->B * lp.lam); + U = (S * P->singam - V * P->cosgam) / T; + if (fabs(fabs(U) - 1.0) < EPS) + F_ERROR; + v = 0.5 * P->ArB * log((1. - U)/(1. + U)); + temp = cos(P->B * lp.lam); + u = (fabs(temp) < TOL) ? P->AB * lp.lam : + P->ArB * atan2((S * P->cosgam + V * P->singam) , temp); } else { - q = P->el / (P->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi), P->e), P->bl) - : TSFN0(lp.phi)); - s = .5 * (q - 1. / q); - ul = 2. * (s * P->singam - vl * P->cosgam) / (q + 1. / q); - con = cos(P->bl * lp.lam); - if (fabs(con) >= TOL) { - us = P->al * atan((s * P->cosgam + vl * P->singam) / con) / P->bl; - if (con < 0.) - us += PI * P->al / P->bl; - } else - us = P->al * P->bl * lp.lam; + v = lp.phi > 0 ? P->v_pole_n : P->v_pole_s; + u = P->ArB * lp.phi; } - if (fabs(fabs(ul) - 1.) <= EPS) F_ERROR; - vs = .5 * P->al * log((1. - ul) / (1. + ul)) / P->bl; - us -= P->u_0; - if (! P->rot) { - xy.x = us; - xy.y = vs; + if (P->no_rot) { + xy.x = u; + xy.y = v; } else { - xy.x = vs * P->cosrot + us * P->sinrot; - xy.y = us * P->cosrot - vs * P->sinrot; + u -= P->u_0; + xy.x = v * P->cosrot + u * P->sinrot; + xy.y = u * P->cosrot - v * P->sinrot; } return (xy); } -INVERSE(e_inverse); /* ellipsoid & spheroid */ - double q, s, ul, us, vl, vs; +INVERSE(e_inverse); /* ellipsoid */ + double u, v, Qp, Sp, Tp, Vp, Up; - if (! P->rot) { - us = xy.x; - vs = xy.y; + if (P->no_rot) { + v = xy.y; + u = xy.x; } else { - vs = xy.x * P->cosrot - xy.y * P->sinrot; - us = xy.y * P->cosrot + xy.x * P->sinrot; + v = xy.x * P->cosrot - xy.y * P->sinrot; + u = xy.y * P->cosrot + xy.x * P->sinrot + P->u_0; } - us += P->u_0; - q = exp(- P->bl * vs / P->al); - s = .5 * (q - 1. / q); - vl = sin(P->bl * us / P->al); - ul = 2. * (vl * P->cosgam + s * P->singam) / (q + 1. / q); - if (fabs(fabs(ul) - 1.) < EPS) { + Qp = exp(- P->BrA * v); + Sp = .5 * (Qp - 1. / Qp); + Tp = .5 * (Qp + 1. / Qp); + Vp = sin(P->BrA * u); + Up = (Vp * P->cosgam + Sp * P->singam) / Tp; + if (fabs(fabs(Up) - 1.) < EPS) { lp.lam = 0.; - lp.phi = ul < 0. ? -HALFPI : HALFPI; + lp.phi = Up < 0. ? -HALFPI : HALFPI; } else { - lp.phi = P->el / sqrt((1. + ul) / (1. - ul)); - if (P->ellips) { - if ((lp.phi = pj_phi2(pow(lp.phi, 1. / P->bl), P->e)) == HUGE_VAL) - I_ERROR; - } else - lp.phi = HALFPI - 2. * atan(lp.phi); - lp.lam = - atan2((s * P->cosgam - - vl * P->singam), cos(P->bl * us / P->al)) / P->bl; + lp.phi = P->E / sqrt((1. + Up) / (1. - Up)); + if ((lp.phi = pj_phi2(P->ctx, pow(lp.phi, 1. / P->B), P->e)) == HUGE_VAL) + I_ERROR; + lp.lam = - P->rB * atan2((Sp * P->cosgam - + Vp * P->singam), cos(P->BrA * u)); } return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(omerc) - double con, com, cosph0, d, f, h, l, sinph0, p, j; - int azi; + double con, com, cosph0, D, F, H, L, sinph0, p, J, gamma, + gamma0, lamc, lam1, lam2, phi1, phi2, alpha_c; + int alp, gam, no_off = 0; - P->rot = pj_param(P->params, "bno_rot").i == 0; - if( (azi = pj_param(P->params, "talpha").i) != 0.0) { - P->lamc = pj_param(P->params, "rlonc").f; - P->alpha = pj_param(P->params, "ralpha").f; - if ( fabs(P->alpha) <= TOL || - fabs(fabs(P->phi0) - HALFPI) <= TOL || - fabs(fabs(P->alpha) - HALFPI) <= TOL) - E_ERROR(-32); + P->no_rot = pj_param(P->ctx, P->params, "tno_rot").i; + if ((alp = pj_param(P->ctx, P->params, "talpha").i) != 0) + alpha_c = pj_param(P->ctx, P->params, "ralpha").f; + if ((gam = pj_param(P->ctx, P->params, "tgamma").i) != 0) + gamma = pj_param(P->ctx, P->params, "rgamma").f; + if (alp || gam) { + lamc = pj_param(P->ctx, P->params, "rlonc").f; + no_off = pj_param(P->ctx, P->params, "tno_off").i; } else { - P->lam1 = pj_param(P->params, "rlon_1").f; - P->phi1 = pj_param(P->params, "rlat_1").f; - P->lam2 = pj_param(P->params, "rlon_2").f; - P->phi2 = pj_param(P->params, "rlat_2").f; - if (fabs(P->phi1 - P->phi2) <= TOL || - (con = fabs(P->phi1)) <= TOL || + lam1 = pj_param(P->ctx, P->params, "rlon_1").f; + phi1 = pj_param(P->ctx, P->params, "rlat_1").f; + lam2 = pj_param(P->ctx, P->params, "rlon_2").f; + phi2 = pj_param(P->ctx, P->params, "rlat_2").f; + if (fabs(phi1 - phi2) <= TOL || + (con = fabs(phi1)) <= TOL || fabs(con - HALFPI) <= TOL || fabs(fabs(P->phi0) - HALFPI) <= TOL || - fabs(fabs(P->phi2) - HALFPI) <= TOL) E_ERROR(-33); + fabs(fabs(phi2) - HALFPI) <= TOL) E_ERROR(-33); } - com = (P->ellips = P->es > 0.) ? sqrt(P->one_es) : 1.; + com = sqrt(P->one_es); if (fabs(P->phi0) > EPS) { sinph0 = sin(P->phi0); cosph0 = cos(P->phi0); - if (P->ellips) { - con = 1. - P->es * sinph0 * sinph0; - P->bl = cosph0 * cosph0; - P->bl = sqrt(1. + P->es * P->bl * P->bl / P->one_es); - P->al = P->bl * P->k0 * com / con; - d = P->bl * com / (cosph0 * sqrt(con)); - } else { - P->bl = 1.; - P->al = P->k0; - d = 1. / cosph0; - } - if ((f = d * d - 1.) <= 0.) - f = 0.; + con = 1. - P->es * sinph0 * sinph0; + P->B = cosph0 * cosph0; + P->B = sqrt(1. + P->es * P->B * P->B / P->one_es); + P->A = P->B * P->k0 * com / con; + D = P->B * com / (cosph0 * sqrt(con)); + if ((F = D * D - 1.) <= 0.) + F = 0.; else { - f = sqrt(f); + F = sqrt(F); if (P->phi0 < 0.) - f = -f; + F = -F; } - P->el = f += d; - if (P->ellips) P->el *= pow(pj_tsfn(P->phi0, sinph0, P->e), P->bl); - else P->el *= TSFN0(P->phi0); + P->E = F += D; + P->E *= pow(pj_tsfn(P->phi0, sinph0, P->e), P->B); } else { - P->bl = 1. / com; - P->al = P->k0; - P->el = d = f = 1.; + P->B = 1. / com; + P->A = P->k0; + P->E = D = F = 1.; } - if (azi) { - P->Gamma = asin(sin(P->alpha) / d); - P->lam0 = P->lamc - asin((.5 * (f - 1. / f)) * - tan(P->Gamma)) / P->bl; + if (alp || gam) { + if (alp) { + gamma0 = asin(sin(alpha_c) / D); + if (!gam) + gamma = alpha_c; + } else + alpha_c = asin(D*sin(gamma0 = gamma)); + if ((con = fabs(alpha_c)) <= TOL || + fabs(con - PI) <= TOL || + fabs(fabs(P->phi0) - HALFPI) <= TOL) + E_ERROR(-32); + P->lam0 = lamc - asin(.5 * (F - 1. / F) * + tan(gamma0)) / P->B; } else { - if (P->ellips) { - h = pow(pj_tsfn(P->phi1, sin(P->phi1), P->e), P->bl); - l = pow(pj_tsfn(P->phi2, sin(P->phi2), P->e), P->bl); - } else { - h = TSFN0(P->phi1); - l = TSFN0(P->phi2); - } - f = P->el / h; - p = (l - h) / (l + h); - j = P->el * P->el; - j = (j - l * h) / (j + l * h); - if ((con = P->lam1 - P->lam2) < -PI) - P->lam2 -= TWOPI; + H = pow(pj_tsfn(phi1, sin(phi1), P->e), P->B); + L = pow(pj_tsfn(phi2, sin(phi2), P->e), P->B); + F = P->E / H; + p = (L - H) / (L + H); + J = P->E * P->E; + J = (J - L * H) / (J + L * H); + if ((con = lam1 - lam2) < -PI) + lam2 -= TWOPI; else if (con > PI) - P->lam2 += TWOPI; - P->lam0 = adjlon(.5 * (P->lam1 + P->lam2) - atan( - j * tan(.5 * P->bl * (P->lam1 - P->lam2)) / p) / P->bl); - P->Gamma = atan(2. * sin(P->bl * adjlon(P->lam1 - P->lam0)) / - (f - 1. / f)); - P->alpha = asin(d * sin(P->Gamma)); + lam2 += TWOPI; + P->lam0 = adjlon(.5 * (lam1 + lam2) - atan( + J * tan(.5 * P->B * (lam1 - lam2)) / p) / P->B); + gamma0 = atan(2. * sin(P->B * adjlon(lam1 - P->lam0)) / + (F - 1. / F)); + gamma = alpha_c = asin(D * sin(gamma0)); + } + P->singam = sin(gamma0); + P->cosgam = cos(gamma0); + P->sinrot = sin(gamma); + P->cosrot = cos(gamma); + P->BrA = 1. / (P->ArB = P->A * (P->rB = 1. / P->B)); + P->AB = P->A * P->B; + if (no_off) + P->u_0 = 0; + else { + P->u_0 = fabs(P->ArB * atan2(sqrt(D * D - 1.), cos(alpha_c))); + if (P->phi0 < 0.) + P->u_0 = - P->u_0; } - P->singam = sin(P->Gamma); - P->cosgam = cos(P->Gamma); - f = pj_param(P->params, "brot_conv").i ? P->Gamma : P->alpha; - P->sinrot = sin(f); - P->cosrot = cos(f); - P->u_0 = pj_param(P->params, "bno_uoff").i ? 0. : - fabs(P->al * atan(sqrt(d * d - 1.) / P->cosrot) / P->bl); - if (P->phi0 < 0.) - P->u_0 = - P->u_0; + F = 0.5 * gamma0; + P->v_pole_n = P->ArB * log(tan(FORTPI - F)); + P->v_pole_s = P->ArB * log(tan(FORTPI + F)); P->inv = e_inverse; P->fwd = e_forward; ENDENTRY(P) diff --git a/src/PJ_putp2.c b/src/PJ_putp2.c index e846f13be..33bc67aee 100644 --- a/src/PJ_putp2.c +++ b/src/PJ_putp2.c @@ -31,9 +31,9 @@ FORWARD(s_forward); /* spheroid */ INVERSE(s_inverse); /* spheroid */ double c; - lp.phi = aasin(xy.y / C_y); + lp.phi = aasin(P->ctx,xy.y / C_y); lp.lam = xy.x / (C_x * ((c = cos(lp.phi)) - 0.5)); - lp.phi = aasin((lp.phi + sin(lp.phi) * (c - 1.)) / C_p); + lp.phi = aasin(P->ctx,(lp.phi + sin(lp.phi) * (c - 1.)) / C_p); return (lp); } FREEUP; if (P) pj_dalloc(P); } diff --git a/src/PJ_putp4p.c b/src/PJ_putp4p.c index 35066c2a6..32036bbe4 100644 --- a/src/PJ_putp4p.c +++ b/src/PJ_putp4p.c @@ -5,18 +5,18 @@ PROJ_HEAD(putp4p, "Putnins P4'") "\n\tPCyl., Sph."; PROJ_HEAD(weren, "Werenskiold I") "\n\tPCyl., Sph."; FORWARD(s_forward); /* spheroid */ - lp.phi = aasin(0.883883476 * sin(lp.phi)); + lp.phi = aasin(P->ctx,0.883883476 * sin(lp.phi)); xy.x = P->C_x * lp.lam * cos(lp.phi); xy.x /= cos(lp.phi *= 0.333333333333333); xy.y = P->C_y * sin(lp.phi); return (xy); } INVERSE(s_inverse); /* spheroid */ - lp.phi = aasin(xy.y / P->C_y); + lp.phi = aasin(P->ctx,xy.y / P->C_y); lp.lam = xy.x * cos(lp.phi) / P->C_x; lp.phi *= 3.; lp.lam /= cos(lp.phi); - lp.phi = aasin(1.13137085 * sin(lp.phi)); + lp.phi = aasin(P->ctx,1.13137085 * sin(lp.phi)); return (lp); } FREEUP; if (P) pj_dalloc(P); } diff --git a/src/PJ_putp6.c b/src/PJ_putp6.c index 28e82cfdd..5909dd4ce 100644 --- a/src/PJ_putp6.c +++ b/src/PJ_putp6.c @@ -32,7 +32,7 @@ INVERSE(s_inverse); /* spheroid */ lp.phi = xy.y / P->C_y; r = sqrt(1. + lp.phi * lp.phi); lp.lam = xy.x / (P->C_x * (P->D - r)); - lp.phi = aasin( ( (P->A - r) * lp.phi - log(lp.phi + r) ) / P->B); + lp.phi = aasin( P->ctx, ( (P->A - r) * lp.phi - log(lp.phi + r) ) / P->B); return (lp); } FREEUP; if (P) pj_dalloc(P); } diff --git a/src/PJ_robin.c b/src/PJ_robin.c index c7280b1f5..71dac1e33 100644 --- a/src/PJ_robin.c +++ b/src/PJ_robin.c @@ -7,45 +7,45 @@ PROJ_HEAD(robin, "Robinson") "\n\tPCyl., Sph."; static struct COEFS { float c0, c1, c2, c3; } X[] = { -1, -5.67239e-12, -7.15511e-05, 3.11028e-06, -0.9986, -0.000482241, -2.4897e-05, -1.33094e-06, -0.9954, -0.000831031, -4.4861e-05, -9.86588e-07, -0.99, -0.00135363, -5.96598e-05, 3.67749e-06, -0.9822, -0.00167442, -4.4975e-06, -5.72394e-06, -0.973, -0.00214869, -9.03565e-05, 1.88767e-08, -0.96, -0.00305084, -9.00732e-05, 1.64869e-06, -0.9427, -0.00382792, -6.53428e-05, -2.61493e-06, -0.9216, -0.00467747, -0.000104566, 4.8122e-06, -0.8962, -0.00536222, -3.23834e-05, -5.43445e-06, -0.8679, -0.00609364, -0.0001139, 3.32521e-06, -0.835, -0.00698325, -6.40219e-05, 9.34582e-07, -0.7986, -0.00755337, -5.00038e-05, 9.35532e-07, -0.7597, -0.00798325, -3.59716e-05, -2.27604e-06, -0.7186, -0.00851366, -7.0112e-05, -8.63072e-06, -0.6732, -0.00986209, -0.000199572, 1.91978e-05, -0.6213, -0.010418, 8.83948e-05, 6.24031e-06, -0.5722, -0.00906601, 0.000181999, 6.24033e-06, -0.5322, 0.,0.,0. }, + {1, -5.67239e-12, -7.15511e-05, 3.11028e-06}, + {0.9986, -0.000482241, -2.4897e-05, -1.33094e-06}, + {0.9954, -0.000831031, -4.4861e-05, -9.86588e-07}, + {0.99, -0.00135363, -5.96598e-05, 3.67749e-06}, + {0.9822, -0.00167442, -4.4975e-06, -5.72394e-06}, + {0.973, -0.00214869, -9.03565e-05, 1.88767e-08}, + {0.96, -0.00305084, -9.00732e-05, 1.64869e-06}, + {0.9427, -0.00382792, -6.53428e-05, -2.61493e-06}, + {0.9216, -0.00467747, -0.000104566, 4.8122e-06}, + {0.8962, -0.00536222, -3.23834e-05, -5.43445e-06}, + {0.8679, -0.00609364, -0.0001139, 3.32521e-06}, + {0.835, -0.00698325, -6.40219e-05, 9.34582e-07}, + {0.7986, -0.00755337, -5.00038e-05, 9.35532e-07}, + {0.7597, -0.00798325, -3.59716e-05, -2.27604e-06}, + {0.7186, -0.00851366, -7.0112e-05, -8.63072e-06}, + {0.6732, -0.00986209, -0.000199572, 1.91978e-05}, + {0.6213, -0.010418, 8.83948e-05, 6.24031e-06}, + {0.5722, -0.00906601, 0.000181999, 6.24033e-06}, + {0.5322, 0.,0.,0.} }, Y[] = { -0, 0.0124, 3.72529e-10, 1.15484e-09, -0.062, 0.0124001, 1.76951e-08, -5.92321e-09, -0.124, 0.0123998, -7.09668e-08, 2.25753e-08, -0.186, 0.0124008, 2.66917e-07, -8.44523e-08, -0.248, 0.0123971, -9.99682e-07, 3.15569e-07, -0.31, 0.0124108, 3.73349e-06, -1.1779e-06, -0.372, 0.0123598, -1.3935e-05, 4.39588e-06, -0.434, 0.0125501, 5.20034e-05, -1.00051e-05, -0.4958, 0.0123198, -9.80735e-05, 9.22397e-06, -0.5571, 0.0120308, 4.02857e-05, -5.2901e-06, -0.6176, 0.0120369, -3.90662e-05, 7.36117e-07, -0.6769, 0.0117015, -2.80246e-05, -8.54283e-07, -0.7346, 0.0113572, -4.08389e-05, -5.18524e-07, -0.7903, 0.0109099, -4.86169e-05, -1.0718e-06, -0.8435, 0.0103433, -6.46934e-05, 5.36384e-09, -0.8936, 0.00969679, -6.46129e-05, -8.54894e-06, -0.9394, 0.00840949, -0.000192847, -4.21023e-06, -0.9761, 0.00616525, -0.000256001, -4.21021e-06, -1., 0.,0.,0 }; + {0, 0.0124, 3.72529e-10, 1.15484e-09}, + {0.062, 0.0124001, 1.76951e-08, -5.92321e-09}, + {0.124, 0.0123998, -7.09668e-08, 2.25753e-08}, + {0.186, 0.0124008, 2.66917e-07, -8.44523e-08}, + {0.248, 0.0123971, -9.99682e-07, 3.15569e-07}, + {0.31, 0.0124108, 3.73349e-06, -1.1779e-06}, + {0.372, 0.0123598, -1.3935e-05, 4.39588e-06}, + {0.434, 0.0125501, 5.20034e-05, -1.00051e-05}, + {0.4958, 0.0123198, -9.80735e-05, 9.22397e-06}, + {0.5571, 0.0120308, 4.02857e-05, -5.2901e-06}, + {0.6176, 0.0120369, -3.90662e-05, 7.36117e-07}, + {0.6769, 0.0117015, -2.80246e-05, -8.54283e-07}, + {0.7346, 0.0113572, -4.08389e-05, -5.18524e-07}, + {0.7903, 0.0109099, -4.86169e-05, -1.0718e-06}, + {0.8435, 0.0103433, -6.46934e-05, 5.36384e-09}, + {0.8936, 0.00969679, -6.46129e-05, -8.54894e-06}, + {0.9394, 0.00840949, -0.000192847, -4.21023e-06}, + {0.9761, 0.00616525, -0.000256001, -4.21021e-06}, + {1., 0.,0.,0} }; #define FXC 0.8487 #define FYC 1.3523 #define C1 11.45915590261646417544 diff --git a/src/PJ_rpoly.c b/src/PJ_rpoly.c index 1440327df..7a7670ed0 100644 --- a/src/PJ_rpoly.c +++ b/src/PJ_rpoly.c @@ -27,7 +27,7 @@ FORWARD(s_forward); /* spheroid */ } FREEUP; if (P) pj_dalloc(P); } ENTRY0(rpoly) - if ((P->mode = (P->phi1 = fabs(pj_param(P->params, "rlat_ts").f)) > EPS)) { + if ((P->mode = (P->phi1 = fabs(pj_param(P->ctx, P->params, "rlat_ts").f)) > EPS)) { P->fxb = 0.5 * sin(P->phi1); P->fxa = 0.5 / P->fxb; } diff --git a/src/PJ_sconics.c b/src/PJ_sconics.c index c65635d86..b999f95ca 100644 --- a/src/PJ_sconics.c +++ b/src/PJ_sconics.c @@ -37,12 +37,12 @@ phi12(PJ *P, double *del) { double p1, p2; int err = 0; - if (!pj_param(P->params, "tlat_1").i || - !pj_param(P->params, "tlat_2").i) { + if (!pj_param(P->ctx, P->params, "tlat_1").i || + !pj_param(P->ctx, P->params, "tlat_2").i) { err = -41; } else { - p1 = pj_param(P->params, "rlat_1").f; - p2 = pj_param(P->params, "rlat_2").f; + p1 = pj_param(P->ctx, P->params, "rlat_1").f; + p2 = pj_param(P->ctx, P->params, "rlat_2").f; *del = 0.5 * (p2 - p1); P->sig = 0.5 * (p2 + p1); err = (fabs(*del) < EPS || fabs(P->sig) < EPS) ? -42 : 0; diff --git a/src/PJ_somerc.c b/src/PJ_somerc.c index d419e653a..f7d1f119a 100644 --- a/src/PJ_somerc.c +++ b/src/PJ_somerc.c @@ -14,8 +14,8 @@ FORWARD(e_forward); + P->K)) - HALFPI; lamp = P->c * lp.lam; cp = cos(phip); - phipp = aasin(P->cosp0 * sin(phip) - P->sinp0 * cp * cos(lamp)); - lampp = aasin(cp * sin(lamp) / cos(phipp)); + phipp = aasin(P->ctx,P->cosp0 * sin(phip) - P->sinp0 * cp * cos(lamp)); + lampp = aasin(P->ctx,cp * sin(lamp) / cos(phipp)); xy.x = P->kR * lampp; xy.y = P->kR * log(tan(FORTPI + 0.5 * phipp)); return (xy); @@ -27,8 +27,8 @@ INVERSE(e_inverse); /* ellipsoid & spheroid */ phipp = 2. * (atan(exp(xy.y / P->kR)) - FORTPI); lampp = xy.x / P->kR; cp = cos(phipp); - phip = aasin(P->cosp0 * sin(phipp) + P->sinp0 * cp * cos(lampp)); - lamp = aasin(cp * sin(lampp) / cos(phip)); + phip = aasin(P->ctx,P->cosp0 * sin(phipp) + P->sinp0 * cp * cos(lampp)); + lamp = aasin(P->ctx,cp * sin(lampp) / cos(phip)); con = (P->K - log(tan(FORTPI + 0.5 * phip)))/P->c; for (i = NITER; i ; --i) { esp = P->e * sin(phip); @@ -55,7 +55,7 @@ ENTRY0(somerc) cp *= cp; P->c = sqrt(1 + P->es * cp * cp * P->rone_es); sp = sin(P->phi0); - P->cosp0 = cos( phip0 = aasin(P->sinp0 = sp / P->c) ); + P->cosp0 = cos( phip0 = aasin(P->ctx, P->sinp0 = sp / P->c) ); sp *= P->e; P->K = log(tan(FORTPI + 0.5 * phip0)) - P->c * ( log(tan(FORTPI + 0.5 * P->phi0)) - P->hlf_e * diff --git a/src/PJ_stere.c b/src/PJ_stere.c index a31bf97b8..2ee63f539 100644 --- a/src/PJ_stere.c +++ b/src/PJ_stere.c @@ -226,12 +226,12 @@ setup(PJ *P) { /* general initialization */ return P; } ENTRY0(stere) - P->phits = pj_param(P->params, "tlat_ts").i ? - P->phits = pj_param(P->params, "rlat_ts").f : HALFPI; + P->phits = pj_param(P->ctx, P->params, "tlat_ts").i ? + P->phits = pj_param(P->ctx, P->params, "rlat_ts").f : HALFPI; ENDENTRY(setup(P)) ENTRY0(ups) /* International Ellipsoid */ - P->phi0 = pj_param(P->params, "bsouth").i ? - HALFPI: HALFPI; + P->phi0 = pj_param(P->ctx, P->params, "bsouth").i ? - HALFPI: HALFPI; if (!P->es) E_ERROR(-34); P->k0 = .994; P->x0 = 2000000.; diff --git a/src/PJ_sterea.c b/src/PJ_sterea.c index 5e709529d..7e52e15aa 100644 --- a/src/PJ_sterea.c +++ b/src/PJ_sterea.c @@ -4,7 +4,7 @@ ** Copyright (c) 2003 Gerald I. Evenden */ static const char -LIBPROJ_ID[] = "$Id: PJ_sterea.c 1504 2009-01-06 02:11:57Z warmerdam $"; +LIBPROJ_ID[] = "$Id: PJ_sterea.c 2022 2011-05-20 13:04:08Z warmerdam $"; /* ** Permission is hereby granted, free of charge, to any person obtaining ** a copy of this software and associated documentation files (the @@ -42,7 +42,7 @@ PROJ_HEAD(sterea, "Oblique Stereographic Alternative") FORWARD(e_forward); /* ellipsoid */ double cosc, sinc, cosl, k; - lp = pj_gauss(lp, P->en); + lp = pj_gauss(P->ctx, lp, P->en); sinc = sin(lp.phi); cosc = cos(lp.phi); cosl = cos(lp.lam); @@ -67,10 +67,13 @@ INVERSE(e_inverse); /* ellipsoid */ lp.phi = P->phic0; lp.lam = 0.; } - return(pj_inv_gauss(lp, P->en)); + return(pj_inv_gauss(P->ctx, lp, P->en)); } FREEUP; if (P) { if (P->en) free(P->en); free(P); } } -ENTRY0(sterea) +ENTRYA(sterea) + + P->en=0; +ENTRYX double R; if (!(P->en = pj_gauss_ini(P->e, P->phi0, &(P->phic0), &R))) E_ERROR_0; diff --git a/src/PJ_sts.c b/src/PJ_sts.c index f1557feba..c35d5cfcd 100644 --- a/src/PJ_sts.c +++ b/src/PJ_sts.c @@ -27,7 +27,7 @@ INVERSE(s_inverse); /* spheroid */ double c; xy.y /= P->C_y; - c = cos(lp.phi = P->tan_mode ? atan(xy.y) : aasin(xy.y)); + c = cos(lp.phi = P->tan_mode ? atan(xy.y) : aasin(P->ctx,xy.y)); lp.phi /= P->C_p; lp.lam = xy.x / (P->C_x * cos(lp.phi)); if (P->tan_mode) diff --git a/src/PJ_tmerc.c b/src/PJ_tmerc.c index 14cf2e8e5..3b1e0fb51 100644 --- a/src/PJ_tmerc.c +++ b/src/PJ_tmerc.c @@ -32,7 +32,7 @@ FORWARD(e_forward); /* ellipse */ { xy.x = HUGE_VAL; xy.y = HUGE_VAL; - pj_errno = -14; + pj_ctx_set_errno( P->ctx, -14 ); return xy; } @@ -70,7 +70,7 @@ FORWARD(s_forward); /* sphere */ { xy.x = HUGE_VAL; xy.y = HUGE_VAL; - pj_errno = -14; + pj_ctx_set_errno( P->ctx, -14 ); return xy; } @@ -89,7 +89,7 @@ FORWARD(s_forward); /* sphere */ INVERSE(e_inverse); /* ellipsoid */ double n, con, cosphi, d, ds, sinphi, t; - lp.phi = pj_inv_mlfn(P->ml0 + xy.y / P->k0, P->es, P->en); + lp.phi = pj_inv_mlfn(P->ctx, P->ml0 + xy.y / P->k0, P->es, P->en); if (fabs(lp.phi) >= HALFPI) { lp.phi = xy.y < 0. ? -HALFPI : HALFPI; lp.lam = 0.; @@ -157,10 +157,10 @@ ENTRY1(utm, en) int zone; if (!P->es) E_ERROR(-34); - P->y0 = pj_param(P->params, "bsouth").i ? 10000000. : 0.; + P->y0 = pj_param(P->ctx, P->params, "bsouth").i ? 10000000. : 0.; P->x0 = 500000.; - if (pj_param(P->params, "tzone").i) /* zone input ? */ - if ((zone = pj_param(P->params, "izone").i) > 0 && zone <= 60) + if (pj_param(P->ctx, P->params, "tzone").i) /* zone input ? */ + if ((zone = pj_param(P->ctx, P->params, "izone").i) > 0 && zone <= 60) --zone; else E_ERROR(-35) diff --git a/src/PJ_tpeqd.c b/src/PJ_tpeqd.c index b4e76aa0a..4ab5cf4ea 100644 --- a/src/PJ_tpeqd.c +++ b/src/PJ_tpeqd.c @@ -10,8 +10,8 @@ FORWARD(s_forward); /* sphere */ sp = sin(lp.phi); cp = cos(lp.phi); - z1 = aacos(P->sp1 * sp + P->cp1 * cp * cos(dl1 = lp.lam + P->dlam2)); - z2 = aacos(P->sp2 * sp + P->cp2 * cp * cos(dl2 = lp.lam - P->dlam2)); + z1 = aacos(P->ctx,P->sp1 * sp + P->cp1 * cp * cos(dl1 = lp.lam + P->dlam2)); + z2 = aacos(P->ctx,P->sp2 * sp + P->cp2 * cp * cos(dl2 = lp.lam - P->dlam2)); z1 *= z1; z2 *= z2; xy.x = P->r2z0 * (t = z1 - z2); @@ -29,13 +29,13 @@ INVERSE(s_inverse); /* sphere */ s = cz1 + cz2; d = cz1 - cz2; lp.lam = - atan2(d, (s * P->thz0)); - lp.phi = aacos(hypot(P->thz0 * s, d) * P->rhshz0); + lp.phi = aacos(P->ctx,hypot(P->thz0 * s, d) * P->rhshz0); if ( xy.y < 0. ) lp.phi = - lp.phi; /* lam--phi now in system relative to P1--P2 base equator */ sp = sin(lp.phi); cp = cos(lp.phi); - lp.phi = aasin(P->sa * sp + P->ca * cp * (s = cos(lp.lam -= P->lp))); + lp.phi = aasin(P->ctx,P->sa * sp + P->ca * cp * (s = cos(lp.lam -= P->lp))); lp.lam = atan2(cp * sin(lp.lam), P->sa * cp * s - P->ca * sp) + P->lamc; return lp; } @@ -44,10 +44,10 @@ ENTRY0(tpeqd) double lam_1, lam_2, phi_1, phi_2, A12, pp; /* get control point locations */ - phi_1 = pj_param(P->params, "rlat_1").f; - lam_1 = pj_param(P->params, "rlon_1").f; - phi_2 = pj_param(P->params, "rlat_2").f; - lam_2 = pj_param(P->params, "rlon_2").f; + phi_1 = pj_param(P->ctx, P->params, "rlat_1").f; + lam_1 = pj_param(P->ctx, P->params, "rlon_1").f; + phi_2 = pj_param(P->ctx, P->params, "rlat_2").f; + lam_2 = pj_param(P->ctx, P->params, "rlon_2").f; if (phi_1 == phi_2 && lam_1 == lam_2) E_ERROR(-25); P->lam0 = adjlon(0.5 * (lam_1 + lam_2)); P->dlam2 = adjlon(lam_2 - lam_1); @@ -58,11 +58,11 @@ ENTRY0(tpeqd) P->cs = P->cp1 * P->sp2; P->sc = P->sp1 * P->cp2; P->ccs = P->cp1 * P->cp2 * sin(P->dlam2); - P->z02 = aacos(P->sp1 * P->sp2 + P->cp1 * P->cp2 * cos(P->dlam2)); + P->z02 = aacos(P->ctx,P->sp1 * P->sp2 + P->cp1 * P->cp2 * cos(P->dlam2)); P->hz0 = .5 * P->z02; A12 = atan2(P->cp2 * sin(P->dlam2), P->cp1 * P->sp2 - P->sp1 * P->cp2 * cos(P->dlam2)); - P->ca = cos(pp = aasin(P->cp1 * sin(A12))); + P->ca = cos(pp = aasin(P->ctx,P->cp1 * sin(A12))); P->sa = sin(pp); P->lp = adjlon(atan2(P->cp1 * cos(A12), P->sp1) - P->hz0); P->dlam2 *= .5; diff --git a/src/PJ_urm5.c b/src/PJ_urm5.c index 70a5a1d64..6928bb349 100644 --- a/src/PJ_urm5.c +++ b/src/PJ_urm5.c @@ -6,7 +6,7 @@ PROJ_HEAD(urm5, "Urmaev V") "\n\tPCyl., Sph.\n\tn= q= alphi="; FORWARD(s_forward); /* spheroid */ double t; - t = lp.phi = aasin(P->n * sin(lp.phi)); + t = lp.phi = aasin(P->ctx,P->n * sin(lp.phi)); xy.x = P->m * lp.lam * cos(lp.phi); t *= t; xy.y = lp.phi * (1. + t * P->q3) * P->rmn; @@ -16,9 +16,9 @@ FREEUP; if (P) pj_dalloc(P); } ENTRY0(urm5) double alpha, t; - P->n = pj_param(P->params, "dn").f; - P->q3 = pj_param(P->params, "dq").f / 3.; - alpha = pj_param(P->params, "ralpha").f; + P->n = pj_param(P->ctx, P->params, "dn").f; + P->q3 = pj_param(P->ctx, P->params, "dq").f / 3.; + alpha = pj_param(P->ctx, P->params, "ralpha").f; t = P->n * sin(alpha); P->m = cos(alpha) / sqrt(1. - t * t); P->rmn = 1. / (P->m * P->n); diff --git a/src/PJ_urmfps.c b/src/PJ_urmfps.c index 4a4f31a9a..5c5918ae5 100644 --- a/src/PJ_urmfps.c +++ b/src/PJ_urmfps.c @@ -7,14 +7,14 @@ PROJ_HEAD(wag1, "Wagner I (Kavraisky VI)") "\n\tPCyl, Sph."; #define C_x 0.8773826753 #define Cy 1.139753528477 FORWARD(s_forward); /* sphere */ - lp.phi = aasin(P->n * sin(lp.phi)); + lp.phi = aasin(P->ctx,P->n * sin(lp.phi)); xy.x = C_x * lp.lam * cos(lp.phi); xy.y = P->C_y * lp.phi; return (xy); } INVERSE(s_inverse); /* sphere */ xy.y /= P->C_y; - lp.phi = aasin(sin(xy.y) / P->n); + lp.phi = aasin(P->ctx,sin(xy.y) / P->n); lp.lam = xy.x / (C_x * cos(xy.y)); return (lp); } @@ -28,8 +28,8 @@ setup(PJ *P) { return P; } ENTRY0(urmfps) - if (pj_param(P->params, "tn").i) { - P->n = pj_param(P->params, "dn").f; + if (pj_param(P->ctx, P->params, "tn").i) { + P->n = pj_param(P->ctx, P->params, "dn").f; if (P->n <= 0. || P->n > 1.) E_ERROR(-40) } else diff --git a/src/PJ_wag2.c b/src/PJ_wag2.c index 96fd5fcb1..f4942bb23 100644 --- a/src/PJ_wag2.c +++ b/src/PJ_wag2.c @@ -6,7 +6,7 @@ PROJ_HEAD(wag2, "Wagner II") "\n\tPCyl., Sph."; #define C_p1 0.88022 #define C_p2 0.88550 FORWARD(s_forward); /* spheroid */ - lp.phi = aasin(C_p1 * sin(C_p2 * lp.phi)); + lp.phi = aasin(P->ctx,C_p1 * sin(C_p2 * lp.phi)); xy.x = C_x * lp.lam * cos(lp.phi); xy.y = C_y * lp.phi; return (xy); @@ -14,7 +14,7 @@ FORWARD(s_forward); /* spheroid */ INVERSE(s_inverse); /* spheroid */ lp.phi = xy.y / C_y; lp.lam = xy.x / (C_x * cos(lp.phi)); - lp.phi = aasin(sin(lp.phi) / C_p1) / C_p2; + lp.phi = aasin(P->ctx,sin(lp.phi) / C_p1) / C_p2; return (lp); } FREEUP; if (P) pj_dalloc(P); } diff --git a/src/PJ_wag3.c b/src/PJ_wag3.c index fbab4c498..482e389c9 100644 --- a/src/PJ_wag3.c +++ b/src/PJ_wag3.c @@ -18,7 +18,7 @@ FREEUP; if (P) pj_dalloc(P); } ENTRY0(wag3) double ts; - ts = pj_param(P->params, "rlat_ts").f; + ts = pj_param(P->ctx, P->params, "rlat_ts").f; P->C_x = cos(ts) / cos(2.*ts/3.); P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/PJ_wink1.c b/src/PJ_wink1.c index 214e6f4fc..dfb455e03 100644 --- a/src/PJ_wink1.c +++ b/src/PJ_wink1.c @@ -15,6 +15,6 @@ INVERSE(s_inverse); /* spheroid */ } FREEUP; if (P) pj_dalloc(P); } ENTRY0(wink1) - P->cosphi1 = cos(pj_param(P->params, "rlat_ts").f); + P->cosphi1 = cos(pj_param(P->ctx, P->params, "rlat_ts").f); P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/PJ_wink2.c b/src/PJ_wink2.c index 8eace0094..388c790a3 100644 --- a/src/PJ_wink2.c +++ b/src/PJ_wink2.c @@ -29,6 +29,6 @@ FORWARD(s_forward); /* spheroid */ } FREEUP; if (P) pj_dalloc(P); } ENTRY0(wink2) - P->cosphi1 = cos(pj_param(P->params, "rlat_1").f); + P->cosphi1 = cos(pj_param(P->ctx, P->params, "rlat_1").f); P->es = 0.; P->inv = 0; P->fwd = s_forward; ENDENTRY(P) diff --git a/src/_geod.c b/src/_geod.c index d9533caa0..712d39486 100644 --- a/src/_geod.c +++ b/src/_geod.c @@ -1,4 +1,4 @@ -/* Generated by Cython 0.15.1 on Thu Oct 20 15:46:18 2011 */ +/* Generated by Cython 0.15.1 on Tue Dec 13 08:50:45 2011 */ #define PY_SSIZE_T_CLEAN #include "Python.h" @@ -467,7 +467,7 @@ static PyObject *__pyx_builtin_ValueError; static PyObject *__pyx_builtin_AttributeError; static char __pyx_k_2[] = "Buffer lengths not the same"; static char __pyx_k_4[] = "undefined inverse geodesic (may be an antipodal point)"; -static char __pyx_k_10[] = "1.8.9"; +static char __pyx_k_10[] = "1.9.0"; static char __pyx_k__az[] = "az"; static char __pyx_k__dist[] = "dist"; static char __pyx_k__lat1[] = "lat1"; @@ -3197,7 +3197,7 @@ PyMODINIT_FUNC PyInit__geod(void) /*--- Function import code ---*/ /*--- Execution code ---*/ - /* "/Users/jwhitaker/python/basemap/src/_pyproj.pxi":1 + /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":1 * import math # <<<<<<<<<<<<<< * * _dg2rad = math.radians(1.) @@ -3207,7 +3207,7 @@ PyMODINIT_FUNC PyInit__geod(void) if (PyObject_SetAttr(__pyx_m, __pyx_n_s__math, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Users/jwhitaker/python/basemap/src/_pyproj.pxi":3 + /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":3 * import math * * _dg2rad = math.radians(1.) # <<<<<<<<<<<<<< @@ -3233,12 +3233,12 @@ PyMODINIT_FUNC PyInit__geod(void) if (PyObject_SetAttr(__pyx_m, __pyx_n_s___dg2rad, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Users/jwhitaker/python/basemap/src/_pyproj.pxi":4 + /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":4 * * _dg2rad = math.radians(1.) * _rad2dg = math.degrees(1.) # <<<<<<<<<<<<<< * _doublesize = sizeof(double) - * __version__ = "1.8.9" + * __version__ = "1.9.0" */ __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__math); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); @@ -3259,11 +3259,11 @@ PyMODINIT_FUNC PyInit__geod(void) if (PyObject_SetAttr(__pyx_m, __pyx_n_s___rad2dg, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Users/jwhitaker/python/basemap/src/_pyproj.pxi":5 + /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":5 * _dg2rad = math.radians(1.) * _rad2dg = math.degrees(1.) * _doublesize = sizeof(double) # <<<<<<<<<<<<<< - * __version__ = "1.8.9" + * __version__ = "1.9.0" * */ __pyx_t_1 = __Pyx_PyInt_FromSize_t((sizeof(double))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} @@ -3271,10 +3271,10 @@ PyMODINIT_FUNC PyInit__geod(void) if (PyObject_SetAttr(__pyx_m, __pyx_n_s___doublesize, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Users/jwhitaker/python/basemap/src/_pyproj.pxi":6 + /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":6 * _rad2dg = math.degrees(1.) * _doublesize = sizeof(double) - * __version__ = "1.8.9" # <<<<<<<<<<<<<< + * __version__ = "1.9.0" # <<<<<<<<<<<<<< * * cdef extern from "stdlib.h": */ diff --git a/src/_proj.c b/src/_proj.c index 6e8299535..c0714277c 100644 --- a/src/_proj.c +++ b/src/_proj.c @@ -1,4 +1,4 @@ -/* Generated by Cython 0.15.1 on Thu Oct 20 15:46:15 2011 */ +/* Generated by Cython 0.15.1 on Tue Dec 13 08:50:42 2011 */ #define PY_SSIZE_T_CLEAN #include "Python.h" @@ -472,7 +472,7 @@ static PyObject *__pyx_builtin_AttributeError; static char __pyx_k_3[] = "Buffer lengths not the same"; static char __pyx_k_5[] = "projection undefined"; static char __pyx_k_15[] = "x,y and z must be same size"; -static char __pyx_k_17[] = "1.8.9"; +static char __pyx_k_17[] = "1.9.0"; static char __pyx_k__x[] = "x"; static char __pyx_k__y[] = "y"; static char __pyx_k__p1[] = "p1"; @@ -3490,7 +3490,7 @@ PyMODINIT_FUNC PyInit__proj(void) /*--- Function import code ---*/ /*--- Execution code ---*/ - /* "/Users/jwhitaker/python/basemap/src/_pyproj.pxi":1 + /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":1 * import math # <<<<<<<<<<<<<< * * _dg2rad = math.radians(1.) @@ -3500,7 +3500,7 @@ PyMODINIT_FUNC PyInit__proj(void) if (PyObject_SetAttr(__pyx_m, __pyx_n_s__math, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Users/jwhitaker/python/basemap/src/_pyproj.pxi":3 + /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":3 * import math * * _dg2rad = math.radians(1.) # <<<<<<<<<<<<<< @@ -3526,12 +3526,12 @@ PyMODINIT_FUNC PyInit__proj(void) if (PyObject_SetAttr(__pyx_m, __pyx_n_s___dg2rad, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Users/jwhitaker/python/basemap/src/_pyproj.pxi":4 + /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":4 * * _dg2rad = math.radians(1.) * _rad2dg = math.degrees(1.) # <<<<<<<<<<<<<< * _doublesize = sizeof(double) - * __version__ = "1.8.9" + * __version__ = "1.9.0" */ __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__math); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); @@ -3552,11 +3552,11 @@ PyMODINIT_FUNC PyInit__proj(void) if (PyObject_SetAttr(__pyx_m, __pyx_n_s___rad2dg, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Users/jwhitaker/python/basemap/src/_pyproj.pxi":5 + /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":5 * _dg2rad = math.radians(1.) * _rad2dg = math.degrees(1.) * _doublesize = sizeof(double) # <<<<<<<<<<<<<< - * __version__ = "1.8.9" + * __version__ = "1.9.0" * */ __pyx_t_1 = __Pyx_PyInt_FromSize_t((sizeof(double))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} @@ -3564,10 +3564,10 @@ PyMODINIT_FUNC PyInit__proj(void) if (PyObject_SetAttr(__pyx_m, __pyx_n_s___doublesize, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Users/jwhitaker/python/basemap/src/_pyproj.pxi":6 + /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":6 * _rad2dg = math.degrees(1.) * _doublesize = sizeof(double) - * __version__ = "1.8.9" # <<<<<<<<<<<<<< + * __version__ = "1.9.0" # <<<<<<<<<<<<<< * * cdef extern from "stdlib.h": */ diff --git a/src/_pyproj.pxi b/src/_pyproj.pxi index 0a3ca11bf..909700f9b 100644 --- a/src/_pyproj.pxi +++ b/src/_pyproj.pxi @@ -3,7 +3,7 @@ import math _dg2rad = math.radians(1.) _rad2dg = math.degrees(1.) _doublesize = sizeof(double) -__version__ = "1.8.9" +__version__ = "1.9.0" cdef extern from "stdlib.h": ctypedef long size_t diff --git a/src/aasincos.c b/src/aasincos.c index 460590e44..6f39478e7 100644 --- a/src/aasincos.c +++ b/src/aasincos.c @@ -3,24 +3,26 @@ #define ONE_TOL 1.00000000000001 #define TOL 0.000000001 #define ATOL 1e-50 + double -aasin(double v) { +aasin(projCtx ctx,double v) { double av; - + if ((av = fabs(v)) >= 1.) { if (av > ONE_TOL) - pj_errno = -19; + pj_ctx_set_errno( ctx, -19 ); return (v < 0. ? -HALFPI : HALFPI); } return asin(v); } + double -aacos(double v) { +aacos(projCtx ctx, double v) { double av; if ((av = fabs(v)) >= 1.) { if (av > ONE_TOL) - pj_errno = -19; + pj_ctx_set_errno( ctx, -19 ); return (v < 0. ? PI : 0.); } return acos(v); diff --git a/src/biveval.c b/src/biveval.c index 40f2af41b..59021ee57 100644 --- a/src/biveval.c +++ b/src/biveval.c @@ -2,75 +2,77 @@ # include # define NEAR_ONE 1.00001 static double ceval(struct PW_COEF *C, int n, projUV w, projUV w2) { - double d=0, dd=0, vd, vdd, tmp, *c; - int j; + double d=0, dd=0, vd, vdd, tmp, *c; + int j; - for (C += n ; n-- ; --C ) { - if (j = C->m) { - vd = vdd = 0.; - for (c = C->c + --j; j ; --j ) { - vd = w2.v * (tmp = vd) - vdd + *c--; - vdd = tmp; - } - d = w2.u * (tmp = d) - dd + w.v * vd - vdd + 0.5 * *c; - } else - d = w2.u * (tmp = d) - dd; - dd = tmp; - } - if (j = C->m) { - vd = vdd = 0.; - for (c = C->c + --j; j ; --j ) { - vd = w2.v * (tmp = vd) - vdd + *c--; - vdd = tmp; - } - return (w.u * d - dd + 0.5 * ( w.v * vd - vdd + 0.5 * *c )); - } else - return (w.u * d - dd); + for (C += n ; n-- ; --C ) { + if ( (j = C->m) != 0) { + vd = vdd = 0.; + for (c = C->c + --j; j ; --j ) { + vd = w2.v * (tmp = vd) - vdd + *c--; + vdd = tmp; + } + d = w2.u * (tmp = d) - dd + w.v * vd - vdd + 0.5 * *c; + } else + d = w2.u * (tmp = d) - dd; + dd = tmp; + } + if ( (j = C->m) != 0 ) { + vd = vdd = 0.; + for (c = C->c + --j; j ; --j ) { + vd = w2.v * (tmp = vd) - vdd + *c--; + vdd = tmp; + } + return (w.u * d - dd + 0.5 * ( w.v * vd - vdd + 0.5 * *c )); + } else + return (w.u * d - dd); } - projUV /* bivariate Chebyshev polynomial entry point */ + +projUV /* bivariate Chebyshev polynomial entry point */ bcheval(projUV in, Tseries *T) { - projUV w2, w; - projUV out; - /* scale to +-1 */ - w.u = ( in.u + in.u - T->a.u ) * T->b.u; - w.v = ( in.v + in.v - T->a.v ) * T->b.v; - if (fabs(w.u) > NEAR_ONE || fabs(w.v) > NEAR_ONE) { - out.u = out.v = HUGE_VAL; - pj_errno = -36; - } else { /* double evaluation */ - w2.u = w.u + w.u; - w2.v = w.v + w.v; - out.u = ceval(T->cu, T->mu, w, w2); - out.v = ceval(T->cv, T->mv, w, w2); - } - return out; + projUV w2, w; + projUV out; + /* scale to +-1 */ + w.u = ( in.u + in.u - T->a.u ) * T->b.u; + w.v = ( in.v + in.v - T->a.v ) * T->b.v; + if (fabs(w.u) > NEAR_ONE || fabs(w.v) > NEAR_ONE) { + out.u = out.v = HUGE_VAL; + pj_errno = -36; + } else { /* double evaluation */ + w2.u = w.u + w.u; + w2.v = w.v + w.v; + out.u = ceval(T->cu, T->mu, w, w2); + out.v = ceval(T->cv, T->mv, w, w2); + } + return out; } - projUV /* bivariate power polynomial entry point */ + +projUV /* bivariate power polynomial entry point */ bpseval(projUV in, Tseries *T) { - projUV out; - double *c, row; - int i, m; + projUV out; + double *c, row; + int i, m; - out.u = out.v = 0.; - for (i = T->mu; i >= 0; --i) { - row = 0.; - if (m = T->cu[i].m) { - c = T->cu[i].c + m; - while (m--) - row = *--c + in.v * row; - } - out.u = row + in.u * out.u; - } - for (i = T->mv; i >= 0; --i) { - row = 0.; - if (m = T->cv[i].m) { - c = T->cv[i].c + m; - while (m--) - row = *--c + in.v * row; - } - out.v = row + in.u * out.v; - } - return out; + out.u = out.v = 0.; + for (i = T->mu; i >= 0; --i) { + row = 0.; + if ((m = T->cu[i].m) != 0) { + c = T->cu[i].c + m; + while (m--) + row = *--c + in.v * row; + } + out.u = row + in.u * out.u; + } + for (i = T->mv; i >= 0; --i) { + row = 0.; + if ((m = T->cv[i].m) != 0) { + c = T->cv[i].c + m; + while (m--) + row = *--c + in.v * row; + } + out.v = row + in.u * out.v; + } + return out; } projUV /* general entry point selecting evaluation mode */ diff --git a/src/dmstor.c b/src/dmstor.c index 1cc99f627..f1da53793 100644 --- a/src/dmstor.c +++ b/src/dmstor.c @@ -17,6 +17,11 @@ vm[] = { }; double dmstor(const char *is, char **rs) { + return dmstor_ctx( pj_get_default_ctx(), is, rs ); +} + + double +dmstor_ctx(projCtx ctx, const char *is, char **rs) { int sign, n, nl; char *p, *s, work[MAX_WORK]; double v, tv; @@ -46,7 +51,7 @@ dmstor(const char *is, char **rs) { n = 2; break; case 'r': case 'R': if (nl) { - pj_errno = -16; + pj_ctx_set_errno( ctx, -16 ); return HUGE_VAL; } ++s; @@ -58,7 +63,7 @@ dmstor(const char *is, char **rs) { continue; } if (n < nl) { - pj_errno = -16; + pj_ctx_set_errno( ctx, -16 ); return HUGE_VAL; } v += tv * vm[n]; diff --git a/src/emess.h b/src/emess.h index 6724a0652..4106e11da 100644 --- a/src/emess.h +++ b/src/emess.h @@ -2,10 +2,6 @@ #ifndef EMESS_H #define EMESS_H -#ifndef lint -static char EMESS_H_ID[] = "@(#)emess.h 4.1 93/03/08 GIE REL"; -#endif - struct EMESS { char *File_name, /* input file name */ *Prog_name; /* name of program */ diff --git a/src/geod_inv.c b/src/geod_inv.c index 61c818515..5cae35bd9 100644 --- a/src/geod_inv.c +++ b/src/geod_inv.c @@ -1,6 +1,6 @@ # include "projects.h" # include "geodesic.h" -# define DTOL 1e-12 +# define DTOL 1e-8 int geod_inv(GEODESIC_T *GEODESIC) diff --git a/src/geod_set.c b/src/geod_set.c index a190391be..ee795c6da 100644 --- a/src/geod_set.c +++ b/src/geod_set.c @@ -15,13 +15,13 @@ GEOD_init(int argc, char **argv, GEODESIC_T *GEODESIC) char *name; int i; - if(0 == GEODESIC) { GEODESIC = malloc(sizeof(GEODESIC_T)); } memset(GEODESIC, 0, sizeof(GEODESIC_T)); + /* put arguments into internal linked list */ if (argc <= 0) emess(1, "no arguments in initialization list"); @@ -31,50 +31,49 @@ GEOD_init(int argc, char **argv, GEODESIC_T *GEODESIC) else start = curr = pj_mkparam(argv[i]); /* set elliptical parameters */ - if (pj_ell_set(start, &GEODESIC->A, &es)) emess(1,"ellipse setup failure"); + if (pj_ell_set(pj_get_default_ctx(),start, &GEODESIC->A, &es)) emess(1,"ellipse setup failure"); /* set units */ - if ((name = pj_param(start, "sunits").s)) { + if (name = pj_param(NULL,start, "sunits").s) { char *s; struct PJ_UNITS *unit_list = pj_get_units_ref(); for (i = 0; (s = unit_list[i].id) && strcmp(name, s) ; ++i) ; if (!s) emess(1,"%s unknown unit conversion id", name); - GEODESIC->FR_METER = 1. / (GEODESIC->TO_METER = atof(unit_list[i].to_meter)); + GEODESIC->FR_METER = 1. / (GEODESIC->TO_METER = atof(unit_list[i].to_meter)); } else - GEODESIC->TO_METER = GEODESIC->FR_METER = 1.; - if ((GEODESIC->ELLIPSE = (es != 0.))) { - GEODESIC->ONEF = sqrt(1. - es); - GEODESIC->FLAT = 1 - GEODESIC->ONEF; - GEODESIC->FLAT2 = GEODESIC->FLAT/2; - GEODESIC->FLAT4 = GEODESIC->FLAT/4; - GEODESIC->FLAT64 = GEODESIC->FLAT*GEODESIC->FLAT/64; + GEODESIC->TO_METER = GEODESIC->FR_METER = 1.; + if ((GEODESIC->ELLIPSE = (es != 0.))) { + GEODESIC->ONEF = sqrt(1. - es); + GEODESIC->FLAT = 1 - GEODESIC->ONEF; + GEODESIC->FLAT2 = GEODESIC->FLAT/2; + GEODESIC->FLAT4 = GEODESIC->FLAT/4; + GEODESIC->FLAT64 = GEODESIC->FLAT*GEODESIC->FLAT/64; } else { - GEODESIC->ONEF = 1.; - GEODESIC->FLAT = GEODESIC->FLAT2 = GEODESIC->FLAT4 = GEODESIC->FLAT64 = 0.; + GEODESIC->ONEF = 1.; + GEODESIC->FLAT = GEODESIC->FLAT2 = GEODESIC->FLAT4 = GEODESIC->FLAT64 = 0.; } /* check if line or arc mode */ - if (pj_param(start, "tlat_1").i) { + if (pj_param(NULL,start, "tlat_1").i) { double del_S; #undef f - - GEODESIC->p1.u = pj_param(start, "rlat_1").f; - GEODESIC->p1.v = pj_param(start, "rlon_1").f; - if (pj_param(start, "tlat_2").i) { - GEODESIC->p2.u = pj_param(start, "rlat_2").f; - GEODESIC->p2.v = pj_param(start, "rlon_2").f; - geod_inv(GEODESIC); - geod_pre(GEODESIC); - } else if ((GEODESIC->DIST = pj_param(start, "dS").f)) { - GEODESIC->ALPHA12 = pj_param(start, "rA").f; - geod_pre(GEODESIC); - geod_for(GEODESIC); + GEODESIC->p1.u = pj_param(NULL,start, "rlat_1").f; + GEODESIC->p1.v = pj_param(NULL,start, "rlon_1").f; + if (pj_param(NULL,start, "tlat_2").i) { + GEODESIC->p2.u = pj_param(NULL,start, "rlat_2").f; + GEODESIC->p2.v = pj_param(NULL,start, "rlon_2").f; + geod_inv(GEODESIC); + geod_pre(GEODESIC); + } else if ((GEODESIC->DIST = pj_param(NULL,start, "dS").f)) { + GEODESIC->ALPHA12 = pj_param(NULL,start, "rA").f; + geod_pre(GEODESIC); + geod_for(GEODESIC); } else emess(1,"incomplete geodesic/arc info"); - if ((GEODESIC->n_alpha = pj_param(start, "in_A").i) > 0) { - if (!(GEODESIC->del_alpha = pj_param(start, "rdel_A").f)) + if ((GEODESIC->n_alpha = pj_param(NULL,start, "in_A").i) > 0) { + if (!(GEODESIC->del_alpha = pj_param(NULL,start, "rdel_A").f)) emess(1,"del azimuth == 0"); - } else if ((del_S = fabs(pj_param(start, "ddel_S").f))) { - GEODESIC->n_S = GEODESIC->DIST / del_S + .5; - } else if ((GEODESIC->n_S = pj_param(start, "in_S").i) <= 0) + } else if (del_S = fabs(pj_param(NULL,start, "ddel_S").f)) { + GEODESIC->n_S = GEODESIC->DIST / del_S + .5; + } else if ((GEODESIC->n_S = pj_param(NULL,start, "in_S").i) <= 0) emess(1,"no interval divisor selected"); } /* free up linked list */ @@ -82,7 +81,7 @@ GEOD_init(int argc, char **argv, GEODESIC_T *GEODESIC) curr = start->next; pj_dalloc(start); } - return GEODESIC; + return GEODESIC; } GEODESIC_T *GEOD_init_plus(const char *definition, GEODESIC_T *geod) @@ -91,7 +90,6 @@ GEODESIC_T *GEOD_init_plus(const char *definition, GEODESIC_T *geod) char *argv[MAX_ARG]; char *defn_copy; int argc = 0, i; - GEODESIC_T *ret_geod; /* make a copy that we can manipulate */ defn_copy = strdup(definition); @@ -127,7 +125,7 @@ GEODESIC_T *GEOD_init_plus(const char *definition, GEODESIC_T *geod) } /* perform actual initialization */ - ret_geod = GEOD_init(argc, argv, geod); + GEODESIC_T *ret_geod = GEOD_init(argc, argv, geod); free( defn_copy ); return ret_geod; diff --git a/src/geodesic.h b/src/geodesic.h index 2a9ff60cd..f87554f9a 100644 --- a/src/geodesic.h +++ b/src/geodesic.h @@ -1,5 +1,6 @@ #ifndef __GEODESIC_H__ #define __GEODESIC_H__ +#endif #include "projects.h" @@ -19,35 +20,29 @@ extern "C" { typedef struct geodesic { double A; - - projUV p1, p2; - - double ALPHA12; - double ALPHA21; - + + projUV p1, p2; + + double ALPHA12; + double ALPHA21; + double DIST; double ONEF, FLAT, FLAT2, FLAT4, FLAT64; int ELLIPSE; - double FR_METER, TO_METER, del_alpha; - int n_alpha, n_S; - + double FR_METER, TO_METER, del_alpha; + int n_alpha, n_S; + + + double th1,costh1,sinth1,sina12,cosa12,M,N,c1,c2,D,P,s1; + int merid, signS; + } GEODESIC_T; - double th1,costh1,sinth1,sina12,cosa12,M,N,c1,c2,D,P,s1; - int merid, signS; -} GEODESIC_T; - - GEODESIC_T *GEOD_init(int, char **, GEODESIC_T *g); GEODESIC_T *GEOD_init_plus(const char *args, GEODESIC_T *g); void geod_for(GEODESIC_T *g); void geod_pre(GEODESIC_T *g); int geod_inv(GEODESIC_T *g); - - #ifdef __cplusplus } #endif - -#endif // __GEODESIC_H__ - diff --git a/src/hypot.c b/src/hypot.c new file mode 100644 index 000000000..822c4595f --- /dev/null +++ b/src/hypot.c @@ -0,0 +1,36 @@ +/* hypot - sqrt(x * x + y * y) +** +** Because this was omitted from the ANSI standards, this version +** is included for those systems that do not include hypot as an +** extension to libm.a. Note: GNU version was not used because it +** was not properly coded to minimize potential overflow. +** +** The proper technique for determining hypot is to factor out the +** larger of the two terms, thus leaving a possible case of float +** overflow when max(x,y)*sqrt(2) > max machine value. This allows +** a wider range of numbers than the alternative of the sum of the +** squares < max machine value. For an Intel x87 IEEE double of +** approximately 1.8e308, only argument values > 1.27e308 are at +** risk of causing overflow. Whereas, not using this method limits +** the range to values less that 9.5e153 --- a considerable reduction +** in range! +*/ +extern double sqrt(double); + double +hypot(double x, double y) { + if ( x < 0.) + x = -x; + else if (x == 0.) + return (y < 0. ? -y : y); + if (y < 0.) + y = -y; + else if (y == 0.) + return (x); + if ( x < y ) { + x /= y; + return ( y * sqrt( 1. + x * x ) ); + } else { + y /= x; + return ( x * sqrt( 1. + y * y ) ); + } +} diff --git a/src/mk_cheby.c b/src/mk_cheby.c index b30190046..57ca092d0 100644 --- a/src/mk_cheby.c +++ b/src/mk_cheby.c @@ -91,14 +91,14 @@ mk_cheby(projUV a, projUV b, double res, projUV *resid, projUV (*func)(projUV), if (ncu[j]) nru = j + 1; /* update row max */ if (ncv[j]) nrv = j + 1; } - if (T = makeT(nru, nrv)) { + if ((T = makeT(nru, nrv)) != NULL ) { T->a = a; T->b = b; T->mu = nru - 1; T->mv = nrv - 1; T->power = 1; for (i = 0; i < nru; ++i) /* store coefficient rows for u */ - if (T->cu[i].m = ncu[i]) + if ((T->cu[i].m = ncu[i]) != 0) if ((p = T->cu[i].c = (double *)pj_malloc(sizeof(double) * ncu[i]))) for (j = 0; j < ncu[i]; ++j) @@ -106,7 +106,7 @@ mk_cheby(projUV a, projUV b, double res, projUV *resid, projUV (*func)(projUV), else goto error; for (i = 0; i < nrv; ++i) /* same for v */ - if (T->cv[i].m = ncv[i]) + if ((T->cv[i].m = ncv[i]) != 0) if ((p = T->cv[i].c = (double *)pj_malloc(sizeof(double) * ncv[i]))) for (j = 0; j < ncv[i]; ++j) @@ -114,7 +114,7 @@ mk_cheby(projUV a, projUV b, double res, projUV *resid, projUV (*func)(projUV), else goto error; } - } else if (T = makeT(nru, nrv)) { + } else if ((T = makeT(nru, nrv)) != NULL) { /* else make returned Chebyshev coefficient structure */ T->mu = nru - 1; /* save row degree */ T->mv = nrv - 1; @@ -124,7 +124,7 @@ mk_cheby(projUV a, projUV b, double res, projUV *resid, projUV (*func)(projUV), T->b.v = 1. / (b.v - a.v); T->power = 0; for (i = 0; i < nru; ++i) /* store coefficient rows for u */ - if (T->cu[i].m = ncu[i]) + if ((T->cu[i].m = ncu[i]) != 0) if ((p = T->cu[i].c = (double *)pj_malloc(sizeof(double) * ncu[i]))) for (j = 0; j < ncu[i]; ++j) @@ -132,7 +132,7 @@ mk_cheby(projUV a, projUV b, double res, projUV *resid, projUV (*func)(projUV), else goto error; for (i = 0; i < nrv; ++i) /* same for v */ - if (T->cv[i].m = ncv[i]) + if ((T->cv[i].m = ncv[i]) != 0) if ((p = T->cv[i].c = (double *)pj_malloc(sizeof(double) * ncv[i]))) for (j = 0; j < ncv[i]; ++j) diff --git a/src/nad_init.c b/src/nad_init.c index ec74a9c9c..fe4e063e3 100644 --- a/src/nad_init.c +++ b/src/nad_init.c @@ -1,5 +1,5 @@ /****************************************************************************** - * $Id: nad_init.c 1504 2009-01-06 02:11:57Z warmerdam $ + * $Id: nad_init.c 2121 2011-11-22 22:51:47Z warmerdam $ * * Project: PROJ.4 * Purpose: Load datum shift files into memory. @@ -44,19 +44,124 @@ # include #endif /* _WIN32_WCE */ +/************************************************************************/ +/* swap_words() */ +/* */ +/* Convert the byte order of the given word(s) in place. */ +/************************************************************************/ + +static int byte_order_test = 1; +#define IS_LSB (((unsigned char *) (&byte_order_test))[0] == 1) + +static void swap_words( void *data_in, int word_size, int word_count ) + +{ + int word; + unsigned char *data = (unsigned char *) data_in; + + for( word = 0; word < word_count; word++ ) + { + int i; + + for( i = 0; i < word_size/2; i++ ) + { + int t; + + t = data[i]; + data[i] = data[word_size-i-1]; + data[word_size-i-1] = t; + } + + data += word_size; + } +} + /************************************************************************/ /* nad_ctable_load() */ /* */ /* Load the data portion of a ctable formatted grid. */ /************************************************************************/ -int nad_ctable_load( struct CTABLE *ct, FILE *fid ) +int nad_ctable_load( projCtx ctx, struct CTABLE *ct, FILE *fid ) { int a_size; fseek( fid, sizeof(struct CTABLE), SEEK_SET ); + /* read all the actual shift values */ + a_size = ct->lim.lam * ct->lim.phi; + ct->cvs = (FLP *) pj_malloc(sizeof(FLP) * a_size); + if( ct->cvs == NULL + || fread(ct->cvs, sizeof(FLP), a_size, fid) != a_size ) + { + pj_dalloc( ct->cvs ); + ct->cvs = NULL; + + pj_log( ctx, PJ_LOG_ERROR, + "ctable loading failed on fread() - binary incompatible?\n" ); + pj_ctx_set_errno( ctx, -38 ); + return 0; + } + + return 1; +} + +/************************************************************************/ +/* nad_ctable_init() */ +/* */ +/* Read the header portion of a "ctable" format grid. */ +/************************************************************************/ + +struct CTABLE *nad_ctable_init( projCtx ctx, FILE * fid ) +{ + struct CTABLE *ct; + int id_end; + + /* read the table header */ + ct = (struct CTABLE *) pj_malloc(sizeof(struct CTABLE)); + if( ct == NULL + || fread( ct, sizeof(struct CTABLE), 1, fid ) != 1 ) + { + pj_ctx_set_errno( ctx, -38 ); + return NULL; + } + + /* do some minimal validation to ensure the structure isn't corrupt */ + if( ct->lim.lam < 1 || ct->lim.lam > 100000 + || ct->lim.phi < 1 || ct->lim.phi > 100000 ) + { + pj_ctx_set_errno( ctx, -38 ); + return NULL; + } + + /* trim white space and newlines off id */ + for( id_end = strlen(ct->id)-1; id_end > 0; id_end-- ) + { + if( ct->id[id_end] == '\n' || ct->id[id_end] == ' ' ) + ct->id[id_end] = '\0'; + else + break; + } + + ct->cvs = NULL; + + return ct; +} + +/************************************************************************/ +/* nad_ctable2_load() */ +/* */ +/* Load the data portion of a ctable2 formatted grid. */ +/************************************************************************/ + +int nad_ctable2_load( projCtx ctx, struct CTABLE *ct, FILE *fid ) + +{ + int a_size; + + fseek( fid, 160, SEEK_SET ); + /* read all the actual shift values */ a_size = ct->lim.lam * ct->lim.phi; ct->cvs = (FLP *) pj_malloc(sizeof(FLP) * a_size); @@ -72,38 +177,70 @@ int nad_ctable_load( struct CTABLE *ct, FILE *fid ) "ctable loading failed on fread() - binary incompatible?\n" ); } - pj_errno = -38; + pj_ctx_set_errno( ctx, -38 ); return 0; } + if( !IS_LSB ) + { + swap_words( ct->cvs, 4, a_size * 2 ); + } + return 1; } /************************************************************************/ -/* nad_ctable_init() */ +/* nad_ctable2_init() */ /* */ -/* Read the header portion of a "ctable" format grid. */ +/* Read the header portion of a "ctable2" format grid. */ /************************************************************************/ -struct CTABLE *nad_ctable_init( FILE * fid ) +struct CTABLE *nad_ctable2_init( projCtx ctx, FILE * fid ) { struct CTABLE *ct; int id_end; + char header[160]; + + if( fread( header, sizeof(header), 1, fid ) != 1 ) + { + pj_ctx_set_errno( ctx, -38 ); + return NULL; + } + + if( !IS_LSB ) + { + swap_words( header + 96, 8, 4 ); + swap_words( header + 128, 4, 2 ); + } + + if( strncmp(header,"CTABLE V2",9) != 0 ) + { + pj_log( ctx, PJ_LOG_ERROR, "ctable2 - wrong header!" ); + pj_ctx_set_errno( ctx, -38 ); + return NULL; + } /* read the table header */ ct = (struct CTABLE *) pj_malloc(sizeof(struct CTABLE)); - if( ct == NULL - || fread( ct, sizeof(struct CTABLE), 1, fid ) != 1 ) + if( ct == NULL ) { - pj_errno = -38; + pj_ctx_set_errno( ctx, -38 ); return NULL; } + memcpy( ct->id, header + 16, 80 ); + memcpy( &ct->ll.lam, header + 96, 8 ); + memcpy( &ct->ll.phi, header + 104, 8 ); + memcpy( &ct->del.lam, header + 112, 8 ); + memcpy( &ct->del.phi, header + 120, 8 ); + memcpy( &ct->lim.lam, header + 128, 4 ); + memcpy( &ct->lim.phi, header + 132, 4 ); + /* do some minimal validation to ensure the structure isn't corrupt */ if( ct->lim.lam < 1 || ct->lim.lam > 100000 || ct->lim.phi < 1 || ct->lim.phi > 100000 ) { - pj_errno = -38; + pj_ctx_set_errno( ctx, -38 ); return NULL; } @@ -127,28 +264,26 @@ struct CTABLE *nad_ctable_init( FILE * fid ) /* Read a datum shift file in any of the supported binary formats. */ /************************************************************************/ -struct CTABLE *nad_init(char *name) +struct CTABLE *nad_init(projCtx ctx, char *name) { char fname[MAX_PATH_FILENAME+1]; struct CTABLE *ct; FILE *fid; - char header[512]; - errno = pj_errno = 0; + ctx->last_errno = 0; /* -------------------------------------------------------------------- */ /* Open the file using the usual search rules. */ /* -------------------------------------------------------------------- */ strcpy(fname, name); - if (!(fid = pj_open_lib(fname, "rb"))) { - pj_errno = errno; + if (!(fid = pj_open_lib(ctx, fname, "rb"))) { return 0; } - - ct = nad_ctable_init( fid ); + + ct = nad_ctable_init( ctx, fid ); if( ct != NULL ) { - if( !nad_ctable_load( ct, fid ) ) + if( !nad_ctable_load( ctx, ct, fid ) ) { nad_free( ct ); ct = NULL; diff --git a/src/pj_apply_gridshift.c b/src/pj_apply_gridshift.c index 9ccfee391..9ff4efe92 100644 --- a/src/pj_apply_gridshift.c +++ b/src/pj_apply_gridshift.c @@ -1,5 +1,5 @@ /****************************************************************************** - * $Id: pj_apply_gridshift.c 1504 2009-01-06 02:11:57Z warmerdam $ + * $Id: pj_apply_gridshift.c 1856 2010-06-11 03:26:04Z warmerdam $ * * Project: PROJ.4 * Purpose: Apply datum shifts based on grid shift files (normally NAD27 to @@ -38,24 +38,91 @@ /************************************************************************/ /* pj_apply_gridshift() */ +/* */ +/* This is the externally callable interface - part of the */ +/* public API - though it is not used internally any more and I */ +/* doubt it is used by any other applications. But we preserve */ +/* it to honour our public api. */ /************************************************************************/ -int pj_apply_gridshift( const char *nadgrids, int inverse, +int pj_apply_gridshift( projCtx ctx, const char *nadgrids, int inverse, long point_count, int point_offset, double *x, double *y, double *z ) { - int grid_count = 0; - PJ_GRIDINFO **tables; + PJ_GRIDINFO **gridlist; + int grid_count; + int ret; + + gridlist = pj_gridlist_from_nadgrids( ctx, nadgrids, &grid_count ); + + if( gridlist == NULL || grid_count == 0 ) + return ctx->last_errno; + + ret = pj_apply_gridshift_3( ctx, gridlist, grid_count, inverse, + point_count, point_offset, x, y, z ); + + /* + ** Note this frees the array of grid list pointers, but not the grids + ** which is as intended. The grids themselves live on. + */ + pj_dalloc( gridlist ); + + return ret; +} + +/************************************************************************/ +/* pj_apply_gridshift_2() */ +/* */ +/* This implmentation takes uses the gridlist from a coordinate */ +/* system definition. If the gridlist has not yet been */ +/* populated in the coordinate system definition we set it up */ +/* now. */ +/************************************************************************/ + +int pj_apply_gridshift_2( PJ *defn, int inverse, + long point_count, int point_offset, + double *x, double *y, double *z ) + +{ + if( defn->gridlist == NULL ) + { + defn->gridlist = + pj_gridlist_from_nadgrids( pj_get_ctx( defn ), + pj_param(defn->ctx, defn->params,"snadgrids").s, + &(defn->gridlist_count) ); + + if( defn->gridlist == NULL || defn->gridlist_count == 0 ) + return defn->ctx->last_errno; + } + + return pj_apply_gridshift_3( pj_get_ctx( defn ), + defn->gridlist, defn->gridlist_count, inverse, + point_count, point_offset, x, y, z ); +} + + +/************************************************************************/ +/* pj_apply_gridshift_3() */ +/* */ +/* This is the real workhorse, given a gridlist. */ +/************************************************************************/ + +int pj_apply_gridshift_3( projCtx ctx, PJ_GRIDINFO **tables, int grid_count, + int inverse, long point_count, int point_offset, + double *x, double *y, double *z ) + +{ int i; - int debug_flag = getenv( "PROJ_DEBUG" ) != NULL; static int debug_count = 0; - pj_errno = 0; - - tables = pj_gridlist_from_nadgrids( nadgrids, &grid_count); if( tables == NULL || grid_count == 0 ) - return pj_errno; + { + pj_ctx_set_errno( ctx, -38); + return -38; + } + + ctx->last_errno = 0; for( i = 0; i < point_count; i++ ) { @@ -106,38 +173,45 @@ int pj_apply_gridshift( const char *nadgrids, int inverse, } /* load the grid shift info if we don't have it. */ - if( ct->cvs == NULL && !pj_gridinfo_load( gi ) ) + if( ct->cvs == NULL && !pj_gridinfo_load( ctx, gi ) ) { - pj_errno = -38; - return pj_errno; + pj_ctx_set_errno( ctx, -38 ); + return -38; } output = nad_cvt( input, inverse, ct ); if( output.lam != HUGE_VAL ) { - if( debug_flag && debug_count++ < 20 ) - fprintf( stderr, - "pj_apply_gridshift(): used %s\n", - ct->id ); + if( debug_count++ < 20 ) + pj_log( ctx, PJ_LOG_DEBUG_MINOR, + "pj_apply_gridshift(): used %s", ct->id ); break; } } if( output.lam == HUGE_VAL ) { - if( debug_flag ) + if( ctx->debug_level >= PJ_LOG_DEBUG_MAJOR ) { - fprintf( stderr, - "pj_apply_gridshift(): failed to find a grid shift table for\n" - " location (%.7fdW,%.7fdN)\n", - x[io] * RAD_TO_DEG, - y[io] * RAD_TO_DEG ); - fprintf( stderr, - " tried: %s\n", nadgrids ); + pj_log( ctx, PJ_LOG_DEBUG_MAJOR, + "pj_apply_gridshift(): failed to find a grid shift table for\n" + " location (%.7fdW,%.7fdN)", + x[io] * RAD_TO_DEG, + y[io] * RAD_TO_DEG ); + for( itable = 0; itable < grid_count; itable++ ) + { + PJ_GRIDINFO *gi = tables[itable]; + if( itable == 0 ) + pj_log( ctx, PJ_LOG_DEBUG_MAJOR, + " tried: %s", gi->gridname ); + else + pj_log( ctx, PJ_LOG_DEBUG_MAJOR, + ",%s", gi->gridname ); + } } - - pj_errno = -38; - return pj_errno; + + pj_ctx_set_errno( ctx, PJD_ERR_GRID_AREA ); + return PJD_ERR_GRID_AREA; } else { diff --git a/src/pj_apply_vgridshift.c b/src/pj_apply_vgridshift.c new file mode 100644 index 000000000..1570d7ff3 --- /dev/null +++ b/src/pj_apply_vgridshift.c @@ -0,0 +1,208 @@ +/****************************************************************************** + * $Id: pj_apply_gridshift.c 1831 2010-03-16 12:44:36Z warmerdam $ + * + * Project: PROJ.4 + * Purpose: Apply vertical datum shifts based on grid shift files, normally + * geoid grids mapping WGS84 to NAVD88 or something similar. + * Author: Frank Warmerdam, warmerdam@pobox.com + * + ****************************************************************************** + * Copyright (c) 2010, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#define PJ_LIB__ + +#include +#include +#include + +/************************************************************************/ +/* pj_apply_vgridshift() */ +/* */ +/* This implmentation takes uses the gridlist from a coordinate */ +/* system definition. If the gridlist has not yet been */ +/* populated in the coordinate system definition we set it up */ +/* now. */ +/************************************************************************/ + +int pj_apply_vgridshift( PJ *defn, const char *listname, + PJ_GRIDINFO ***gridlist_p, + int *gridlist_count_p, + int inverse, + long point_count, int point_offset, + double *x, double *y, double *z ) + +{ + int i; + static int debug_count = 0; + PJ_GRIDINFO **tables; + + if( *gridlist_p == NULL ) + { + *gridlist_p = + pj_gridlist_from_nadgrids( pj_get_ctx(defn), + pj_param(defn->ctx,defn->params,listname).s, + gridlist_count_p ); + + if( *gridlist_p == NULL || *gridlist_count_p == 0 ) + return defn->ctx->last_errno; + } + + if( *gridlist_count_p == 0 ) + { + pj_ctx_set_errno( defn->ctx, -38); + return -38; + } + + tables = *gridlist_p; + defn->ctx->last_errno = 0; + + for( i = 0; i < point_count; i++ ) + { + long io = i * point_offset; + LP input; + int itable; + double value = HUGE_VAL; + + input.phi = y[io]; + input.lam = x[io]; + + /* keep trying till we find a table that works */ + for( itable = 0; itable < *gridlist_count_p; itable++ ) + { + PJ_GRIDINFO *gi = tables[itable]; + struct CTABLE *ct = gi->ct; + double grid_x, grid_y; + int grid_ix, grid_iy; + float *cvs; + + /* skip tables that don't match our point at all. */ + if( ct->ll.phi > input.phi || ct->ll.lam > input.lam + || ct->ll.phi + (ct->lim.phi-1) * ct->del.phi < input.phi + || ct->ll.lam + (ct->lim.lam-1) * ct->del.lam < input.lam ) + continue; + + /* If we have child nodes, check to see if any of them apply. */ + if( gi->child != NULL ) + { + PJ_GRIDINFO *child; + + for( child = gi->child; child != NULL; child = child->next ) + { + struct CTABLE *ct1 = child->ct; + + if( ct1->ll.phi > input.phi || ct1->ll.lam > input.lam + || ct1->ll.phi+(ct1->lim.phi-1)*ct1->del.phi < input.phi + || ct1->ll.lam+(ct1->lim.lam-1)*ct1->del.lam < input.lam) + continue; + + break; + } + + /* we found a more refined child node to use */ + if( child != NULL ) + { + gi = child; + ct = child->ct; + } + } + + /* load the grid shift info if we don't have it. */ + if( ct->cvs == NULL && !pj_gridinfo_load( pj_get_ctx(defn), gi ) ) + { + pj_ctx_set_errno( defn->ctx, -38 ); + return -38; + } + + /* Interpolation a location within the grid */ + grid_x = (input.lam - ct->ll.lam) / ct->del.lam; + grid_y = (input.phi - ct->ll.phi) / ct->del.phi; + grid_ix = (int) floor(grid_x); + grid_iy = (int) floor(grid_y); + grid_x -= grid_ix; + grid_y -= grid_iy; + + cvs = (float *) ct->cvs; + value = cvs[grid_ix + grid_iy * ct->lim.lam] + * (1.0-grid_x) * (1.0-grid_y) + + cvs[grid_ix + 1 + grid_iy * ct->lim.lam] + * (grid_x) * (1.0-grid_y) + + cvs[grid_ix + (grid_iy+1) * ct->lim.lam] + * (1.0-grid_x) * (grid_y) + + cvs[grid_ix + 1 + (grid_iy+1) * ct->lim.lam] + * (grid_x) * (grid_y); + + if( value > 1000 || value < -1000 ) /* nodata? */ + value = HUGE_VAL; + else + { + if( inverse ) + z[io] -= value; + else + z[io] += value; + } + + if( value != HUGE_VAL ) + { + if( debug_count++ < 20 ) + pj_log( defn->ctx, PJ_LOG_DEBUG_MINOR, + "pj_apply_gridshift(): used %s", + ct->id ); + break; + } + } + + if( value == HUGE_VAL ) + { + char gridlist[3000]; + + pj_log( defn->ctx, PJ_LOG_DEBUG_MAJOR, + "pj_apply_vgridshift(): failed to find a grid shift table for\n" + " location (%.7fdW,%.7fdN)", + x[io] * RAD_TO_DEG, + y[io] * RAD_TO_DEG ); + + gridlist[0] = '\0'; + for( itable = 0; itable < *gridlist_count_p; itable++ ) + { + PJ_GRIDINFO *gi = tables[itable]; + if( strlen(gridlist) + strlen(gi->gridname) > sizeof(gridlist)-100 ) + { + strcat( gridlist, "..." ); + break; + } + + if( itable == 0 ) + sprintf( gridlist, " tried: %s", gi->gridname ); + else + sprintf( gridlist+strlen(gridlist), ",%s", gi->gridname ); + } + pj_log( defn->ctx, PJ_LOG_DEBUG_MAJOR, + "%s", gridlist ); + + pj_ctx_set_errno( defn->ctx, PJD_ERR_GRID_AREA ); + return PJD_ERR_GRID_AREA; + } + } + + return 0; +} + diff --git a/src/pj_auth.c b/src/pj_auth.c index 599b8f77d..35178418b 100644 --- a/src/pj_auth.c +++ b/src/pj_auth.c @@ -1,17 +1,17 @@ /* determine latitude from authalic latitude */ #include -# define P00 .33333333333333333333 -# define P01 .17222222222222222222 -# define P02 .10257936507936507936 -# define P10 .06388888888888888888 -# define P11 .06640211640211640211 -# define P20 .01641501294219154443 +# define P00 .33333333333333333333 /* 1 / 3 */ +# define P01 .17222222222222222222 /* 31 / 180 */ +# define P02 .10257936507936507937 /* 517 / 5040 */ +# define P10 .06388888888888888888 /* 23 / 360 */ +# define P11 .06640211640211640212 /* 251 / 3780 */ +# define P20 .01677689594356261023 /* 761 / 45360 */ #define APA_SIZE 3 double * pj_authset(double es) { double t, *APA; - if (APA = (double *)pj_malloc(APA_SIZE * sizeof(double))) { + if ((APA = (double *)pj_malloc(APA_SIZE * sizeof(double))) != NULL) { APA[0] = es * P00; t = es * es; APA[0] += t * P01; diff --git a/src/pj_ctx.c b/src/pj_ctx.c new file mode 100644 index 000000000..a9dc7ab80 --- /dev/null +++ b/src/pj_ctx.c @@ -0,0 +1,179 @@ +/****************************************************************************** + * $Id$ + * + * Project: PROJ.4 + * Purpose: Implementation of the projCtx thread context object. + * Author: Frank Warmerdam, warmerdam@pobox.com + * + ****************************************************************************** + * Copyright (c) 2010, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#include +#include + +PJ_CVSID("$Id$"); + +static projCtx_t default_context; +static int default_context_initialized = 0; + +/************************************************************************/ +/* pj_get_ctx() */ +/************************************************************************/ + +projCtx pj_get_ctx( projPJ pj ) + +{ + return pj->ctx; +} + +/************************************************************************/ +/* pj_set_ctx() */ +/* */ +/* Note we do not deallocate the old context! */ +/************************************************************************/ + +void pj_set_ctx( projPJ pj, projCtx ctx ) + +{ + pj->ctx = ctx; +} + +/************************************************************************/ +/* pj_get_default_ctx() */ +/************************************************************************/ + +projCtx pj_get_default_ctx() + +{ + pj_acquire_lock(); + + if( !default_context_initialized ) + { + default_context_initialized = 1; + default_context.last_errno = 0; + default_context.debug_level = PJ_LOG_NONE; + default_context.logger = pj_stderr_logger; + default_context.app_data = NULL; + + if( getenv("PROJ_DEBUG") != NULL ) + { + if( atoi(getenv("PROJ_DEBUG")) > 0 ) + default_context.debug_level = atoi(getenv("PROJ_DEBUG")); + else + default_context.debug_level = PJ_LOG_DEBUG_MINOR; + } + } + + pj_release_lock(); + + return &default_context; +} + +/************************************************************************/ +/* pj_ctx_alloc() */ +/************************************************************************/ + +projCtx pj_ctx_alloc() + +{ + projCtx ctx = (projCtx_t *) malloc(sizeof(projCtx_t)); + memcpy( ctx, pj_get_default_ctx(), sizeof(projCtx_t) ); + ctx->last_errno = 0; + + return ctx; +} + +/************************************************************************/ +/* pj_ctx_free() */ +/************************************************************************/ + +void pj_ctx_free( projCtx ctx ) + +{ + free( ctx ); +} + +/************************************************************************/ +/* pj_ctx_get_errno() */ +/************************************************************************/ + +int pj_ctx_get_errno( projCtx ctx ) + +{ + return ctx->last_errno; +} + +/************************************************************************/ +/* pj_ctx_set_errno() */ +/* */ +/* Also sets the global errno. */ +/************************************************************************/ + +void pj_ctx_set_errno( projCtx ctx, int new_errno ) + +{ + ctx->last_errno = new_errno; + if( new_errno != 0 ) + pj_errno = new_errno; +} + +/************************************************************************/ +/* pj_ctx_set_debug() */ +/************************************************************************/ + +void pj_ctx_set_debug( projCtx ctx, int new_debug ) + +{ + ctx->debug_level = new_debug; +} + +/************************************************************************/ +/* pj_ctx_set_logger() */ +/************************************************************************/ + +void pj_ctx_set_logger( projCtx ctx, void (*new_logger)(void*,int,const char*) ) + +{ + ctx->logger = new_logger; +} + +/************************************************************************/ +/* pj_ctx_set_app_data() */ +/************************************************************************/ + +void pj_ctx_set_app_data( projCtx ctx, void *new_app_data ) + +{ + ctx->app_data = new_app_data; +} + +/************************************************************************/ +/* pj_ctx_get_app_data() */ +/************************************************************************/ + +void *pj_ctx_get_app_data( projCtx ctx ) + +{ + return ctx->app_data; +} + + diff --git a/src/pj_datum_set.c b/src/pj_datum_set.c index c2b8e1bbb..2f24990d7 100644 --- a/src/pj_datum_set.c +++ b/src/pj_datum_set.c @@ -1,5 +1,5 @@ /****************************************************************************** - * $Id: pj_datum_set.c 1504 2009-01-06 02:11:57Z warmerdam $ + * $Id: pj_datum_set.c 1856 2010-06-11 03:26:04Z warmerdam $ * * Project: PROJ.4 * Purpose: Apply datum definition to PJ structure from initialization string. @@ -37,7 +37,7 @@ /* pj_datum_set() */ /************************************************************************/ -int pj_datum_set(paralist *pl, PJ *projdef) +int pj_datum_set(projCtx ctx, paralist *pl, PJ *projdef) { const char *name, *towgs84, *nadgrids; @@ -54,7 +54,7 @@ int pj_datum_set(paralist *pl, PJ *projdef) /* definition will last into the pj_ell_set() function called */ /* after this one. */ /* -------------------------------------------------------------------- */ - if( (name = pj_param(pl,"sdatum").s) != NULL ) + if( (name = pj_param(ctx, pl,"sdatum").s) != NULL ) { paralist *curr; const char *s; @@ -66,7 +66,7 @@ int pj_datum_set(paralist *pl, PJ *projdef) /* find the datum definition */ for (i = 0; (s = pj_datums[i].id) && strcmp(name, s) ; ++i) {} - if (!s) { pj_errno = -9; return 1; } + if (!s) { pj_ctx_set_errno(ctx, -9); return 1; } if( pj_datums[i].ellipse_id && strlen(pj_datums[i].ellipse_id) > 0 ) { @@ -84,7 +84,7 @@ int pj_datum_set(paralist *pl, PJ *projdef) /* -------------------------------------------------------------------- */ /* Check for nadgrids parameter. */ /* -------------------------------------------------------------------- */ - if( (nadgrids = pj_param(pl,"snadgrids").s) != NULL ) + if( (nadgrids = pj_param(ctx, pl,"snadgrids").s) != NULL ) { /* We don't actually save the value separately. It will continue to exist int he param list for use in pj_apply_gridshift.c */ @@ -95,7 +95,7 @@ int pj_datum_set(paralist *pl, PJ *projdef) /* -------------------------------------------------------------------- */ /* Check for towgs84 parameter. */ /* -------------------------------------------------------------------- */ - else if( (towgs84 = pj_param(pl,"stowgs84").s) != NULL ) + else if( (towgs84 = pj_param(ctx, pl,"stowgs84").s) != NULL ) { int parm_count = 0; const char *s; diff --git a/src/pj_datums.c b/src/pj_datums.c index be0bb8b07..973cc05bf 100644 --- a/src/pj_datums.c +++ b/src/pj_datums.c @@ -1,5 +1,5 @@ /****************************************************************************** - * $Id: pj_datums.c 1558 2009-04-02 18:25:58Z warmerdam $ + * $Id: pj_datums.c 2085 2011-08-07 22:17:18Z warmerdam $ * * Project: PROJ.4 * Purpose: Built in datum list. @@ -48,7 +48,7 @@ C_NAMESPACE_VAR struct PJ_DATUMS pj_datums[] = { "NAD27", "nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat", "clrk66", "North_American_Datum_1927", -"potsdam", "towgs84=606.0,23.0,413.0", "bessel", "Potsdam Rauenberg 1950 DHDN", +"potsdam", "towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7", "bessel", "Potsdam Rauenberg 1950 DHDN", "carthage", "towgs84=-263.0,6.0,431.0", "clark80", "Carthage 1934 Tunisia", "hermannskogel", "towgs84=653.0,-212.0,449.0", "bessel", "Hermannskogel", "ire65", "towgs84=482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15", "mod_airy", "Ireland 1965", diff --git a/src/pj_ell_set.c b/src/pj_ell_set.c index 989701ece..c0d4adcb1 100644 --- a/src/pj_ell_set.c +++ b/src/pj_ell_set.c @@ -7,76 +7,79 @@ #define RV4 .06944444444444444444 /* 5/72 */ #define RV6 .04243827160493827160 /* 55/1296 */ int /* initialize geographic shape parameters */ -pj_ell_set(paralist *pl, double *a, double *es) { +pj_ell_set(projCtx ctx, paralist *pl, double *a, double *es) { int i; double b=0.0, e; char *name; paralist *start = 0, *curr; - /* check for varying forms of ellipsoid input */ + /* clear any previous error */ + pj_ctx_set_errno(ctx,0); + + /* check for varying forms of ellipsoid input */ *a = *es = 0.; /* R takes precedence */ - if (pj_param(pl, "tR").i) - *a = pj_param(pl, "dR").f; + if (pj_param(NULL, pl, "tR").i) + *a = pj_param(NULL,pl, "dR").f; else { /* probable elliptical figure */ /* check if ellps present and temporarily append its values to pl */ - if (name = pj_param(pl, "sellps").s) { + if ((name = pj_param(NULL,pl, "sellps").s) != NULL) { char *s; for (start = pl; start && start->next ; start = start->next) ; curr = start; for (i = 0; (s = pj_ellps[i].id) && strcmp(name, s) ; ++i) ; - if (!s) { pj_errno = -9; return 1; } + if (!s) { pj_ctx_set_errno( ctx, -9); return 1; } curr = curr->next = pj_mkparam(pj_ellps[i].major); curr = curr->next = pj_mkparam(pj_ellps[i].ell); } - *a = pj_param(pl, "da").f; - if (pj_param(pl, "tes").i) /* eccentricity squared */ - *es = pj_param(pl, "des").f; - else if (pj_param(pl, "te").i) { /* eccentricity */ - e = pj_param(pl, "de").f; + *a = pj_param(NULL,pl, "da").f; + if (pj_param(NULL,pl, "tes").i) /* eccentricity squared */ + *es = pj_param(NULL,pl, "des").f; + else if (pj_param(NULL,pl, "te").i) { /* eccentricity */ + e = pj_param(NULL,pl, "de").f; *es = e * e; - } else if (pj_param(pl, "trf").i) { /* recip flattening */ - *es = pj_param(pl, "drf").f; + } else if (pj_param(NULL,pl, "trf").i) { /* recip flattening */ + *es = pj_param(NULL,pl, "drf").f; if (!*es) { - pj_errno = -10; + pj_ctx_set_errno( ctx, -10); goto bomb; } *es = 1./ *es; *es = *es * (2. - *es); - } else if (pj_param(pl, "tf").i) { /* flattening */ - *es = pj_param(pl, "df").f; + } else if (pj_param(NULL,pl, "tf").i) { /* flattening */ + *es = pj_param(NULL,pl, "df").f; *es = *es * (2. - *es); - } else if (pj_param(pl, "tb").i) { /* minor axis */ - b = pj_param(pl, "db").f; + } else if (pj_param(NULL,pl, "tb").i) { /* minor axis */ + b = pj_param(NULL,pl, "db").f; *es = 1. - (b * b) / (*a * *a); } /* else *es == 0. and sphere of radius *a */ if (!b) b = *a * sqrt(1. - *es); /* following options turn ellipsoid into equivalent sphere */ - if (pj_param(pl, "bR_A").i) { /* sphere--area of ellipsoid */ + if (pj_param(NULL,pl, "bR_A").i) { /* sphere--area of ellipsoid */ *a *= 1. - *es * (SIXTH + *es * (RA4 + *es * RA6)); *es = 0.; - } else if (pj_param(pl, "bR_V").i) { /* sphere--vol. of ellipsoid */ + } else if (pj_param(NULL,pl, "bR_V").i) { /* sphere--vol. of ellipsoid */ *a *= 1. - *es * (SIXTH + *es * (RV4 + *es * RV6)); *es = 0.; - } else if (pj_param(pl, "bR_a").i) { /* sphere--arithmetic mean */ + } else if (pj_param(NULL,pl, "bR_a").i) { /* sphere--arithmetic mean */ *a = .5 * (*a + b); *es = 0.; - } else if (pj_param(pl, "bR_g").i) { /* sphere--geometric mean */ + } else if (pj_param(NULL,pl, "bR_g").i) { /* sphere--geometric mean */ *a = sqrt(*a * b); *es = 0.; - } else if (pj_param(pl, "bR_h").i) { /* sphere--harmonic mean */ + } else if (pj_param(NULL,pl, "bR_h").i) { /* sphere--harmonic mean */ *a = 2. * *a * b / (*a + b); *es = 0.; - } else if ((i = pj_param(pl, "tR_lat_a").i) || /* sphere--arith. */ - pj_param(pl, "tR_lat_g").i) { /* or geom. mean at latitude */ + } else if ((i = pj_param(NULL,pl, "tR_lat_a").i) || /* sphere--arith. */ + pj_param(NULL,pl, "tR_lat_g").i) { /* or geom. mean at latitude */ double tmp; - tmp = sin(pj_param(pl, i ? "rR_lat_a" : "rR_lat_g").f); + tmp = sin(pj_param(NULL,pl, i ? "rR_lat_a" : "rR_lat_g").f); if (fabs(tmp) > HALFPI) { - pj_errno = -11; + pj_ctx_set_errno(ctx,-11); goto bomb; } tmp = 1. - *es * tmp * tmp; @@ -90,13 +93,13 @@ pj_ell_set(paralist *pl, double *a, double *es) { pj_dalloc(start->next); start->next = 0; } - if (pj_errno) + if (ctx->last_errno) return 1; } /* some remaining checks */ if (*es < 0.) - { pj_errno = -12; return 1; } + { pj_ctx_set_errno( ctx, -12); return 1; } if (*a <= 0.) - { pj_errno = -13; return 1; } + { pj_ctx_set_errno( ctx, -13); return 1; } return 0; } diff --git a/src/pj_factors.c b/src/pj_factors.c index ee48cfb70..6a4db92ec 100644 --- a/src/pj_factors.c +++ b/src/pj_factors.c @@ -13,10 +13,12 @@ pj_factors(LP lp, PJ *P, double h, struct FACTORS *fac) { /* check for forward and latitude or longitude overange */ if ((t = fabs(lp.phi)-HALFPI) > EPS || fabs(lp.lam) > 10.) { - pj_errno = -14; + pj_ctx_set_errno( P->ctx, -14); return 1; } else { /* proceed */ errno = pj_errno = 0; + P->ctx->last_errno = 0; + if (h < EPS) h = DEFAULT_H; if (fabs(lp.phi) > (HALFPI - h)) @@ -70,7 +72,7 @@ pj_factors(LP lp, PJ *P, double h, struct FACTORS *fac) { fac->s = (fac->der.y_p * fac->der.x_l - fac->der.x_p * fac->der.y_l) * r / cosphi; /* meridian-parallel angle theta prime */ - fac->thetap = aasin(fac->s / (fac->h * fac->k)); + fac->thetap = aasin(P->ctx,fac->s / (fac->h * fac->k)); /* Tissot ellips axis */ t = fac->k * fac->k + fac->h * fac->h; fac->a = sqrt(t + 2. * fac->s); @@ -78,7 +80,7 @@ pj_factors(LP lp, PJ *P, double h, struct FACTORS *fac) { fac->b = 0.5 * (fac->a - t); fac->a = 0.5 * (fac->a + t); /* omega */ - fac->omega = 2. * aasin((fac->a - fac->b)/(fac->a + fac->b)); + fac->omega = 2. * aasin(P->ctx,(fac->a - fac->b)/(fac->a + fac->b)); } return 0; } diff --git a/src/pj_fwd.c b/src/pj_fwd.c index 880a93198..b70b42401 100644 --- a/src/pj_fwd.c +++ b/src/pj_fwd.c @@ -11,9 +11,12 @@ pj_fwd(LP lp, PJ *P) { /* check for forward and latitude or longitude overange */ if ((t = fabs(lp.phi)-HALFPI) > EPS || fabs(lp.lam) > 10.) { xy.x = xy.y = HUGE_VAL; - pj_errno = -14; + pj_ctx_set_errno( P->ctx, -14); } else { /* proceed with projection */ - errno = pj_errno = 0; + P->ctx->last_errno = 0; + pj_errno = 0; + errno = 0; + if (fabs(t) <= EPS) lp.phi = lp.phi < 0. ? -HALFPI : HALFPI; else if (P->geoc) @@ -22,7 +25,7 @@ pj_fwd(LP lp, PJ *P) { if (!P->over) lp.lam = adjlon(lp.lam); /* adjust del longitude */ xy = (*P->fwd)(lp, P); /* project */ - if (pj_errno || (pj_errno = errno)) + if ( P->ctx->last_errno ) xy.x = xy.y = HUGE_VAL; /* adjust for major axis and easting/northings */ else { diff --git a/src/pj_gauss.c b/src/pj_gauss.c index ac794f20c..1d2e2ab10 100644 --- a/src/pj_gauss.c +++ b/src/pj_gauss.c @@ -4,7 +4,7 @@ ** Copyright (c) 2003 Gerald I. Evenden */ static const char -LIBPROJ_ID[] = "$Id: pj_gauss.c 1504 2009-01-06 02:11:57Z warmerdam $"; +LIBPROJ_ID[] = "$Id: pj_gauss.c 1856 2010-06-11 03:26:04Z warmerdam $"; /* ** Permission is hereby granted, free of charge, to any person obtaining ** a copy of this software and associated documentation files (the @@ -64,7 +64,7 @@ pj_gauss_ini(double e, double phi0, double *chi, double *rc) { return ((void *)en); } LP -pj_gauss(LP elp, const void *en) { +pj_gauss(projCtx ctx, LP elp, const void *en) { LP slp; slp.phi = 2. * atan( EN->K * @@ -74,7 +74,7 @@ pj_gauss(LP elp, const void *en) { return(slp); } LP -pj_inv_gauss(LP slp, const void *en) { +pj_inv_gauss(projCtx ctx, LP slp, const void *en) { LP elp; double num; int i; @@ -89,6 +89,6 @@ pj_inv_gauss(LP slp, const void *en) { } /* convergence failed */ if (!i) - pj_errno = -17; + pj_ctx_set_errno( ctx, -17 ); return (elp); } diff --git a/src/pj_gridinfo.c b/src/pj_gridinfo.c index 7a4612f1f..920c54736 100644 --- a/src/pj_gridinfo.c +++ b/src/pj_gridinfo.c @@ -1,5 +1,5 @@ /****************************************************************************** - * $Id: pj_gridinfo.c 1504 2009-01-06 02:11:57Z warmerdam $ + * $Id: pj_gridinfo.c 2121 2011-11-22 22:51:47Z warmerdam $ * * Project: PROJ.4 * Purpose: Functions for handling individual PJ_GRIDINFO's. Includes @@ -80,7 +80,7 @@ static void swap_words( unsigned char *data, int word_size, int word_count ) /* pj_gridinfo_free() */ /************************************************************************/ -void pj_gridinfo_free( PJ_GRIDINFO *gi ) +void pj_gridinfo_free( projCtx ctx, PJ_GRIDINFO *gi ) { if( gi == NULL ) @@ -93,7 +93,7 @@ void pj_gridinfo_free( PJ_GRIDINFO *gi ) for( child = gi->child; child != NULL; child=next) { next=child->next; - pj_gridinfo_free( child ); + pj_gridinfo_free( ctx, child ); } } @@ -115,30 +115,52 @@ void pj_gridinfo_free( PJ_GRIDINFO *gi ) /* stuff are loaded by pj_gridinfo_init(). */ /************************************************************************/ -int pj_gridinfo_load( PJ_GRIDINFO *gi ) +int pj_gridinfo_load( projCtx ctx, PJ_GRIDINFO *gi ) { if( gi == NULL || gi->ct == NULL ) return 0; /* -------------------------------------------------------------------- */ -/* ctable is currently loaded on initialization though there is */ -/* no real reason not to support delayed loading for it as well. */ +/* Original platform specific CTable format. */ /* -------------------------------------------------------------------- */ if( strcmp(gi->format,"ctable") == 0 ) { FILE *fid; int result; - fid = pj_open_lib( gi->filename, "rb" ); + fid = pj_open_lib( ctx, gi->filename, "rb" ); if( fid == NULL ) { - pj_errno = -38; + pj_ctx_set_errno( ctx, -38 ); return 0; } - result = nad_ctable_load( gi->ct, fid ); + result = nad_ctable_load( ctx, gi->ct, fid ); + + fclose( fid ); + + return result; + } + +/* -------------------------------------------------------------------- */ +/* CTable2 format. */ +/* -------------------------------------------------------------------- */ + else if( strcmp(gi->format,"ctable2") == 0 ) + { + FILE *fid; + int result; + + fid = pj_open_lib( ctx, gi->filename, "rb" ); + + if( fid == NULL ) + { + pj_ctx_set_errno( ctx, -38 ); + return 0; + } + + result = nad_ctable2_load( ctx, gi->ct, fid ); fclose( fid ); @@ -158,11 +180,11 @@ int pj_gridinfo_load( PJ_GRIDINFO *gi ) int row; FILE *fid; - fid = pj_open_lib( gi->filename, "rb" ); + fid = pj_open_lib( ctx, gi->filename, "rb" ); if( fid == NULL ) { - pj_errno = -38; + pj_ctx_set_errno( ctx, -38 ); return 0; } @@ -172,7 +194,7 @@ int pj_gridinfo_load( PJ_GRIDINFO *gi ) gi->ct->cvs = (FLP *) pj_malloc(gi->ct->lim.lam*gi->ct->lim.phi*sizeof(FLP)); if( row_buf == NULL || gi->ct->cvs == NULL ) { - pj_errno = -38; + pj_ctx_set_errno( ctx, -38 ); return 0; } @@ -187,7 +209,7 @@ int pj_gridinfo_load( PJ_GRIDINFO *gi ) { pj_dalloc( row_buf ); pj_dalloc( gi->ct->cvs ); - pj_errno = -38; + pj_ctx_set_errno( ctx, -38 ); return 0; } @@ -227,16 +249,14 @@ int pj_gridinfo_load( PJ_GRIDINFO *gi ) int row; FILE *fid; - if( getenv("PROJ_DEBUG") != NULL ) - { - fprintf( stderr, "NTv2 - loading grid %s\n", gi->ct->id ); - } + pj_log( ctx, PJ_LOG_DEBUG_MINOR, + "NTv2 - loading grid %s", gi->ct->id ); - fid = pj_open_lib( gi->filename, "rb" ); + fid = pj_open_lib( ctx, gi->filename, "rb" ); if( fid == NULL ) { - pj_errno = -38; + pj_ctx_set_errno( ctx, -38 ); return 0; } @@ -246,7 +266,7 @@ int pj_gridinfo_load( PJ_GRIDINFO *gi ) gi->ct->cvs = (FLP *) pj_malloc(gi->ct->lim.lam*gi->ct->lim.phi*sizeof(FLP)); if( row_buf == NULL || gi->ct->cvs == NULL ) { - pj_errno = -38; + pj_ctx_set_errno( ctx, -38 ); return 0; } @@ -262,7 +282,7 @@ int pj_gridinfo_load( PJ_GRIDINFO *gi ) pj_dalloc( row_buf ); pj_dalloc( gi->ct->cvs ); gi->ct->cvs = NULL; - pj_errno = -38; + pj_ctx_set_errno( ctx, -38 ); return 0; } @@ -291,6 +311,45 @@ int pj_gridinfo_load( PJ_GRIDINFO *gi ) return 1; } +/* -------------------------------------------------------------------- */ +/* GTX format. */ +/* -------------------------------------------------------------------- */ + else if( strcmp(gi->format,"gtx") == 0 ) + { + int words = gi->ct->lim.lam * gi->ct->lim.phi; + FILE *fid; + + fid = pj_open_lib( ctx, gi->filename, "rb" ); + + if( fid == NULL ) + { + pj_ctx_set_errno( ctx, -38 ); + return 0; + } + + fseek( fid, gi->grid_offset, SEEK_SET ); + + gi->ct->cvs = (FLP *) pj_malloc(words*sizeof(float)); + if( gi->ct->cvs == NULL ) + { + pj_ctx_set_errno( ctx, -38 ); + return 0; + } + + if( fread( gi->ct->cvs, sizeof(float), words, fid ) != words ) + { + pj_dalloc( gi->ct->cvs ); + gi->ct->cvs = NULL; + return 0; + } + + if( IS_LSB ) + swap_words( (unsigned char *) gi->ct->cvs, 4, words ); + + fclose( fid ); + return 1; + } + else { return 0; @@ -303,7 +362,7 @@ int pj_gridinfo_load( PJ_GRIDINFO *gi ) /* Load a ntv2 (.gsb) file. */ /************************************************************************/ -static int pj_gridinfo_init_ntv2( FILE *fid, PJ_GRIDINFO *gilist ) +static int pj_gridinfo_init_ntv2( projCtx ctx, FILE *fid, PJ_GRIDINFO *gilist ) { unsigned char header[11*16]; @@ -313,9 +372,9 @@ static int pj_gridinfo_init_ntv2( FILE *fid, PJ_GRIDINFO *gilist ) assert( sizeof(double) == 8 ); if( sizeof(int) != 4 || sizeof(double) != 8 ) { - fprintf( stderr, - "basic types of inappropraiate size in pj_gridinfo_init_ntv2()\n" ); - pj_errno = -38; + pj_log( ctx, PJ_LOG_ERROR, + "basic types of inappropraiate size in pj_gridinfo_init_ntv2()" ); + pj_ctx_set_errno( ctx, -38 ); return 0; } @@ -324,7 +383,7 @@ static int pj_gridinfo_init_ntv2( FILE *fid, PJ_GRIDINFO *gilist ) /* -------------------------------------------------------------------- */ if( fread( header, sizeof(header), 1, fid ) != 1 ) { - pj_errno = -38; + pj_ctx_set_errno( ctx, -38 ); return 0; } @@ -362,13 +421,13 @@ static int pj_gridinfo_init_ntv2( FILE *fid, PJ_GRIDINFO *gilist ) /* -------------------------------------------------------------------- */ if( fread( header, sizeof(header), 1, fid ) != 1 ) { - pj_errno = -38; + pj_ctx_set_errno( ctx, -38 ); return 0; } if( strncmp((const char *) header,"SUB_NAME",8) != 0 ) { - pj_errno = -38; + pj_ctx_set_errno( ctx, -38 ); return 0; } @@ -405,14 +464,13 @@ static int pj_gridinfo_init_ntv2( FILE *fid, PJ_GRIDINFO *gilist ) ct->lim.lam = (int) (fabs(ur.lam-ct->ll.lam)/ct->del.lam + 0.5) + 1; ct->lim.phi = (int) (fabs(ur.phi-ct->ll.phi)/ct->del.phi + 0.5) + 1; - if( getenv("PROJ_DEBUG") != NULL ) - fprintf( stderr, - "NTv2 %s %dx%d: LL=(%.9g,%.9g) UR=(%.9g,%.9g)\n", - ct->id, - ct->lim.lam, ct->lim.phi, - ct->ll.lam/3600.0, ct->ll.phi/3600.0, - ur.lam/3600.0, ur.phi/3600.0 ); - + pj_log( ctx, PJ_LOG_DEBUG_MINOR, + "NTv2 %s %dx%d: LL=(%.9g,%.9g) UR=(%.9g,%.9g)\n", + ct->id, + ct->lim.lam, ct->lim.phi, + ct->ll.lam/3600.0, ct->ll.phi/3600.0, + ur.lam/3600.0, ur.phi/3600.0 ); + ct->ll.lam *= DEG_TO_RAD/3600.0; ct->ll.phi *= DEG_TO_RAD/3600.0; ct->del.lam *= DEG_TO_RAD/3600.0; @@ -421,11 +479,11 @@ static int pj_gridinfo_init_ntv2( FILE *fid, PJ_GRIDINFO *gilist ) memcpy( &gs_count, header + 8 + 16*10, 4 ); if( gs_count != ct->lim.lam * ct->lim.phi ) { - fprintf( stderr, - "GS_COUNT(%d) does not match expected cells (%dx%d=%d)\n", - gs_count, ct->lim.lam, ct->lim.phi, - ct->lim.lam * ct->lim.phi ); - pj_errno = -38; + pj_log( ctx, PJ_LOG_ERROR, + "GS_COUNT(%d) does not match expected cells (%dx%d=%d)\n", + gs_count, ct->lim.lam, ct->lim.phi, + ct->lim.lam * ct->lim.phi ); + pj_ctx_set_errno( ctx, -38 ); return 0; } @@ -476,10 +534,10 @@ static int pj_gridinfo_init_ntv2( FILE *fid, PJ_GRIDINFO *gilist ) if( gp == NULL ) { - if( getenv("PROJ_DEBUG") != NULL ) - fprintf( stderr, "pj_gridinfo_init_ntv2(): " - "failed to find parent %8.8s for %s.\n", - (const char *) header+24, gi->ct->id ); + pj_log( ctx, PJ_LOG_ERROR, + "pj_gridinfo_init_ntv2(): " + "failed to find parent %8.8s for %s.\n", + (const char *) header+24, gi->ct->id ); for( lnk = gp; lnk->next != NULL; lnk = lnk->next ) {} lnk->next = gi; @@ -510,7 +568,7 @@ static int pj_gridinfo_init_ntv2( FILE *fid, PJ_GRIDINFO *gilist ) /* Load an NTv1 style Canadian grid shift file. */ /************************************************************************/ -static int pj_gridinfo_init_ntv1( FILE * fid, PJ_GRIDINFO *gi ) +static int pj_gridinfo_init_ntv1( projCtx ctx, FILE * fid, PJ_GRIDINFO *gi ) { unsigned char header[176]; @@ -521,9 +579,9 @@ static int pj_gridinfo_init_ntv1( FILE * fid, PJ_GRIDINFO *gi ) assert( sizeof(double) == 8 ); if( sizeof(int) != 4 || sizeof(double) != 8 ) { - fprintf( stderr, - "basic types of inappropraiate size in nad_load_ntv1()\n" ); - pj_errno = -38; + pj_log( ctx, PJ_LOG_ERROR, + "basic types of inappropraiate size in nad_load_ntv1()" ); + pj_ctx_set_errno( ctx, -38 ); return 0; } @@ -532,7 +590,7 @@ static int pj_gridinfo_init_ntv1( FILE * fid, PJ_GRIDINFO *gi ) /* -------------------------------------------------------------------- */ if( fread( header, sizeof(header), 1, fid ) != 1 ) { - pj_errno = -38; + pj_ctx_set_errno( ctx, -38 ); return 0; } @@ -552,8 +610,9 @@ static int pj_gridinfo_init_ntv1( FILE * fid, PJ_GRIDINFO *gi ) if( *((int *) (header+8)) != 12 ) { - pj_errno = -38; - printf("NTv1 grid shift file has wrong record count, corrupt?\n"); + pj_log( ctx, PJ_LOG_ERROR, + "NTv1 grid shift file has wrong record count, corrupt?" ); + pj_ctx_set_errno( ctx, -38 ); return 0; } @@ -572,11 +631,10 @@ static int pj_gridinfo_init_ntv1( FILE * fid, PJ_GRIDINFO *gi ) ct->lim.lam = (int) (fabs(ur.lam-ct->ll.lam)/ct->del.lam + 0.5) + 1; ct->lim.phi = (int) (fabs(ur.phi-ct->ll.phi)/ct->del.phi + 0.5) + 1; - if( getenv("PROJ_DEBUG") != NULL ) - fprintf( stderr, - "NTv1 %dx%d: LL=(%.9g,%.9g) UR=(%.9g,%.9g)\n", - ct->lim.lam, ct->lim.phi, - ct->ll.lam, ct->ll.phi, ur.lam, ur.phi ); + pj_log( ctx, PJ_LOG_DEBUG_MINOR, + "NTv1 %dx%d: LL=(%.9g,%.9g) UR=(%.9g,%.9g)", + ct->lim.lam, ct->lim.phi, + ct->ll.lam, ct->ll.phi, ur.lam, ur.phi ); ct->ll.lam *= DEG_TO_RAD; ct->ll.phi *= DEG_TO_RAD; @@ -591,6 +649,109 @@ static int pj_gridinfo_init_ntv1( FILE * fid, PJ_GRIDINFO *gi ) return 1; } +/************************************************************************/ +/* pj_gridinfo_init_gtx() */ +/* */ +/* Load a NOAA .gtx vertical datum shift file. */ +/************************************************************************/ + +static int pj_gridinfo_init_gtx( projCtx ctx, FILE * fid, PJ_GRIDINFO *gi ) + +{ + unsigned char header[40]; + struct CTABLE *ct; + double xorigin,yorigin,xstep,ystep; + int rows, columns; + + assert( sizeof(int) == 4 ); + assert( sizeof(double) == 8 ); + if( sizeof(int) != 4 || sizeof(double) != 8 ) + { + pj_log( ctx, PJ_LOG_ERROR, + "basic types of inappropraiate size in nad_load_gtx()" ); + pj_ctx_set_errno( ctx, -38 ); + return 0; + } + +/* -------------------------------------------------------------------- */ +/* Read the header. */ +/* -------------------------------------------------------------------- */ + if( fread( header, sizeof(header), 1, fid ) != 1 ) + { + pj_ctx_set_errno( ctx, -38 ); + return 0; + } + +/* -------------------------------------------------------------------- */ +/* Regularize fields of interest and extract. */ +/* -------------------------------------------------------------------- */ + if( IS_LSB ) + { + swap_words( header+0, 8, 4 ); + swap_words( header+32, 4, 2 ); + } + + memcpy( &yorigin, header+0, 8 ); + memcpy( &xorigin, header+8, 8 ); + memcpy( &ystep, header+16, 8 ); + memcpy( &xstep, header+24, 8 ); + + memcpy( &rows, header+32, 4 ); + memcpy( &columns, header+36, 4 ); + + if( xorigin < -360 || xorigin > 360 + || yorigin < -90 || yorigin > 90 ) + { + pj_log( ctx, PJ_LOG_ERROR, + "gtx file header has invalid extents, corrupt?"); + pj_ctx_set_errno( ctx, -38 ); + return 0; + } + +/* -------------------------------------------------------------------- */ +/* Fill in CTABLE structure. */ +/* -------------------------------------------------------------------- */ + ct = (struct CTABLE *) pj_malloc(sizeof(struct CTABLE)); + strcpy( ct->id, "GTX Vertical Grid Shift File" ); + + ct->ll.lam = xorigin; + ct->ll.phi = yorigin; + ct->del.lam = xstep; + ct->del.phi = ystep; + ct->lim.lam = columns; + ct->lim.phi = rows; + + /* some GTX files come in 0-360 and we shift them back into the + expected -180 to 180 range if possible. This does not solve + problems with grids spanning the dateline. */ + if( ct->ll.lam >= 180.0 ) + ct->ll.lam -= 360.0; + + if( ct->ll.lam >= 0.0 && ct->ll.lam + ct->del.lam * ct->lim.lam > 180.0 ) + { + pj_log( ctx, PJ_LOG_DEBUG_MAJOR, + "This GTX spans the dateline! This will cause problems." ); + } + + pj_log( ctx, PJ_LOG_DEBUG_MINOR, + "GTX %dx%d: LL=(%.9g,%.9g) UR=(%.9g,%.9g)", + ct->lim.lam, ct->lim.phi, + ct->ll.lam, ct->ll.phi, + ct->ll.lam + (columns-1)*xstep, ct->ll.phi + (rows-1)*ystep); + + ct->ll.lam *= DEG_TO_RAD; + ct->ll.phi *= DEG_TO_RAD; + ct->del.lam *= DEG_TO_RAD; + ct->del.phi *= DEG_TO_RAD; + ct->cvs = NULL; + + gi->ct = ct; + gi->grid_offset = 40; + gi->format = "gtx"; + + return 1; +} + /************************************************************************/ /* pj_gridinfo_init() */ /* */ @@ -600,7 +761,7 @@ static int pj_gridinfo_init_ntv1( FILE * fid, PJ_GRIDINFO *gi ) /* applications. */ /************************************************************************/ -PJ_GRIDINFO *pj_gridinfo_init( const char *gridname ) +PJ_GRIDINFO *pj_gridinfo_init( projCtx ctx, const char *gridname ) { char fname[MAX_PATH_FILENAME+1]; @@ -609,6 +770,7 @@ PJ_GRIDINFO *pj_gridinfo_init( const char *gridname ) char header[160]; errno = pj_errno = 0; + ctx->last_errno = 0; /* -------------------------------------------------------------------- */ /* Initialize a GRIDINFO with stub info we would use if it */ @@ -628,8 +790,8 @@ PJ_GRIDINFO *pj_gridinfo_init( const char *gridname ) /* Open the file using the usual search rules. */ /* -------------------------------------------------------------------- */ strcpy(fname, gridname); - if (!(fp = pj_open_lib(fname, "rb"))) { - pj_errno = errno; + if (!(fp = pj_open_lib(ctx, fname, "rb"))) { + ctx->last_errno = 0; /* don't treat as a persistent error */ return gilist; } @@ -641,7 +803,7 @@ PJ_GRIDINFO *pj_gridinfo_init( const char *gridname ) if( fread( header, sizeof(header), 1, fp ) != 1 ) { fclose( fp ); - pj_errno = -38; + pj_ctx_set_errno( ctx, -38 ); return gilist; } @@ -654,30 +816,52 @@ PJ_GRIDINFO *pj_gridinfo_init( const char *gridname ) && strncmp(header + 96, "W GRID", 6) == 0 && strncmp(header + 144, "TO NAD83 ", 16) == 0 ) { - pj_gridinfo_init_ntv1( fp, gilist ); + pj_gridinfo_init_ntv1( ctx, fp, gilist ); } else if( strncmp(header + 0, "NUM_OREC", 8) == 0 && strncmp(header + 48, "GS_TYPE", 7) == 0 ) { - pj_gridinfo_init_ntv2( fp, gilist ); + pj_gridinfo_init_ntv2( ctx, fp, gilist ); } - + + else if( strlen(gridname) > 4 + && (strcmp(gridname+strlen(gridname)-3,"gtx") == 0 + || strcmp(gridname+strlen(gridname)-3,"GTX") == 0) ) + { + pj_gridinfo_init_gtx( ctx, fp, gilist ); + } + + else if( strncmp(header+0,"CTABLE V2",9) == 0 ) + { + struct CTABLE *ct = nad_ctable2_init( ctx, fp ); + + gilist->format = "ctable2"; + gilist->ct = ct; + + pj_log( ctx, PJ_LOG_DEBUG_MAJOR, + "Ctable2 %s %dx%d: LL=(%.9g,%.9g) UR=(%.9g,%.9g)\n", + ct->id, + ct->lim.lam, ct->lim.phi, + ct->ll.lam * RAD_TO_DEG, ct->ll.phi * RAD_TO_DEG, + (ct->ll.lam + (ct->lim.lam-1)*ct->del.lam) * RAD_TO_DEG, + (ct->ll.phi + (ct->lim.phi-1)*ct->del.phi) * RAD_TO_DEG ); + } + else { - struct CTABLE *ct = nad_ctable_init( fp ); + struct CTABLE *ct = nad_ctable_init( ctx, fp ); gilist->format = "ctable"; gilist->ct = ct; - if( getenv("PROJ_DEBUG") != NULL ) - fprintf( stderr, - "Ctable %s %dx%d: LL=(%.9g,%.9g) UR=(%.9g,%.9g)\n", - ct->id, - ct->lim.lam, ct->lim.phi, - ct->ll.lam * RAD_TO_DEG, ct->ll.phi * RAD_TO_DEG, - (ct->ll.lam + (ct->lim.lam-1)*ct->del.lam) * RAD_TO_DEG, - (ct->ll.phi + (ct->lim.phi-1)*ct->del.phi) * RAD_TO_DEG ); + pj_log( ctx, PJ_LOG_DEBUG_MAJOR, + "Ctable %s %dx%d: LL=(%.9g,%.9g) UR=(%.9g,%.9g)\n", + ct->id, + ct->lim.lam, ct->lim.phi, + ct->ll.lam * RAD_TO_DEG, ct->ll.phi * RAD_TO_DEG, + (ct->ll.lam + (ct->lim.lam-1)*ct->del.lam) * RAD_TO_DEG, + (ct->ll.phi + (ct->lim.phi-1)*ct->del.phi) * RAD_TO_DEG ); } fclose(fp); diff --git a/src/pj_gridlist.c b/src/pj_gridlist.c index 1d141641d..dae859aea 100644 --- a/src/pj_gridlist.c +++ b/src/pj_gridlist.c @@ -1,5 +1,5 @@ /****************************************************************************** - * $Id: pj_gridlist.c 1634 2009-09-24 02:40:46Z warmerdam $ + * $Id: pj_gridlist.c 1990 2011-03-28 18:06:43Z warmerdam $ * * Project: PROJ.4 * Purpose: Code to manage the list of currently loaded (cached) PJ_GRIDINFOs @@ -46,13 +46,6 @@ static PJ_GRIDINFO *grid_list = NULL; -/* used only by pj_load_nadgrids() and pj_deallocate_grids() */ - -static int last_nadgrids_max = 0; -static int last_nadgrids_count = 0; -static PJ_GRIDINFO **last_nadgrids_list = NULL; -static char *last_nadgrids = NULL; - /************************************************************************/ /* pj_deallocate_grids() */ /* */ @@ -68,19 +61,7 @@ void pj_deallocate_grids() grid_list = grid_list->next; item->next = NULL; - pj_gridinfo_free( item ); - } - - if( last_nadgrids != NULL ) - { - pj_dalloc( last_nadgrids ); - last_nadgrids = NULL; - - pj_dalloc( last_nadgrids_list ); - last_nadgrids_list = NULL; - - last_nadgrids_count = 0; - last_nadgrids_max = 0; + pj_gridinfo_free( pj_get_default_ctx(), item ); } } @@ -91,10 +72,14 @@ void pj_deallocate_grids() /* last_nadgrids_list. */ /************************************************************************/ -static int pj_gridlist_merge_gridfile( const char *gridname ) +static int pj_gridlist_merge_gridfile( projCtx ctx, + const char *gridname, + PJ_GRIDINFO ***p_gridlist, + int *p_gridcount, + int *p_gridmax ) { - int i, got_match=0; + int got_match=0; PJ_GRIDINFO *this_grid, *tail = NULL; /* -------------------------------------------------------------------- */ @@ -113,26 +98,26 @@ static int pj_gridlist_merge_gridfile( const char *gridname ) return 0; /* do we need to grow the list? */ - if( last_nadgrids_count >= last_nadgrids_max - 2 ) + if( *p_gridcount >= *p_gridmax - 2 ) { PJ_GRIDINFO **new_list; - int new_max = last_nadgrids_max + 20; + int new_max = *p_gridmax + 20; new_list = (PJ_GRIDINFO **) pj_malloc(sizeof(void*) * new_max); - if( last_nadgrids_list != NULL ) + if( *p_gridlist != NULL ) { - memcpy( new_list, last_nadgrids_list, - sizeof(void*) * last_nadgrids_max ); - pj_dalloc( last_nadgrids_list ); + memcpy( new_list, *p_gridlist, + sizeof(void*) * (*p_gridmax) ); + pj_dalloc( *p_gridlist ); } - last_nadgrids_list = new_list; - last_nadgrids_max = new_max; + *p_gridlist = new_list; + *p_gridmax = new_max; } /* add to the list */ - last_nadgrids_list[last_nadgrids_count++] = this_grid; - last_nadgrids_list[last_nadgrids_count] = NULL; + (*p_gridlist)[(*p_gridcount)++] = this_grid; + (*p_gridlist)[*p_gridcount] = NULL; } tail = this_grid; @@ -144,7 +129,7 @@ static int pj_gridlist_merge_gridfile( const char *gridname ) /* -------------------------------------------------------------------- */ /* Try to load the named grid. */ /* -------------------------------------------------------------------- */ - this_grid = pj_gridinfo_init( gridname ); + this_grid = pj_gridinfo_init( ctx, gridname ); if( this_grid == NULL ) { @@ -161,7 +146,8 @@ static int pj_gridlist_merge_gridfile( const char *gridname ) /* -------------------------------------------------------------------- */ /* Recurse to add the grid now that it is loaded. */ /* -------------------------------------------------------------------- */ - return pj_gridlist_merge_gridfile( gridname ); + return pj_gridlist_merge_gridfile( ctx, gridname, p_gridlist, + p_gridcount, p_gridmax ); } /************************************************************************/ @@ -174,39 +160,18 @@ static int pj_gridlist_merge_gridfile( const char *gridname ) /* the cost of building the list of tables each time. */ /************************************************************************/ -PJ_GRIDINFO **pj_gridlist_from_nadgrids( const char *nadgrids, int *grid_count) +PJ_GRIDINFO **pj_gridlist_from_nadgrids( projCtx ctx, const char *nadgrids, + int *grid_count) { const char *s; + PJ_GRIDINFO **gridlist = NULL; + int grid_max = 0; pj_errno = 0; *grid_count = 0; pj_acquire_lock(); - if( last_nadgrids != NULL - && strcmp(nadgrids,last_nadgrids) == 0 ) - { - PJ_GRIDINFO **ret = last_nadgrids_list; - *grid_count = last_nadgrids_count; - if( *grid_count == 0 ) - pj_errno = -38; - - pj_release_lock(); - return ret; - } - -/* -------------------------------------------------------------------- */ -/* Free old one, if any, and make space for new list. */ -/* -------------------------------------------------------------------- */ - if( last_nadgrids != NULL ) - { - pj_dalloc(last_nadgrids); - } - - last_nadgrids = (char *) pj_malloc(strlen(nadgrids)+1); - strcpy( last_nadgrids, nadgrids ); - - last_nadgrids_count = 0; /* -------------------------------------------------------------------- */ /* Loop processing names out of nadgrids one at a time. */ @@ -227,9 +192,9 @@ PJ_GRIDINFO **pj_gridlist_from_nadgrids( const char *nadgrids, int *grid_count) s[end_char] != '\0' && s[end_char] != ','; end_char++ ) {} - if( end_char > sizeof(name) ) + if( end_char >= sizeof(name) ) { - pj_errno = -38; + pj_ctx_set_errno( ctx, -38 ); pj_release_lock(); return NULL; } @@ -241,9 +206,11 @@ PJ_GRIDINFO **pj_gridlist_from_nadgrids( const char *nadgrids, int *grid_count) if( *s == ',' ) s++; - if( !pj_gridlist_merge_gridfile( name ) && required ) + if( !pj_gridlist_merge_gridfile( ctx, name, &gridlist, grid_count, + &grid_max) + && required ) { - pj_errno = -38; + pj_ctx_set_errno( ctx, -38 ); pj_release_lock(); return NULL; } @@ -251,16 +218,7 @@ PJ_GRIDINFO **pj_gridlist_from_nadgrids( const char *nadgrids, int *grid_count) pj_errno = 0; } - if( last_nadgrids_count > 0 ) - { - PJ_GRIDINFO **ret = last_nadgrids_list; - *grid_count = last_nadgrids_count; - pj_release_lock(); - return ret; - } - else - { - pj_release_lock(); - return NULL; - } + pj_release_lock(); + + return gridlist; } diff --git a/src/pj_init.c b/src/pj_init.c index 4c284b00f..db97ab2c5 100644 --- a/src/pj_init.c +++ b/src/pj_init.c @@ -1,5 +1,5 @@ /****************************************************************************** - * $Id: pj_init.c,v 1.19 2007/11/26 00:21:59 fwarmerdam Exp $ + * $Id: pj_init.c 2117 2011-11-14 00:22:03Z warmerdam $ * * Project: PROJ.4 * Purpose: Initialize projection object from string definition. Includes @@ -27,70 +27,22 @@ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. - ****************************************************************************** - * - * $Log: pj_init.c,v $ - * Revision 1.19 2007/11/26 00:21:59 fwarmerdam - * Modified PJ structure to hold a_orig, es_orig, ellipsoid definition before - * adjustment for spherical projections. - * Modified pj_datum_transform() to use the original ellipsoid parameters, - * not the ones adjusted for spherical projections. - * Modified pj_datum_transform() to not attempt any datum shift via - * geocentric coordinates if the source *or* destination are raw ellipsoids - * (ie. PJD_UNKNOWN). All per PROJ bug #1602, GDAL bug #2025. - * - * Revision 1.18 2006/10/12 21:04:39 fwarmerdam - * Added experimental +lon_wrap argument to set a "center point" for - * longitude wrapping of longitude values coming out of pj_transform(). - * - * Revision 1.17 2006/09/22 23:06:24 fwarmerdam - * remote static start variable in pj_init (bug 1283) - * - * Revision 1.16 2004/09/08 15:23:37 warmerda - * added new error for unknown prime meridians - * - * Revision 1.15 2004/05/05 01:45:41 warmerda - * Made sword even longer. - * - * Revision 1.14 2004/05/05 01:45:00 warmerda - * Make sword buffer larger so long +towgs84 parameters don't get split. - * - * Revision 1.13 2003/09/16 03:46:21 warmerda - * dont use default ellps if any earth model info is set: bug 386 - * - * Revision 1.12 2003/08/21 02:15:59 warmerda - * improve MAX_ARG checking - * - * Revision 1.11 2003/06/09 21:23:16 warmerda - * ensure start is initialized at very beginning of pj_init() - * - * Revision 1.10 2003/03/16 16:38:24 warmerda - * Modified get_opt() to terminate reading the definition when a new - * definition (a word starting with '<') is encountered, in addition to when - * the definition terminator '<>' is encountered, so that unterminated - * definitions like those in the distributed esri file will work properly. - * http://bugzilla.remotesensing.org/show_bug.cgi?id=302 - * - * Revision 1.9 2002/12/14 20:15:02 warmerda - * added geocentric support, updated headers - * - */ + *****************************************************************************/ #define PJ_LIB__ #include #include #include #include +#include -PJ_CVSID("$Id: pj_init.c,v 1.19 2007/11/26 00:21:59 fwarmerdam Exp $"); - -extern FILE *pj_open_lib(char *, char *); +PJ_CVSID("$Id: pj_init.c 2117 2011-11-14 00:22:03Z warmerdam $"); /************************************************************************/ /* get_opt() */ /************************************************************************/ static paralist * -get_opt(paralist **start, FILE *fid, char *name, paralist *next) { +get_opt(projCtx ctx, paralist **start, FILE *fid, char *name, paralist *next) { char sword[302], *word = sword+1; int first = 1, len, c; @@ -107,16 +59,16 @@ get_opt(paralist **start, FILE *fid, char *name, paralist *next) { while((c = fgetc(fid)) != EOF && c != '\n') ; break; } - } else if (!first && !pj_param(*start, sword).i) { + } else if (!first && !pj_param(ctx, *start, sword).i) { /* don't default ellipse if datum, ellps or any earth model information is set. */ if( strncmp(word,"ellps=",6) != 0 - || (!pj_param(*start, "tdatum").i - && !pj_param(*start, "tellps").i - && !pj_param(*start, "ta").i - && !pj_param(*start, "tb").i - && !pj_param(*start, "trf").i - && !pj_param(*start, "tf").i) ) + || (!pj_param(ctx, *start, "tdatum").i + && !pj_param(ctx, *start, "tellps").i + && !pj_param(ctx, *start, "ta").i + && !pj_param(ctx, *start, "tb").i + && !pj_param(ctx, *start, "trf").i + && !pj_param(ctx, *start, "tf").i) ) { next = next->next = pj_mkparam(word); } @@ -132,40 +84,70 @@ get_opt(paralist **start, FILE *fid, char *name, paralist *next) { /* get_defaults() */ /************************************************************************/ static paralist * -get_defaults(paralist **start, paralist *next, char *name) { - FILE *fid; - - if (fid = pj_open_lib("proj_def.dat", "rt")) { - next = get_opt(start, fid, "general", next); - rewind(fid); - next = get_opt(start, fid, name, next); - (void)fclose(fid); - } - if (errno) - errno = 0; /* don't care if can't open file */ - return next; +get_defaults(projCtx ctx, paralist **start, paralist *next, char *name) { + FILE *fid; + + if ( (fid = pj_open_lib(ctx,"proj_def.dat", "rt")) != NULL) { + next = get_opt(ctx, start, fid, "general", next); + rewind(fid); + next = get_opt(ctx, start, fid, name, next); + (void)fclose(fid); + } + if (errno) + errno = 0; /* don't care if can't open file */ + ctx->last_errno = 0; + + return next; } /************************************************************************/ /* get_init() */ /************************************************************************/ static paralist * -get_init(paralist **start, paralist *next, char *name) { - char fname[MAX_PATH_FILENAME+ID_TAG_MAX+3], *opt; - FILE *fid; - - (void)strncpy(fname, name, MAX_PATH_FILENAME + ID_TAG_MAX + 1); - if (opt = strrchr(fname, ':')) - *opt++ = '\0'; - else { pj_errno = -3; return(0); } - if (fid = pj_open_lib(fname, "rt")) - next = get_opt(start, fid, opt, next); - else - return(0); - (void)fclose(fid); - if (errno == 25) - errno = 0; /* unknown problem with some sys errno<-25 */ - return next; +get_init(projCtx ctx, paralist **start, paralist *next, char *name) { + char fname[MAX_PATH_FILENAME+ID_TAG_MAX+3], *opt; + FILE *fid; + paralist *init_items = NULL; + const paralist *orig_next = next; + + (void)strncpy(fname, name, MAX_PATH_FILENAME + ID_TAG_MAX + 1); + + /* + ** Search for file/key pair in cache + */ + + init_items = pj_search_initcache( name ); + if( init_items != NULL ) + { + next->next = init_items; + while( next->next != NULL ) + next = next->next; + return next; + } + + /* + ** Otherwise we try to open the file and search for it. + */ + if ((opt = strrchr(fname, ':')) != NULL) + *opt++ = '\0'; + else { pj_ctx_set_errno(ctx,-3); return NULL; } + + if ( (fid = pj_open_lib(ctx,fname, "rt")) != NULL) + next = get_opt(ctx, start, fid, opt, next); + else + return NULL; + (void)fclose(fid); + if (errno == 25) + errno = 0; /* unknown problem with some sys errno<-25 */ + + /* + ** If we seem to have gotten a result, insert it into the + ** init file cache. + */ + if( next != NULL && next != orig_next ) + pj_insert_initcache( name, orig_next->next ); + + return next; } /************************************************************************/ @@ -179,12 +161,18 @@ get_init(paralist **start, paralist *next, char *name) { PJ * pj_init_plus( const char *definition ) +{ + return pj_init_plus_ctx( pj_get_default_ctx(), definition ); +} + +PJ * +pj_init_plus_ctx( projCtx ctx, const char *definition ) { #define MAX_ARG 200 char *argv[MAX_ARG]; char *defn_copy; int argc = 0, i; - PJ *result; + PJ *result; /* make a copy that we can manipulate */ defn_copy = (char *) pj_malloc( strlen(definition)+1 ); @@ -201,7 +189,7 @@ pj_init_plus( const char *definition ) { if( argc+1 == MAX_ARG ) { - pj_errno = -44; + pj_ctx_set_errno( ctx, -44 ); return NULL; } @@ -221,7 +209,7 @@ pj_init_plus( const char *definition ) } /* perform actual initialization */ - result = pj_init( argc, argv ); + result = pj_init_ctx( ctx, argc, argv ); pj_dalloc( defn_copy ); @@ -239,165 +227,238 @@ pj_init_plus( const char *definition ) PJ * pj_init(int argc, char **argv) { - char *s, *name; - paralist *start = NULL; - PJ *(*proj)(PJ *); - paralist *curr; - int i; - PJ *PIN = 0; - - errno = pj_errno = 0; - start = NULL; - - /* put arguments into internal linked list */ - if (argc <= 0) { pj_errno = -1; goto bum_call; } - for (i = 0; i < argc; ++i) - if (i) - curr = curr->next = pj_mkparam(argv[i]); - else - start = curr = pj_mkparam(argv[i]); - if (pj_errno) goto bum_call; - - /* check if +init present */ - if (pj_param(start, "tinit").i) { - paralist *last = curr; - - if (!(curr = get_init(&start, curr, pj_param(start, "sinit").s))) - goto bum_call; - if (curr == last) { pj_errno = -2; goto bum_call; } - } - - /* find projection selection */ - if (!(name = pj_param(start, "sproj").s)) - { pj_errno = -4; goto bum_call; } - for (i = 0; (s = pj_list[i].id) && strcmp(name, s) ; ++i) ; - if (!s) { pj_errno = -5; goto bum_call; } - - /* set defaults, unless inhibited */ - if (!pj_param(start, "bno_defs").i) - curr = get_defaults(&start, curr, name); - proj = (PJ *(*)(PJ *)) pj_list[i].proj; - - /* allocate projection structure */ - if (!(PIN = (*proj)(0))) goto bum_call; - PIN->params = start; - PIN->is_latlong = 0; - PIN->is_geocent = 0; - PIN->long_wrap_center = 0.0; - - /* set datum parameters */ - if (pj_datum_set(start, PIN)) goto bum_call; - - /* set ellipsoid/sphere parameters */ - if (pj_ell_set(start, &PIN->a, &PIN->es)) goto bum_call; - - PIN->a_orig = PIN->a; - PIN->es_orig = PIN->es; - - PIN->e = sqrt(PIN->es); - PIN->ra = 1. / PIN->a; - PIN->one_es = 1. - PIN->es; - if (PIN->one_es == 0.) { pj_errno = -6; goto bum_call; } - PIN->rone_es = 1./PIN->one_es; - - /* Now that we have ellipse information check for WGS84 datum */ - if( PIN->datum_type == PJD_3PARAM - && PIN->datum_params[0] == 0.0 - && PIN->datum_params[1] == 0.0 - && PIN->datum_params[2] == 0.0 - && PIN->a == 6378137.0 - && ABS(PIN->es - 0.006694379990) < 0.000000000050 )/*WGS84/GRS80*/ + return pj_init_ctx( pj_get_default_ctx(), argc, argv ); +} + +PJ * +pj_init_ctx(projCtx ctx, int argc, char **argv) { + char *s, *name; + paralist *start = NULL; + PJ *(*proj)(PJ *); + paralist *curr; + int i; + PJ *PIN = 0; + char *old_locale; + + ctx->last_errno = 0; + start = NULL; + + old_locale = strdup(setlocale(LC_NUMERIC, NULL)); + if( strcmp(old_locale,"C") != 0 ) + setlocale(LC_NUMERIC,"C"); + + /* put arguments into internal linked list */ + if (argc <= 0) { pj_ctx_set_errno( ctx, -1 ); goto bum_call; } + for (i = 0; i < argc; ++i) + if (i) + curr = curr->next = pj_mkparam(argv[i]); + else + start = curr = pj_mkparam(argv[i]); + if (ctx->last_errno) goto bum_call; + + /* check if +init present */ + if (pj_param(ctx, start, "tinit").i) { + paralist *last = curr; + + if (!(curr = get_init(ctx,&start, curr, pj_param(ctx, start, "sinit").s))) + goto bum_call; + if (curr == last) { pj_ctx_set_errno( ctx, -2); goto bum_call; } + } + + /* find projection selection */ + if (!(name = pj_param(ctx, start, "sproj").s)) + { pj_ctx_set_errno( ctx, -4 ); goto bum_call; } + for (i = 0; (s = pj_list[i].id) && strcmp(name, s) ; ++i) ; + if (!s) { pj_ctx_set_errno( ctx, -5 ); goto bum_call; } + + /* set defaults, unless inhibited */ + if (!pj_param(ctx, start, "bno_defs").i) + curr = get_defaults(ctx,&start, curr, name); + proj = (PJ *(*)(PJ *)) pj_list[i].proj; + + /* allocate projection structure */ + if (!(PIN = (*proj)(0))) goto bum_call; + PIN->ctx = ctx; + PIN->params = start; + PIN->is_latlong = 0; + PIN->is_geocent = 0; + PIN->is_long_wrap_set = 0; + PIN->long_wrap_center = 0.0; + strcpy( PIN->axis, "enu" ); + + PIN->gridlist = NULL; + PIN->gridlist_count = 0; + + PIN->vgridlist_geoid = NULL; + PIN->vgridlist_geoid_count = 0; + + /* set datum parameters */ + if (pj_datum_set(ctx, start, PIN)) goto bum_call; + + /* set ellipsoid/sphere parameters */ + if (pj_ell_set(ctx, start, &PIN->a, &PIN->es)) goto bum_call; + + PIN->a_orig = PIN->a; + PIN->es_orig = PIN->es; + + PIN->e = sqrt(PIN->es); + PIN->ra = 1. / PIN->a; + PIN->one_es = 1. - PIN->es; + if (PIN->one_es == 0.) { pj_ctx_set_errno( ctx, -6 ); goto bum_call; } + PIN->rone_es = 1./PIN->one_es; + + /* Now that we have ellipse information check for WGS84 datum */ + if( PIN->datum_type == PJD_3PARAM + && PIN->datum_params[0] == 0.0 + && PIN->datum_params[1] == 0.0 + && PIN->datum_params[2] == 0.0 + && PIN->a == 6378137.0 + && ABS(PIN->es - 0.006694379990) < 0.000000000050 )/*WGS84/GRS80*/ + { + PIN->datum_type = PJD_WGS84; + } + + /* set PIN->geoc coordinate system */ + PIN->geoc = (PIN->es && pj_param(ctx, start, "bgeoc").i); + + /* over-ranging flag */ + PIN->over = pj_param(ctx, start, "bover").i; + + /* vertical datum geoid grids */ + PIN->has_geoid_vgrids = pj_param(ctx, start, "tgeoidgrids").i; + if( PIN->has_geoid_vgrids ) /* we need to mark it as used. */ + pj_param(ctx, start, "sgeoidgrids"); + + /* longitude center for wrapping */ + PIN->is_long_wrap_set = pj_param(ctx, start, "tlon_wrap").i; + if (PIN->is_long_wrap_set) + PIN->long_wrap_center = pj_param(ctx, start, "rlon_wrap").f; + + /* axis orientation */ + if( (pj_param(ctx, start,"saxis").s) != NULL ) + { + static const char *axis_legal = "ewnsud"; + const char *axis_arg = pj_param(ctx, start,"saxis").s; + if( strlen(axis_arg) != 3 ) { - PIN->datum_type = PJD_WGS84; + pj_ctx_set_errno( ctx, PJD_ERR_AXIS ); + goto bum_call; } - - /* set PIN->geoc coordinate system */ - PIN->geoc = (PIN->es && pj_param(start, "bgeoc").i); - - /* over-ranging flag */ - PIN->over = pj_param(start, "bover").i; - - /* longitude center for wrapping */ - PIN->long_wrap_center = pj_param(start, "rlon_wrap").f; - - /* central meridian */ - PIN->lam0=pj_param(start, "rlon_0").f; - - /* central latitude */ - PIN->phi0 = pj_param(start, "rlat_0").f; - - /* false easting and northing */ - PIN->x0 = pj_param(start, "dx_0").f; - PIN->y0 = pj_param(start, "dy_0").f; - - /* general scaling factor */ - if (pj_param(start, "tk_0").i) - PIN->k0 = pj_param(start, "dk_0").f; - else if (pj_param(start, "tk").i) - PIN->k0 = pj_param(start, "dk").f; - else - PIN->k0 = 1.; - if (PIN->k0 <= 0.) { - pj_errno = -31; - goto bum_call; - } - - /* set units */ - s = 0; - if (name = pj_param(start, "sunits").s) { - for (i = 0; (s = pj_units[i].id) && strcmp(name, s) ; ++i) ; - if (!s) { pj_errno = -7; goto bum_call; } - s = pj_units[i].to_meter; - } - if (s || (s = pj_param(start, "sto_meter").s)) { - PIN->to_meter = strtod(s, &s); - if (*s == '/') /* ratio number */ - PIN->to_meter /= strtod(++s, 0); - PIN->fr_meter = 1. / PIN->to_meter; - } else - PIN->to_meter = PIN->fr_meter = 1.; - - /* prime meridian */ - s = 0; - if (name = pj_param(start, "spm").s) { - const char *value = NULL; - char *next_str = NULL; - - for (i = 0; pj_prime_meridians[i].id != NULL; ++i ) + + if( strchr( axis_legal, axis_arg[0] ) == NULL + || strchr( axis_legal, axis_arg[1] ) == NULL + || strchr( axis_legal, axis_arg[2] ) == NULL) + { + pj_ctx_set_errno( ctx, PJD_ERR_AXIS ); + goto bum_call; + } + + /* it would be nice to validate we don't have on axis repeated */ + strcpy( PIN->axis, axis_arg ); + } + + PIN->is_long_wrap_set = pj_param(ctx, start, "tlon_wrap").i; + if (PIN->is_long_wrap_set) + PIN->long_wrap_center = pj_param(ctx, start, "rlon_wrap").f; + + /* central meridian */ + PIN->lam0=pj_param(ctx, start, "rlon_0").f; + + /* central latitude */ + PIN->phi0 = pj_param(ctx, start, "rlat_0").f; + + /* false easting and northing */ + PIN->x0 = pj_param(ctx, start, "dx_0").f; + PIN->y0 = pj_param(ctx, start, "dy_0").f; + + /* general scaling factor */ + if (pj_param(ctx, start, "tk_0").i) + PIN->k0 = pj_param(ctx, start, "dk_0").f; + else if (pj_param(ctx, start, "tk").i) + PIN->k0 = pj_param(ctx, start, "dk").f; + else + PIN->k0 = 1.; + if (PIN->k0 <= 0.) { + pj_ctx_set_errno( ctx, -31 ); + goto bum_call; + } + + /* set units */ + s = 0; + if ((name = pj_param(ctx, start, "sunits").s) != NULL) { + for (i = 0; (s = pj_units[i].id) && strcmp(name, s) ; ++i) ; + if (!s) { pj_ctx_set_errno( ctx, -7 ); goto bum_call; } + s = pj_units[i].to_meter; + } + if (s || (s = pj_param(ctx, start, "sto_meter").s)) { + PIN->to_meter = strtod(s, &s); + if (*s == '/') /* ratio number */ + PIN->to_meter /= strtod(++s, 0); + PIN->fr_meter = 1. / PIN->to_meter; + } else + PIN->to_meter = PIN->fr_meter = 1.; + + /* set vertical units */ + s = 0; + if ((name = pj_param(ctx, start, "svunits").s) != NULL) { + for (i = 0; (s = pj_units[i].id) && strcmp(name, s) ; ++i) ; + if (!s) { pj_ctx_set_errno( ctx, -7 ); goto bum_call; } + s = pj_units[i].to_meter; + } + if (s || (s = pj_param(ctx, start, "svto_meter").s)) { + PIN->vto_meter = strtod(s, &s); + if (*s == '/') /* ratio number */ + PIN->vto_meter /= strtod(++s, 0); + PIN->vfr_meter = 1. / PIN->vto_meter; + } else { + PIN->vto_meter = PIN->to_meter; + PIN->vfr_meter = PIN->fr_meter; + } + + /* prime meridian */ + s = 0; + if ((name = pj_param(ctx, start, "spm").s) != NULL) { + const char *value = NULL; + char *next_str = NULL; + + for (i = 0; pj_prime_meridians[i].id != NULL; ++i ) + { + if( strcmp(name,pj_prime_meridians[i].id) == 0 ) { - if( strcmp(name,pj_prime_meridians[i].id) == 0 ) - { - value = pj_prime_meridians[i].defn; - break; - } + value = pj_prime_meridians[i].defn; + break; } + } - if( value == NULL - && (dmstor(name,&next_str) != 0.0 || *name == '0') - && *next_str == '\0' ) - value = name; - - if (!value) { pj_errno = -46; goto bum_call; } - PIN->from_greenwich = dmstor(value,NULL); - } + if( value == NULL + && (dmstor_ctx(ctx,name,&next_str) != 0.0 || *name == '0') + && *next_str == '\0' ) + value = name; + + if (!value) { pj_ctx_set_errno( ctx, -46 ); goto bum_call; } + PIN->from_greenwich = dmstor_ctx(ctx,value,NULL); + } + else + PIN->from_greenwich = 0.0; + + /* projection specific initialization */ + if (!(PIN = (*proj)(PIN)) || ctx->last_errno) { + bum_call: /* cleanup error return */ + if (PIN) + pj_free(PIN); else - PIN->from_greenwich = 0.0; - - /* projection specific initialization */ - if (!(PIN = (*proj)(PIN)) || errno || pj_errno) { -bum_call: /* cleanup error return */ - if (!pj_errno) - pj_errno = errno; - if (PIN) - pj_free(PIN); - else - for ( ; start; start = curr) { - curr = start->next; - pj_dalloc(start); - } - PIN = 0; - } - return PIN; + for ( ; start; start = curr) { + curr = start->next; + pj_dalloc(start); + } + PIN = 0; + } + + if( strcmp(old_locale,"C") != 0 ) + setlocale(LC_NUMERIC,old_locale); + free( old_locale ); + + return PIN; } /************************************************************************/ @@ -412,18 +473,22 @@ pj_init(int argc, char **argv) { void pj_free(PJ *P) { - if (P) { - paralist *t = P->params, *n; - - /* free parameter list elements */ - for (t = P->params; t; t = n) { - n = t->next; - pj_dalloc(t); - } - - /* free projection parameters */ - P->pfree(P); - } + if (P) { + paralist *t = P->params, *n; + + /* free parameter list elements */ + for (t = P->params; t; t = n) { + n = t->next; + pj_dalloc(t); + } + + /* free array of grid pointers if we have one */ + if( P->gridlist != NULL ) + pj_dalloc( P->gridlist ); + + /* free projection parameters */ + P->pfree(P); + } } diff --git a/src/pj_initcache.c b/src/pj_initcache.c index 5dd46fad8..71036f23a 100644 --- a/src/pj_initcache.c +++ b/src/pj_initcache.c @@ -75,34 +75,34 @@ paralist *pj_clone_paralist( const paralist *list) void pj_clear_initcache() { - if( cache_alloc > 0 ) - { - int i; + if( cache_alloc > 0 ) + { + int i; - pj_acquire_lock(); + pj_acquire_lock(); - for( i = 0; i < cache_count; i++ ) - { - paralist *n, *t = cache_paralist[i]; + for( i = 0; i < cache_count; i++ ) + { + paralist *n, *t = cache_paralist[i]; - pj_dalloc( cache_key[i] ); - - /* free parameter list elements */ - for (; t != NULL; t = n) { - n = t->next; - pj_dalloc(t); - } - } - - pj_dalloc( cache_key ); - pj_dalloc( cache_paralist ); - cache_count = 0; - cache_alloc= 0; - cache_key = NULL; - cache_paralist = NULL; - - pj_release_lock(); - } + pj_dalloc( cache_key[i] ); + + /* free parameter list elements */ + for (; t != NULL; t = n) { + n = t->next; + pj_dalloc(t); + } + } + + pj_dalloc( cache_key ); + pj_dalloc( cache_paralist ); + cache_count = 0; + cache_alloc= 0; + cache_key = NULL; + cache_paralist = NULL; + + pj_release_lock(); + } } /************************************************************************/ @@ -114,22 +114,22 @@ void pj_clear_initcache() paralist *pj_search_initcache( const char *filekey ) { - int i; - paralist *result = NULL; + int i; + paralist *result = NULL; - pj_acquire_lock(); + pj_acquire_lock(); - for( i = 0; result == NULL && i < cache_count; i++) + for( i = 0; result == NULL && i < cache_count; i++) { - if( strcmp(filekey,cache_key[i]) == 0 ) + if( strcmp(filekey,cache_key[i]) == 0 ) { - result = pj_clone_paralist( cache_paralist[i] ); + result = pj_clone_paralist( cache_paralist[i] ); } } - pj_release_lock(); + pj_release_lock(); - return result; + return result; } /************************************************************************/ @@ -141,41 +141,41 @@ paralist *pj_search_initcache( const char *filekey ) void pj_insert_initcache( const char *filekey, const paralist *list ) { - pj_acquire_lock(); + pj_acquire_lock(); - /* - ** Grow list if required. - */ - if( cache_count == cache_alloc ) + /* + ** Grow list if required. + */ + if( cache_count == cache_alloc ) { - char **cache_key_new; - paralist **cache_paralist_new; - - cache_alloc = cache_alloc * 2 + 15; - - cache_key_new = (char **) pj_malloc(sizeof(char*) * cache_alloc); - memcpy( cache_key, cache_key_new, sizeof(char*) * cache_count); - pj_dalloc( cache_key ); - cache_key = cache_key_new; - - cache_paralist_new = (paralist **) - pj_malloc(sizeof(paralist*) * cache_alloc); - memcpy( cache_paralist_new, cache_paralist, - sizeof(paralist*) * cache_count ); - pj_dalloc( cache_paralist ); - cache_paralist = cache_paralist_new; + char **cache_key_new; + paralist **cache_paralist_new; + + cache_alloc = cache_alloc * 2 + 15; + + cache_key_new = (char **) pj_malloc(sizeof(char*) * cache_alloc); + memcpy( cache_key_new, cache_key, sizeof(char*) * cache_count); + pj_dalloc( cache_key ); + cache_key = cache_key_new; + + cache_paralist_new = (paralist **) + pj_malloc(sizeof(paralist*) * cache_alloc); + memcpy( cache_paralist_new, cache_paralist, + sizeof(paralist*) * cache_count ); + pj_dalloc( cache_paralist ); + cache_paralist = cache_paralist_new; } - /* - ** Duplicate the filekey and paralist, and insert in cache. - */ - cache_key[cache_count] = (char *) pj_malloc(strlen(filekey)+1); - strcpy( cache_key[cache_count], filekey ); + /* + ** Duplicate the filekey and paralist, and insert in cache. + */ + cache_key[cache_count] = (char *) pj_malloc(strlen(filekey)+1); + strcpy( cache_key[cache_count], filekey ); - cache_paralist[cache_count] = pj_clone_paralist( list ); + cache_paralist[cache_count] = pj_clone_paralist( list ); - cache_count++; + cache_count++; - pj_release_lock(); + pj_release_lock(); } diff --git a/src/pj_inv.c b/src/pj_inv.c index ee2b44f83..a418ccd46 100644 --- a/src/pj_inv.c +++ b/src/pj_inv.c @@ -10,13 +10,17 @@ pj_inv(XY xy, PJ *P) { /* 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; + pj_ctx_set_errno( P->ctx, -15); + return lp; } + errno = pj_errno = 0; + P->ctx->last_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)) + if (P->ctx->last_errno ) lp.lam = lp.phi = HUGE_VAL; else { lp.lam += P->lam0; /* reduce from del lp.lam */ diff --git a/src/pj_list.h b/src/pj_list.h index b965cc712..89e9e7aa7 100644 --- a/src/pj_list.h +++ b/src/pj_list.h @@ -32,6 +32,7 @@ PROJ_HEAD(eck6, "Eckert VI") PROJ_HEAD(eqc, "Equidistant Cylindrical (Plate Caree)") PROJ_HEAD(eqdc, "Equidistant Conic") PROJ_HEAD(euler, "Euler") +PROJ_HEAD(etmerc, "Extended Transverse Mercator" ) PROJ_HEAD(fahey, "Fahey") PROJ_HEAD(fouc, "Foucaut") PROJ_HEAD(fouc_s, "Foucaut Sinusoidal") @@ -46,6 +47,9 @@ PROJ_HEAD(gs48, "Mod. Stererographics of 48 U.S.") PROJ_HEAD(gs50, "Mod. Stererographics of 50 U.S.") PROJ_HEAD(hammer, "Hammer & Eckert-Greifendorff") PROJ_HEAD(hatano, "Hatano Asymmetrical Equal Area") +PROJ_HEAD(healpix, "HEALPix") +PROJ_HEAD(rhealpix, "rHEALPix") +PROJ_HEAD(igh, "Interrupted Goode Homolosine") PROJ_HEAD(imw_p, "Internation Map of the World Polyconic") PROJ_HEAD(kav5, "Kavraisky V") PROJ_HEAD(kav7, "Kavraisky VII") diff --git a/src/pj_log.c b/src/pj_log.c new file mode 100644 index 000000000..630a3cfed --- /dev/null +++ b/src/pj_log.c @@ -0,0 +1,73 @@ +/****************************************************************************** + * $Id$ + * + * Project: PROJ.4 + * Purpose: Implementation of pj_log() function. + * Author: Frank Warmerdam, warmerdam@pobox.com + * + ****************************************************************************** + * Copyright (c) 2010, Frank Warmerdam + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#include +#include +#include + +PJ_CVSID("$Id$"); + +/************************************************************************/ +/* pj_stderr_logger() */ +/************************************************************************/ + +void pj_stderr_logger( void *app_data, int level, const char *msg ) + +{ + fprintf( stderr, "%s\n", msg ); +} + +/************************************************************************/ +/* pj_log() */ +/************************************************************************/ + +void pj_log( projCtx ctx, int level, const char *fmt, ... ) + +{ + va_list args; + char *msg_buf; + + if( level > ctx->debug_level ) + return; + + msg_buf = (char *) malloc(100000); + if( msg_buf == NULL ) + return; + + va_start( args, fmt ); + + /* we should use vsnprintf where available once we add configure detect.*/ + vsprintf( msg_buf, fmt, args ); + + va_end( args ); + + ctx->logger( ctx->app_data, level, msg_buf ); + + free( msg_buf ); +} diff --git a/src/pj_malloc.c b/src/pj_malloc.c index b6400ebaf..80443a2bb 100644 --- a/src/pj_malloc.c +++ b/src/pj_malloc.c @@ -7,12 +7,14 @@ void * pj_malloc(size_t size) { -// Currently, pj_malloc is a hack to solve an errno problem. -// The problem is described in more details at -// https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=86420. -// It seems, that pj_init and similar functions incorrectly -// (under debian/glibs-2.3.2) assume that pj_malloc resets -// errno after success. pj_malloc tries to mimic this. +/* +/ Currently, pj_malloc is a hack to solve an errno problem. +/ The problem is described in more details at +/ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=86420. +/ It seems, that pj_init and similar functions incorrectly +/ (under debian/glibs-2.3.2) assume that pj_malloc resets +/ errno after success. pj_malloc tries to mimic this. +*/ int old_errno = errno; void *res = malloc(size); if ( res && !old_errno ) diff --git a/src/pj_mlfn.c b/src/pj_mlfn.c index afd18b196..aeab61178 100644 --- a/src/pj_mlfn.c +++ b/src/pj_mlfn.c @@ -23,7 +23,7 @@ pj_enfn(double es) { double t, *en; - if (en = (double *)pj_malloc(EN_SIZE * sizeof(double))) { + if ((en = (double *)pj_malloc(EN_SIZE * sizeof(double))) != NULL) { en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08))); en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08))); en[2] = (t = es * es) * (C44 - es * (C46 + es * C48)); @@ -40,7 +40,7 @@ pj_mlfn(double phi, double sphi, double cphi, double *en) { + sphi*(en[3] + sphi*en[4])))); } double -pj_inv_mlfn(double arg, double es, double *en) { +pj_inv_mlfn(projCtx ctx, double arg, double es, double *en) { double s, t, phi, k = 1./(1.-es); int i; @@ -52,6 +52,6 @@ pj_inv_mlfn(double arg, double es, double *en) { if (fabs(t) < EPS) return phi; } - pj_errno = -17; + pj_ctx_set_errno( ctx, -17 ); return phi; } diff --git a/src/pj_mutex.c b/src/pj_mutex.c index 3399ac125..39cedbc41 100644 --- a/src/pj_mutex.c +++ b/src/pj_mutex.c @@ -37,8 +37,10 @@ PJ_CVSID("$Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $"); #include #endif -#ifdef _WIN32 +/* on win32 we always use win32 mutexes, even if pthreads are available */ +#if defined(_WIN32) && !defined(MUTEX_stub) # define MUTEX_win32 +# undef MUTEX_pthread #endif #if !defined(MUTEX_stub) && !defined(MUTEX_pthread) && !defined(MUTEX_win32) @@ -82,15 +84,6 @@ void pj_cleanup_lock() { } -/************************************************************************/ -/* pj_init_lock() */ -/************************************************************************/ - -static void pj_init_lock() - -{ -} - #endif // def MUTEX_stub /************************************************************************/ @@ -103,7 +96,7 @@ static void pj_init_lock() #include "pthread.h" -static pthread_mutex_t core_lock = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t pj_core_lock = PTHREAD_MUTEX_INITIALIZER; /************************************************************************/ /* pj_acquire_lock() */ @@ -113,7 +106,7 @@ static pthread_mutex_t core_lock = PTHREAD_MUTEX_INITIALIZER; void pj_acquire_lock() { - pthread_mutex_lock( &core_lock); + pthread_mutex_lock( &pj_core_lock); } /************************************************************************/ @@ -124,7 +117,7 @@ void pj_acquire_lock() void pj_release_lock() { - pthread_mutex_unlock( &core_lock ); + pthread_mutex_unlock( &pj_core_lock ); } /************************************************************************/ @@ -134,15 +127,6 @@ void pj_cleanup_lock() { } -/************************************************************************/ -/* pj_init_lock() */ -/************************************************************************/ - -static void pj_init_lock() - -{ -} - #endif // def MUTEX_pthread /************************************************************************/ diff --git a/src/pj_open_lib.c b/src/pj_open_lib.c index 157efba70..23e142778 100644 --- a/src/pj_open_lib.c +++ b/src/pj_open_lib.c @@ -1,5 +1,5 @@ /****************************************************************************** - * $Id: pj_open_lib.c 1504 2009-01-06 02:11:57Z warmerdam $ + * $Id: pj_open_lib.c 2130 2011-12-15 01:20:23Z warmerdam $ * * Project: PROJ.4 * Purpose: Implementation of pj_open_lib(), and pj_set_finder(). These @@ -36,7 +36,7 @@ #include #include -PJ_CVSID("$Id: pj_open_lib.c 1504 2009-01-06 02:11:57Z warmerdam $"); +PJ_CVSID("$Id: pj_open_lib.c 2130 2011-12-15 01:20:23Z warmerdam $"); static const char *(*pj_finder)(const char *) = NULL; static int path_count = 0; @@ -99,7 +99,7 @@ void pj_set_searchpath ( int count, const char **path ) /************************************************************************/ FILE * -pj_open_lib(char *name, char *mode) { +pj_open_lib(projCtx ctx, char *name, char *mode) { char fname[MAX_PATH_FILENAME+1]; const char *sysname; FILE *fid; @@ -115,7 +115,7 @@ pj_open_lib(char *name, char *mode) { /* check if ~/name */ if (*name == '~' && strchr(dir_chars,name[1]) ) - if (sysname = getenv("HOME")) { + if ((sysname = getenv("HOME")) != NULL) { (void)strcpy(fname, sysname); fname[n = strlen(fname)] = DIR_CHAR; fname[++n] = '\0'; @@ -145,7 +145,7 @@ pj_open_lib(char *name, char *mode) { } else /* just try it bare bones */ sysname = name; - if (fid = fopen(sysname, mode)) + if ((fid = fopen(sysname, mode)) != NULL) errno = 0; /* If none of those work and we have a search path, try it */ @@ -161,10 +161,13 @@ pj_open_lib(char *name, char *mode) { errno = 0; } - if( getenv( "PROJ_DEBUG" ) != NULL ) - fprintf( stderr, "pj_open_lib(%s): call fopen(%s) - %s\n", - name, sysname, - fid == NULL ? "failed" : "succeeded" ); + if( ctx->last_errno == 0 && errno != 0 ) + pj_ctx_set_errno( ctx, errno ); + + pj_log( ctx, PJ_LOG_DEBUG_MAJOR, + "pj_open_lib(%s): call fopen(%s) - %s\n", + name, sysname, + fid == NULL ? "failed" : "succeeded" ); return(fid); #else diff --git a/src/pj_param.c b/src/pj_param.c index 4dce136a7..119006e14 100644 --- a/src/pj_param.c +++ b/src/pj_param.c @@ -6,7 +6,7 @@ pj_mkparam(char *str) { paralist *newitem; - if (newitem = (paralist *)pj_malloc(sizeof(paralist) + strlen(str))) { + if((newitem = (paralist *)pj_malloc(sizeof(paralist) + strlen(str))) != NULL) { newitem->used = 0; newitem->next = 0; if (*str == '+') @@ -34,11 +34,15 @@ pj_mkparam(char *str) { /************************************************************************/ PVALUE /* test for presence or get parameter value */ -pj_param(paralist *pl, char *opt) { +pj_param(projCtx ctx, paralist *pl, const char *opt) { + int type; unsigned l; PVALUE value; + if( ctx == NULL ) + ctx = pj_get_default_ctx(); + type = *opt++; /* simple linear lookup */ l = strlen(opt); @@ -60,10 +64,10 @@ pj_param(paralist *pl, char *opt) { value.f = atof(opt); break; case 'r': /* degrees input */ - value.f = dmstor(opt, 0); + value.f = dmstor_ctx(ctx, opt, 0); break; case 's': /* char string */ - value.s = opt; + value.s = (char *) opt; break; case 'b': /* boolean */ switch (*opt) { @@ -74,7 +78,7 @@ pj_param(paralist *pl, char *opt) { value.i = 1; break; default: - pj_errno = -8; + pj_ctx_set_errno(ctx, -8); value.i = 0; break; } diff --git a/src/pj_phi2.c b/src/pj_phi2.c index 0900350e6..5c81da48d 100644 --- a/src/pj_phi2.c +++ b/src/pj_phi2.c @@ -6,7 +6,7 @@ #define N_ITER 15 double -pj_phi2(double ts, double e) { +pj_phi2(projCtx ctx, double ts, double e) { double eccnth, Phi, con, dphi; int i; @@ -20,6 +20,6 @@ pj_phi2(double ts, double e) { Phi += dphi; } while ( fabs(dphi) > TOL && --i); if (i <= 0) - pj_errno = -18; + pj_ctx_set_errno( ctx, -18 ); return Phi; } diff --git a/src/pj_pr_list.c b/src/pj_pr_list.c index d4a908cd7..e14b20d99 100644 --- a/src/pj_pr_list.c +++ b/src/pj_pr_list.c @@ -49,7 +49,7 @@ pj_pr_list(PJ *P) { /* */ /* Returns the PROJ.4 command string that would produce this */ /* definition expanded as much as possible. For instance, */ -/* +init= calls and +datum= defintions would be expanded. */ +/* +init= calls and +datum= definitions would be expanded. */ /************************************************************************/ char *pj_get_def( PJ *P, int options ) diff --git a/src/pj_strerrno.c b/src/pj_strerrno.c index 4db1fb9ae..186a50e81 100644 --- a/src/pj_strerrno.c +++ b/src/pj_strerrno.c @@ -22,7 +22,7 @@ pj_err_list[] = { "latitude or longitude exceeded limits", /* -14 */ "invalid x or y", /* -15 */ "improperly formed DMS value", /* -16 */ - "non-convergent inverse meridinal dist", /* -17 */ + "non-convergent inverse meridional dist", /* -17 */ "non-convergent inverse phi2", /* -18 */ "acos/asin: |arg| >1.+1e-14", /* -19 */ "tolerance condition error", /* -20 */ @@ -43,7 +43,7 @@ pj_err_list[] = { "invalid UTM zone number", /* -35 */ "arg(s) out of range for Tcheby eval", /* -36 */ "failed to find projection to be rotated", /* -37 */ - "failed to load NAD27-83 correction file", /* -38 */ + "failed to load datum shift file", /* -38 */ "both n & m must be spec'd and > 0", /* -39 */ "n <= 0, n > 1 or not specified", /* -40 */ "lat_1 or lat_2 not specified", /* -41 */ @@ -52,6 +52,8 @@ pj_err_list[] = { "unparseable coordinate system definition", /* -44 */ "geocentric transformation missing z or ellps", /* -45 */ "unknown prime meridian conversion id", /* -46 */ + "illegal axis orientation combination", /* -47 */ + "point not within available datum shift grids", /* -48 */ }; char * pj_strerrno(int err) diff --git a/src/pj_transform.c b/src/pj_transform.c index 7aacbd4ab..afd3db374 100644 --- a/src/pj_transform.c +++ b/src/pj_transform.c @@ -1,5 +1,5 @@ /****************************************************************************** - * $Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $ + * $Id: pj_transform.c 2000 2011-05-10 17:06:33Z warmerdam $ * * Project: PROJ.4 * Purpose: Perform overall coordinate system to coordinate system @@ -34,7 +34,11 @@ #include #include "geocent.h" -PJ_CVSID("$Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $"); +PJ_CVSID("$Id: pj_transform.c 2000 2011-05-10 17:06:33Z warmerdam $"); + +static int pj_adjust_axis( projCtx ctx, const char *axis, int denormalize_flag, + long point_count, int point_offset, + double *x, double *y, double *z ); #ifndef SRS_WGS84_SEMIMAJOR #define SRS_WGS84_SEMIMAJOR 6378137.0 @@ -63,13 +67,13 @@ PJ_CVSID("$Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $"); ** list or something, but while experimenting with it this should be fine. */ -static const int transient_error[45] = { +static const int transient_error[50] = { /* 0 1 2 3 4 5 6 7 8 9 */ /* 0 to 9 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 10 to 19 */ 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, /* 20 to 29 */ 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, - /* 30 to 39 */ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - /* 40 to 44 */ 0, 0, 0, 0, 0 }; + /* 30 to 39 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* 40 to 49 */ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }; /************************************************************************/ /* pj_transform() */ @@ -85,13 +89,37 @@ int pj_transform( PJ *srcdefn, PJ *dstdefn, long point_count, int point_offset, { long i; - int need_datum_shift; + int err; - pj_errno = 0; + srcdefn->ctx->last_errno = 0; + dstdefn->ctx->last_errno = 0; if( point_offset == 0 ) point_offset = 1; +/* -------------------------------------------------------------------- */ +/* Transform unusual input coordinate axis orientation to */ +/* standard form if needed. */ +/* -------------------------------------------------------------------- */ + if( strcmp(srcdefn->axis,"enu") != 0 ) + { + int err; + + err = pj_adjust_axis( srcdefn->ctx, srcdefn->axis, + 0, point_count, point_offset, x, y, z ); + if( err != 0 ) + return err; + } + +/* -------------------------------------------------------------------- */ +/* Transform Z to meters if it isn't already. */ +/* -------------------------------------------------------------------- */ + if( srcdefn->vto_meter != 1.0 && z != NULL ) + { + for( i = 0; i < point_count; i++ ) + z[point_offset*i] *= srcdefn->vto_meter; + } + /* -------------------------------------------------------------------- */ /* Transform geocentric source coordinates to lat/long. */ /* -------------------------------------------------------------------- */ @@ -99,7 +127,7 @@ int pj_transform( PJ *srcdefn, PJ *dstdefn, long point_count, int point_offset, { if( z == NULL ) { - pj_errno = PJD_ERR_GEOCENTRIC; + pj_ctx_set_errno( pj_get_ctx(srcdefn), PJD_ERR_GEOCENTRIC); return PJD_ERR_GEOCENTRIC; } @@ -115,10 +143,11 @@ int pj_transform( PJ *srcdefn, PJ *dstdefn, long point_count, int point_offset, } } - if( pj_geocentric_to_geodetic( srcdefn->a_orig, srcdefn->es_orig, - point_count, point_offset, - x, y, z ) != 0) - return pj_errno; + err = pj_geocentric_to_geodetic( srcdefn->a_orig, srcdefn->es_orig, + point_count, point_offset, + x, y, z ); + if( err != 0 ) + return err; } /* -------------------------------------------------------------------- */ @@ -129,13 +158,10 @@ int pj_transform( PJ *srcdefn, PJ *dstdefn, long point_count, int point_offset, { if( srcdefn->inv == NULL ) { - pj_errno = -17; /* this isn't correct, we need a no inverse err */ - if( getenv( "PROJ_DEBUG" ) != NULL ) - { - fprintf( stderr, - "pj_transform(): source projection not invertable\n" ); - } - return pj_errno; + pj_ctx_set_errno( pj_get_ctx(srcdefn), -17 ); + pj_log( pj_get_ctx(srcdefn), PJ_LOG_ERROR, + "pj_transform(): source projection not invertable" ); + return -17; } for( i = 0; i < point_count; i++ ) @@ -150,12 +176,14 @@ int pj_transform( PJ *srcdefn, PJ *dstdefn, long point_count, int point_offset, continue; geodetic_loc = pj_inv( projected_loc, srcdefn ); - if( pj_errno != 0 ) + if( srcdefn->ctx->last_errno != 0 ) { - if( (pj_errno != 33 /*EDOM*/ && pj_errno != 34 /*ERANGE*/ ) - && (pj_errno > 0 || pj_errno < -44 || point_count == 1 - || transient_error[-pj_errno] == 0 ) ) - return pj_errno; + if( (srcdefn->ctx->last_errno != 33 /*EDOM*/ + && srcdefn->ctx->last_errno != 34 /*ERANGE*/ ) + && (srcdefn->ctx->last_errno > 0 + || srcdefn->ctx->last_errno < -44 || point_count == 1 + || transient_error[-srcdefn->ctx->last_errno] == 0 ) ) + return srcdefn->ctx->last_errno; else { geodetic_loc.u = HUGE_VAL; @@ -180,13 +208,44 @@ int pj_transform( PJ *srcdefn, PJ *dstdefn, long point_count, int point_offset, } } +/* -------------------------------------------------------------------- */ +/* Do we need to translate from geoid to ellipsoidal vertical */ +/* datum? */ +/* -------------------------------------------------------------------- */ + if( srcdefn->has_geoid_vgrids ) + { + if( pj_apply_vgridshift( srcdefn, "sgeoidgrids", + &(srcdefn->vgridlist_geoid), + &(srcdefn->vgridlist_geoid_count), + 0, point_count, point_offset, x, y, z ) != 0 ) + return pj_ctx_get_errno(srcdefn->ctx); + } + /* -------------------------------------------------------------------- */ /* Convert datums if needed, and possible. */ /* -------------------------------------------------------------------- */ if( pj_datum_transform( srcdefn, dstdefn, point_count, point_offset, x, y, z ) != 0 ) - return pj_errno; + { + if( srcdefn->ctx->last_errno != 0 ) + return srcdefn->ctx->last_errno; + else + return dstdefn->ctx->last_errno; + } +/* -------------------------------------------------------------------- */ +/* Do we need to translate from geoid to ellipsoidal vertical */ +/* datum? */ +/* -------------------------------------------------------------------- */ + if( dstdefn->has_geoid_vgrids ) + { + if( pj_apply_vgridshift( dstdefn, "sgeoidgrids", + &(dstdefn->vgridlist_geoid), + &(dstdefn->vgridlist_geoid_count), + 1, point_count, point_offset, x, y, z ) != 0 ) + return dstdefn->ctx->last_errno; + } + /* -------------------------------------------------------------------- */ /* But if they are staying lat long, adjust for the prime */ /* meridian if there is one in effect. */ @@ -208,7 +267,7 @@ int pj_transform( PJ *srcdefn, PJ *dstdefn, long point_count, int point_offset, { if( z == NULL ) { - pj_errno = PJD_ERR_GEOCENTRIC; + pj_ctx_set_errno( dstdefn->ctx, PJD_ERR_GEOCENTRIC ); return PJD_ERR_GEOCENTRIC; } @@ -246,12 +305,14 @@ int pj_transform( PJ *srcdefn, PJ *dstdefn, long point_count, int point_offset, continue; projected_loc = pj_fwd( geodetic_loc, dstdefn ); - if( pj_errno != 0 ) + if( dstdefn->ctx->last_errno != 0 ) { - if( (pj_errno != 33 /*EDOM*/ && pj_errno != 34 /*ERANGE*/ ) - && (pj_errno > 0 || pj_errno < -44 || point_count == 1 - || transient_error[-pj_errno] == 0 ) ) - return pj_errno; + if( (dstdefn->ctx->last_errno != 33 /*EDOM*/ + && dstdefn->ctx->last_errno != 34 /*ERANGE*/ ) + && (dstdefn->ctx->last_errno > 0 + || dstdefn->ctx->last_errno < -44 || point_count == 1 + || transient_error[-dstdefn->ctx->last_errno] == 0 ) ) + return dstdefn->ctx->last_errno; else { projected_loc.u = HUGE_VAL; @@ -268,20 +329,43 @@ int pj_transform( PJ *srcdefn, PJ *dstdefn, long point_count, int point_offset, /* If a wrapping center other than 0 is provided, rewrap around */ /* the suggested center (for latlong coordinate systems only). */ /* -------------------------------------------------------------------- */ - else if( dstdefn->is_latlong && dstdefn->long_wrap_center != 0 ) + else if( dstdefn->is_latlong && dstdefn->is_long_wrap_set ) { for( i = 0; i < point_count; i++ ) { if( x[point_offset*i] == HUGE_VAL ) continue; - while( x[point_offset*i] < dstdefn->long_wrap_center - HALFPI ) - x[point_offset*i] += PI; - while( x[point_offset*i] > dstdefn->long_wrap_center + HALFPI ) - x[point_offset*i] -= PI; + while( x[point_offset*i] < dstdefn->long_wrap_center - PI ) + x[point_offset*i] += TWOPI; + while( x[point_offset*i] > dstdefn->long_wrap_center + PI ) + x[point_offset*i] -= TWOPI; } } +/* -------------------------------------------------------------------- */ +/* Transform Z from meters if needed. */ +/* -------------------------------------------------------------------- */ + if( dstdefn->vto_meter != 1.0 && z != NULL ) + { + for( i = 0; i < point_count; i++ ) + z[point_offset*i] *= dstdefn->vfr_meter; + } + +/* -------------------------------------------------------------------- */ +/* Transform normalized axes into unusual output coordinate axis */ +/* orientation if needed. */ +/* -------------------------------------------------------------------- */ + if( strcmp(dstdefn->axis,"enu") != 0 ) + { + int err; + + err = pj_adjust_axis( dstdefn->ctx, dstdefn->axis, + 1, point_count, point_offset, x, y, z ); + if( err != 0 ) + return err; + } + return 0; } @@ -297,8 +381,7 @@ int pj_geodetic_to_geocentric( double a, double es, double b; int i; GeocentricInfo gi; - - pj_errno = 0; + int ret_errno = 0; if( es == 0.0 ) b = a; @@ -307,8 +390,7 @@ int pj_geodetic_to_geocentric( double a, double es, if( pj_Set_Geocentric_Parameters( &gi, a, b ) != 0 ) { - pj_errno = PJD_ERR_GEOCENTRIC; - return pj_errno; + return PJD_ERR_GEOCENTRIC; } for( i = 0; i < point_count; i++ ) @@ -321,13 +403,13 @@ int pj_geodetic_to_geocentric( double a, double es, if( pj_Convert_Geodetic_To_Geocentric( &gi, y[io], x[io], z[io], x+io, y+io, z+io ) != 0 ) { - pj_errno = -14; + ret_errno = -14; x[io] = y[io] = HUGE_VAL; /* but keep processing points! */ } } - return pj_errno; + return ret_errno; } /************************************************************************/ @@ -350,8 +432,7 @@ int pj_geocentric_to_geodetic( double a, double es, if( pj_Set_Geocentric_Parameters( &gi, a, b ) != 0 ) { - pj_errno = PJD_ERR_GEOCENTRIC; - return pj_errno; + return PJD_ERR_GEOCENTRIC; } for( i = 0; i < point_count; i++ ) @@ -407,8 +488,8 @@ int pj_compare_datums( PJ *srcdefn, PJ *dstdefn ) } else if( srcdefn->datum_type == PJD_GRIDSHIFT ) { - return strcmp( pj_param(srcdefn->params,"snadgrids").s, - pj_param(dstdefn->params,"snadgrids").s ) == 0; + return strcmp( pj_param(srcdefn->ctx, srcdefn->params,"snadgrids").s, + pj_param(dstdefn->ctx, dstdefn->params,"snadgrids").s ) == 0; } else return 1; @@ -425,8 +506,6 @@ int pj_geocentric_to_wgs84( PJ *defn, { int i; - pj_errno = 0; - if( defn->datum_type == PJD_3PARAM ) { for( i = 0; i < point_count; i++ ) @@ -475,8 +554,6 @@ int pj_geocentric_from_wgs84( PJ *defn, { int i; - pj_errno = 0; - if( defn->datum_type == PJD_3PARAM ) { for( i = 0; i < point_count; i++ ) @@ -530,8 +607,6 @@ int pj_datum_transform( PJ *srcdefn, PJ *dstdefn, double src_a, src_es, dst_a, dst_es; int z_is_temp = FALSE; - pj_errno = 0; - /* -------------------------------------------------------------------- */ /* We cannot do any meaningful datum transformation if either */ /* the source or destination are of an unknown datum type */ @@ -565,7 +640,7 @@ int pj_datum_transform( PJ *srcdefn, PJ *dstdefn, z_is_temp = TRUE; } -#define CHECK_RETURN {if( pj_errno != 0 && (pj_errno > 0 || transient_error[-pj_errno] == 0) ) { if( z_is_temp ) pj_dalloc(z); return pj_errno; }} +#define CHECK_RETURN(defn) {if( defn->ctx->last_errno != 0 && (defn->ctx->last_errno > 0 || transient_error[-defn->ctx->last_errno] == 0) ) { if( z_is_temp ) pj_dalloc(z); return defn->ctx->last_errno; }} /* -------------------------------------------------------------------- */ /* If this datum requires grid shifts, then apply it to geodetic */ @@ -573,9 +648,8 @@ int pj_datum_transform( PJ *srcdefn, PJ *dstdefn, /* -------------------------------------------------------------------- */ if( srcdefn->datum_type == PJD_GRIDSHIFT ) { - pj_apply_gridshift( pj_param(srcdefn->params,"snadgrids").s, 0, - point_count, point_offset, x, y, z ); - CHECK_RETURN; + pj_apply_gridshift_2( srcdefn, 0, point_count, point_offset, x, y, z ); + CHECK_RETURN(srcdefn); src_a = SRS_WGS84_SEMIMAJOR; src_es = SRS_WGS84_ESQUARED; @@ -586,7 +660,7 @@ int pj_datum_transform( PJ *srcdefn, PJ *dstdefn, dst_a = SRS_WGS84_SEMIMAJOR; dst_es = SRS_WGS84_ESQUARED; } - + /* ==================================================================== */ /* Do we need to go through geocentric coordinates? */ /* ==================================================================== */ @@ -599,9 +673,10 @@ int pj_datum_transform( PJ *srcdefn, PJ *dstdefn, /* -------------------------------------------------------------------- */ /* Convert to geocentric coordinates. */ /* -------------------------------------------------------------------- */ - pj_geodetic_to_geocentric( src_a, src_es, - point_count, point_offset, x, y, z ); - CHECK_RETURN; + srcdefn->ctx->last_errno = + pj_geodetic_to_geocentric( src_a, src_es, + point_count, point_offset, x, y, z ); + CHECK_RETURN(srcdefn); /* -------------------------------------------------------------------- */ /* Convert between datums. */ @@ -610,22 +685,23 @@ int pj_datum_transform( PJ *srcdefn, PJ *dstdefn, || srcdefn->datum_type == PJD_7PARAM ) { pj_geocentric_to_wgs84( srcdefn, point_count, point_offset,x,y,z); - CHECK_RETURN; + CHECK_RETURN(srcdefn); } if( dstdefn->datum_type == PJD_3PARAM || dstdefn->datum_type == PJD_7PARAM ) { pj_geocentric_from_wgs84( dstdefn, point_count,point_offset,x,y,z); - CHECK_RETURN; + CHECK_RETURN(dstdefn); } /* -------------------------------------------------------------------- */ /* Convert back to geodetic coordinates. */ /* -------------------------------------------------------------------- */ - pj_geocentric_to_geodetic( dst_a, dst_es, - point_count, point_offset, x, y, z ); - CHECK_RETURN; + dstdefn->ctx->last_errno = + pj_geocentric_to_geodetic( dst_a, dst_es, + point_count, point_offset, x, y, z ); + CHECK_RETURN(dstdefn); } /* -------------------------------------------------------------------- */ @@ -633,9 +709,8 @@ int pj_datum_transform( PJ *srcdefn, PJ *dstdefn, /* -------------------------------------------------------------------- */ if( dstdefn->datum_type == PJD_GRIDSHIFT ) { - pj_apply_gridshift( pj_param(dstdefn->params,"snadgrids").s, 1, - point_count, point_offset, x, y, z ); - CHECK_RETURN; + pj_apply_gridshift_2( dstdefn, 1, point_count, point_offset, x, y, z ); + CHECK_RETURN(dstdefn); } if( z_is_temp ) @@ -644,3 +719,108 @@ int pj_datum_transform( PJ *srcdefn, PJ *dstdefn, return 0; } +/************************************************************************/ +/* pj_adjust_axis() */ +/* */ +/* Normalize or de-normalized the x/y/z axes. The normal form */ +/* is "enu" (easting, northing, up). */ +/************************************************************************/ +static int pj_adjust_axis( projCtx ctx, + const char *axis, int denormalize_flag, + long point_count, int point_offset, + double *x, double *y, double *z ) + +{ + double x_in, y_in, z_in = 0.0; + int i, i_axis; + + if( !denormalize_flag ) + { + for( i = 0; i < point_count; i++ ) + { + x_in = x[point_offset*i]; + y_in = y[point_offset*i]; + if( z ) + z_in = z[point_offset*i]; + + for( i_axis = 0; i_axis < 3; i_axis++ ) + { + double value; + + if( i_axis == 0 ) + value = x_in; + else if( i_axis == 1 ) + value = y_in; + else + value = z_in; + + switch( axis[i_axis] ) + { + case 'e': + x[point_offset*i] = value; break; + case 'w': + x[point_offset*i] = -value; break; + case 'n': + y[point_offset*i] = value; break; + case 's': + y[point_offset*i] = -value; break; + case 'u': + if( z ) z[point_offset*i] = value; break; + case 'd': + if( z ) z[point_offset*i] = -value; break; + default: + pj_ctx_set_errno( ctx, PJD_ERR_AXIS ); + return PJD_ERR_AXIS; + } + } /* i_axis */ + } /* i (point) */ + } + + else /* denormalize */ + { + for( i = 0; i < point_count; i++ ) + { + x_in = x[point_offset*i]; + y_in = y[point_offset*i]; + if( z ) + z_in = z[point_offset*i]; + + for( i_axis = 0; i_axis < 3; i_axis++ ) + { + double *target; + + if( i_axis == 2 && z == NULL ) + continue; + + if( i_axis == 0 ) + target = x; + else if( i_axis == 1 ) + target = y; + else + target = z; + + switch( axis[i_axis] ) + { + case 'e': + target[point_offset*i] = x_in; break; + case 'w': + target[point_offset*i] = -x_in; break; + case 'n': + target[point_offset*i] = y_in; break; + case 's': + target[point_offset*i] = -y_in; break; + case 'u': + target[point_offset*i] = z_in; break; + case 'd': + target[point_offset*i] = -z_in; break; + default: + pj_ctx_set_errno( ctx, PJD_ERR_AXIS ); + return PJD_ERR_AXIS; + } + } /* i_axis */ + } /* i (point) */ + } + + return 0; +} + diff --git a/src/pj_utils.c b/src/pj_utils.c index f9f668475..45e792c20 100644 --- a/src/pj_utils.c +++ b/src/pj_utils.c @@ -1,5 +1,5 @@ /****************************************************************************** - * $Id: pj_utils.c 1504 2009-01-06 02:11:57Z warmerdam $ + * $Id: pj_utils.c 1856 2010-06-11 03:26:04Z warmerdam $ * * Project: PROJ.4 * Purpose: Some utility functions we don't want to bother putting in @@ -77,80 +77,80 @@ PJ *pj_latlong_from_proj( PJ *pj_in ) pj_errno = 0; strcpy( defn, "+proj=latlong" ); - if( pj_param(pj_in->params, "tdatum").i ) + if( pj_param(pj_in->ctx, pj_in->params, "tdatum").i ) { got_datum = TRUE; sprintf( defn+strlen(defn), " +datum=%s", - pj_param(pj_in->params,"sdatum").s ); + pj_param(pj_in->ctx, pj_in->params,"sdatum").s ); } - else if( pj_param(pj_in->params, "tellps").i ) + else if( pj_param(pj_in->ctx, pj_in->params, "tellps").i ) { sprintf( defn+strlen(defn), " +ellps=%s", - pj_param(pj_in->params,"sellps").s ); + pj_param(pj_in->ctx, pj_in->params,"sellps").s ); } - else if( pj_param(pj_in->params, "ta").i ) + else if( pj_param(pj_in->ctx,pj_in->params, "ta").i ) { sprintf( defn+strlen(defn), " +a=%s", - pj_param(pj_in->params,"sa").s ); + pj_param(pj_in->ctx,pj_in->params,"sa").s ); - if( pj_param(pj_in->params, "tb").i ) + if( pj_param(pj_in->ctx,pj_in->params, "tb").i ) sprintf( defn+strlen(defn), " +b=%s", - pj_param(pj_in->params,"sb").s ); - else if( pj_param(pj_in->params, "tes").i ) + pj_param(pj_in->ctx,pj_in->params,"sb").s ); + else if( pj_param(pj_in->ctx,pj_in->params, "tes").i ) sprintf( defn+strlen(defn), " +es=%s", - pj_param(pj_in->params,"ses").s ); - else if( pj_param(pj_in->params, "tf").i ) + pj_param(pj_in->ctx,pj_in->params,"ses").s ); + else if( pj_param(pj_in->ctx,pj_in->params, "tf").i ) sprintf( defn+strlen(defn), " +f=%s", - pj_param(pj_in->params,"sf").s ); + pj_param(pj_in->ctx,pj_in->params,"sf").s ); else sprintf( defn+strlen(defn), " +es=%.16g", pj_in->es ); } else { - pj_errno = -13; + pj_ctx_set_errno( pj_in->ctx, -13 ); return NULL; } if( !got_datum ) { - if( pj_param(pj_in->params, "ttowgs84").i ) + if( pj_param(pj_in->ctx,pj_in->params, "ttowgs84").i ) sprintf( defn+strlen(defn), " +towgs84=%s", - pj_param(pj_in->params,"stowgs84").s ); + pj_param(pj_in->ctx,pj_in->params,"stowgs84").s ); - if( pj_param(pj_in->params, "tnadgrids").i ) + if( pj_param(pj_in->ctx,pj_in->params, "tnadgrids").i ) sprintf( defn+strlen(defn), " +nadgrids=%s", - pj_param(pj_in->params,"snadgrids").s ); + pj_param(pj_in->ctx,pj_in->params,"snadgrids").s ); } /* copy over some other information related to ellipsoid */ - if( pj_param(pj_in->params, "tR").i ) + if( pj_param(pj_in->ctx,pj_in->params, "tR").i ) sprintf( defn+strlen(defn), " +R=%s", - pj_param(pj_in->params,"sR").s ); + pj_param(pj_in->ctx,pj_in->params,"sR").s ); - if( pj_param(pj_in->params, "tR_A").i ) + if( pj_param(pj_in->ctx,pj_in->params, "tR_A").i ) sprintf( defn+strlen(defn), " +R_A" ); - if( pj_param(pj_in->params, "tR_V").i ) + if( pj_param(pj_in->ctx,pj_in->params, "tR_V").i ) sprintf( defn+strlen(defn), " +R_V" ); - if( pj_param(pj_in->params, "tR_a").i ) + if( pj_param(pj_in->ctx,pj_in->params, "tR_a").i ) sprintf( defn+strlen(defn), " +R_a" ); - if( pj_param(pj_in->params, "tR_lat_a").i ) + if( pj_param(pj_in->ctx,pj_in->params, "tR_lat_a").i ) sprintf( defn+strlen(defn), " +R_lat_a=%s", - pj_param(pj_in->params,"sR_lat_a").s ); + pj_param(pj_in->ctx,pj_in->params,"sR_lat_a").s ); - if( pj_param(pj_in->params, "tR_lat_g").i ) + if( pj_param(pj_in->ctx,pj_in->params, "tR_lat_g").i ) sprintf( defn+strlen(defn), " +R_lat_g=%s", - pj_param(pj_in->params,"sR_lat_g").s ); + pj_param(pj_in->ctx,pj_in->params,"sR_lat_g").s ); /* copy over prime meridian */ - if( pj_param(pj_in->params, "tpm").i ) + if( pj_param(pj_in->ctx,pj_in->params, "tpm").i ) sprintf( defn+strlen(defn), " +pm=%s", - pj_param(pj_in->params,"spm").s ); + pj_param(pj_in->ctx,pj_in->params,"spm").s ); - return pj_init_plus( defn ); + return pj_init_plus_ctx( pj_in->ctx, defn ); } diff --git a/src/proj_api.h b/src/proj_api.h index d1f643b6b..9c9022194 100644 --- a/src/proj_api.h +++ b/src/proj_api.h @@ -1,5 +1,5 @@ /****************************************************************************** - * $Id$ + * $Id: proj_api.h 1925 2010-10-19 16:22:55Z warmerdam $ * * Project: PROJ.4 * Purpose: Public (application) include file for PROJ.4 API, and constants. @@ -40,7 +40,7 @@ extern "C" { #endif /* Try to update this every version! */ -#define PJ_VERSION 470 +#define PJ_VERSION 480 extern char const pj_release[]; /* global release id string */ @@ -55,8 +55,10 @@ extern int pj_errno; /* global error return code */ typedef void *projPJ; #define projXY projUV #define projLP projUV + typedef void *projCtx; #else typedef PJ *projPJ; + typedef projCtx_t *projCtx; # define projXY XY # define projLP LP #endif @@ -77,10 +79,11 @@ int pj_geodetic_to_geocentric( double a, double es, long point_count, int point_offset, double *x, double *y, double *z ); int pj_compare_datums( projPJ srcdefn, projPJ dstdefn ); -int pj_apply_gridshift( const char *, int, +int pj_apply_gridshift( projCtx, const char *, int, long point_count, int point_offset, double *x, double *y, double *z ); void pj_deallocate_grids(void); +void pj_clear_initcache(void); int pj_is_latlong(projPJ); int pj_is_geocent(projPJ); void pj_pr_list(projPJ); @@ -89,6 +92,8 @@ void pj_set_finder( const char *(*)(const char *) ); void pj_set_searchpath ( int count, const char **path ); projPJ pj_init(int, char **); projPJ pj_init_plus(const char *); +projPJ pj_init_ctx( projCtx, int, char ** ); +projPJ pj_init_plus_ctx( projCtx, const char * ); char *pj_get_def(projPJ, int); projPJ pj_latlong_from_proj( projPJ ); void *pj_malloc(size_t); @@ -100,6 +105,26 @@ void pj_acquire_lock(void); void pj_release_lock(void); void pj_cleanup_lock(void); +projCtx pj_get_default_ctx(void); +projCtx pj_get_ctx( projPJ ); +void pj_set_ctx( projPJ, projCtx ); +projCtx pj_ctx_alloc(void); +void pj_ctx_free( projCtx ); +int pj_ctx_get_errno( projCtx ); +void pj_ctx_set_errno( projCtx, int ); +void pj_ctx_set_debug( projCtx, int ); +void pj_ctx_set_logger( projCtx, void (*)(void *, int, const char *) ); +void pj_ctx_set_app_data( projCtx, void * ); +void *pj_ctx_get_app_data( projCtx ); + +void pj_log( projCtx ctx, int level, const char *fmt, ... ); +void pj_stderr_logger( void *, int, const char * ); + +#define PJ_LOG_NONE 0 +#define PJ_LOG_ERROR 1 +#define PJ_LOG_DEBUG_MAJOR 2 +#define PJ_LOG_DEBUG_MINOR 3 + #ifdef __cplusplus } #endif diff --git a/src/proj_etmerc.c b/src/proj_etmerc.c new file mode 100644 index 000000000..3a3896003 --- /dev/null +++ b/src/proj_etmerc.c @@ -0,0 +1,252 @@ +/* +** libproj -- library of cartographic projections +** +** Copyright (c) 2008 Gerald I. Evenden +*/ + +/* +** Permission is hereby granted, free of charge, to any person obtaining +** a copy of this software and associated documentation files (the +** "Software"), to deal in the Software without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Software, and to +** permit persons to whom the Software is furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +/* The code in this file is largly based upon procedures: + * + * Written by: Knud Poder and Karsten Engsager + * + * Based on math from: R.Koenig and K.H. Weise, "Mathematische + * Grundlagen der hoeheren Geodaesie und Kartographie, + * Springer-Verlag, Berlin/Goettingen" Heidelberg, 1951. + * + * Modified and used here by permission of Reference Networks + * Division, Kort og Matrikelstyrelsen (KMS), Copenhagen, Denmark +*/ + + +#define PROJ_PARMS__ \ + double Qn; /* Merid. quad., scaled to the projection */ \ + double Zb; /* Radius vector in polar coord. systems */ \ + double cgb[5]; /* Constants for Gauss -> Geo lat */ \ + double cbg[5]; /* Constants for Geo lat -> Gauss */ \ + double utg[5]; /* Constants for transv. merc. -> geo */ \ + double gtu[5]; /* Constants for geo -> transv. merc. */ + +#define PROJ_LIB__ +#define PJ_LIB__ + +#include + +PROJ_HEAD(etmerc, "Extended Transverse Mercator") + "\n\tCyl, Sph\n\tlat_ts=(0)\nlat_0=(0)"; + +#define FABS(x) ((x)<0?-(x):(x)) + +#ifdef _GNU_SOURCE + inline +#endif + static double +gatg(double *p1, int len_p1, double B) { + double *p; + double h = 0., h1, h2 = 0., cos_2B; + + cos_2B = 2.*cos(2.0*B); + for (p = p1 + len_p1, h1 = *--p; p - p1; h2 = h1, h1 = h) + h = -h2 + cos_2B*h1 + *--p; + return (B + h*sin(2.0*B)); +} + +#ifdef _GNU_SOURCE + inline +#endif + static double +clenS(double *a, int size, double arg_r, double arg_i, double *R, double *I) { + double *p, r, i, hr, hr1, hr2, hi, hi1, hi2; + double sin_arg_r, cos_arg_r, sinh_arg_i, cosh_arg_i; + double exp_arg_i, pxe_arg_i; + + /* arguments */ + p = a + size; +#ifdef _GNU_SOURCE + sincos(arg_r, &sin_arg_r, &cos_arg_r); +#else + sin_arg_r = sin(arg_r); + cos_arg_r = cos(arg_r); +#endif + exp_arg_i = exp( arg_i); + pxe_arg_i = exp(-arg_i); + sinh_arg_i = (exp_arg_i-pxe_arg_i)/2; + cosh_arg_i = (exp_arg_i+pxe_arg_i)/2; + r = 2.0*cos_arg_r*cosh_arg_i; + i = -2.0*sin_arg_r*sinh_arg_i; + /* summation loop */ + for (hi1 = hr1 = hi = 0.0, hr = *--p; a - p;) { + hr2 = hr1; + hi2 = hi1; + hr1 = hr; + hi1 = hi; + hr = -hr2 + r*hr1 - i*hi1 + *--p; + hi = -hi2 + i*hr1 + r*hi1; + } + r = sin_arg_r*cosh_arg_i; + i = cos_arg_r*sinh_arg_i; + *R = r*hr - i*hi; + *I = r*hi + i*hr; + return(*R); +} + static double +clens(double *a, int size, double arg_r) { + double *p, r, hr, hr1, hr2, cos_arg_r; + + p = a + size; + cos_arg_r = cos(arg_r); + r = 2.0*cos_arg_r; + /* summation loop */ + for (hr1 = 0.0, hr = *--p; a - p;) { + hr2 = hr1; + hr1 = hr; + hr = -hr2 + r*hr1 + *--p; + } + return(sin(arg_r)*hr); +} + + +FORWARD(e_forward); /* ellipsoid */ + double sin_Cn, cos_Cn, cos_Ce, sin_Ce, dCn, dCe; + double Cn = lp.phi, Ce = lp.lam; + + /* ell. LAT, LNG -> Gaussian LAT, LNG */ + Cn = gatg(P->cbg, 5, Cn); + /* Gaussian LAT, LNG -> compl. sph. LAT */ +#ifdef _GNU_SOURCE + sincos(Cn, &sin_Cn, &cos_Cn); + sincos(Ce, &sin_Ce, &cos_Ce); +#else + sin_Cn = sin(Cn); + cos_Cn = cos(Cn); + sin_Ce = sin(Ce); + cos_Ce = cos(Ce); +#endif + + Cn = atan2(sin_Cn, cos_Ce*cos_Cn); + Ce = atan2(sin_Ce*cos_Cn, hypot(sin_Cn, cos_Cn*cos_Ce)); + /* compl. sph. N, E -> ell. norm. N, E */ + Ce = log(tan(FORTPI + Ce*0.5)); + Cn += clenS(P->gtu, 5, 2.*Cn, 2.*Ce, &dCn, &dCe); + Ce += dCe; + if (FABS(Ce) <= 2.623395162778) { + xy.y = P->Qn * Cn + P->Zb; /* Northing */ + xy.x = P->Qn * Ce; /* Easting */ + } else + xy.x = xy.y = HUGE_VAL; + return (xy); +} + + +INVERSE(e_inverse); /* ellipsoid */ + double sin_Cn, cos_Cn, cos_Ce, sin_Ce, dCn, dCe; + double Cn = xy.y, Ce = xy.x; + + /* normalize N, E */ + Cn = (Cn - P->Zb)/P->Qn; + Ce = Ce/P->Qn; + if (FABS(Ce) <= 2.623395162778) { /* 150 degrees */ + /* norm. N, E -> compl. sph. LAT, LNG */ + Cn += clenS(P->utg, 5, 2.*Cn, 2.*Ce, &dCn, &dCe); + Ce += dCe; + Ce = 2.0*(atan(exp(Ce)) - FORTPI); + /* compl. sph. LAT -> Gaussian LAT, LNG */ +#ifdef _GNU_SOURCE + sincos(Cn, &sin_Cn, &cos_Cn); + sincos(Ce, &sin_Ce, &cos_Ce); +#else + sin_Cn = sin(Cn); + cos_Cn = cos(Cn); + sin_Ce = sin(Ce); + cos_Ce = cos(Ce); +#endif + Ce = atan2(sin_Ce, cos_Ce*cos_Cn); + Cn = atan2(sin_Cn*cos_Ce, hypot(sin_Ce, cos_Ce*cos_Cn)); + /* Gaussian LAT, LNG -> ell. LAT, LNG */ + lp.phi = gatg(P->cgb, 5, Cn); + lp.lam = Ce; + } + else + lp.phi = lp.lam = HUGE_VAL; + return (lp); +} + + +FREEUP; if (P) free(P); } + + +ENTRY0(etmerc) + double f, n, np, Z; + + if (P->es <= 0.) E_ERROR(-34); + f = 1. - sqrt(1. - P->es); + /* third flattening */ + np = n = f/(2.0 - f); + + /* COEF. OF TRIG SERIES GEO <-> GAUSS */ + /* cgb := Gaussian -> Geodetic, KW p190 - 191 (61) - (62) */ + /* cbg := Geodetic -> Gaussian, KW p186 - 187 (51) - (52) */ + /* 5 degree : Engsager and Poder: ICC2007 */ + P->cgb[0] = n*( 2.0 + n*(-2.0/3.0 + n*(-2.0 + n*(116.0/45.0 + n*(26.0/45.0))))); + P->cbg[0] = n*(-2.0 + n*( 2.0/3.0 + n*( 4.0/3.0 + n*(-82.0/45.0 + n*(32.0/45.0))))); + np *= n; + P->cgb[1] = np*(7.0/3.0 + n*( -8.0/5.0 + n*(-227.0/45.0 + n*(2704.0/315.0)))); + P->cbg[1] = np*(5.0/3.0 + n*(-16.0/15.0 + n*( -13.0/ 9.0 + n*( 904.0/315.0)))); + np *= n; + P->cgb[2] = np*( 56.0/15.0 + n*(-136.0/35.0 + n*(1262.0/105.0))); + P->cbg[2] = np*(-26.0/15.0 + n*( 34.0/21.0 + n*( 8.0/ 5.0))); + np *= n; + P->cgb[3] = np*(4279.0/630.0 + n*(-322.0/35.0)); + P->cbg[3] = np*(1237.0/630.0 + n*( -12.0/ 5.0)); + np *= n; + P->cgb[4] = np*(4174.0/315.0); + P->cbg[4] = np*(-734.0/315.0); + + /* Constants of the projections */ + /* Transverse Mercator (UTM, ITM, etc) */ + np = n*n; + /* Norm. mer. quad, K&W p.50 (96), p.19 (38b), p.5 (2) */ + P->Qn = P->k0/(1 + n) * (1. + np*(1./4.0 + np*(1./64.0 + np/256.0))); + /* coef of trig series */ + /* utg := ell. N, E -> sph. N, E, KW p194 (65) */ + /* gtu := sph. N, E -> ell. N, E, KW p196 (69) */ + P->utg[0] = n*(-0.5 + n*( 2.0/3.0 + n*(-37.0/96.0 + n*( 1.0/360.0 + n*( 81.0/512.0))))); + P->gtu[0] = n*( 0.5 + n*(-2.0/3.0 + n*( 5.0/16.0 + n*(41.0/180.0 + n*(-127.0/288.0))))); + P->utg[1] = np*(-1.0/48.0 + n*(-1.0/15.0 + n*(437.0/1440.0 + n*(-46.0/105.0)))); + P->gtu[1] = np*(13.0/48.0 + n*(-3.0/5.0 + n*(557.0/1440.0 + n*(281.0/630.0)))); + np *= n; + P->utg[2] = np*(-17.0/480.0 + n*( 37.0/840.0 + n*( 209.0/ 4480.0))); + P->gtu[2] = np*( 61.0/240.0 + n*(-103.0/140.0 + n*(15061.0/26880.0))); + np *= n; + P->utg[3] = np*(-4397.0/161280.0 + n*( 11.0/504.0)); + P->gtu[3] = np*(49561.0/161280.0 + n*(-179.0/168.0)); + np *= n; + P->utg[4] = np*(-4583.0/161280.0); + P->gtu[4] = np*(34729.0/ 80640.0); + /* Gaussian latitude value of the origin latitude */ + Z = gatg(P->cbg, 5, P->phi0); + /* Origin northing minus true northing at the origin latitude */ + /* i.e. true northing = N - P->Zb */ + P->Zb = - P->Qn*(Z + clens(P->gtu, 5, 2.0*Z)); + P->inv = e_inverse; + P->fwd = e_forward; +ENDENTRY(P) diff --git a/src/proj_mdist.c b/src/proj_mdist.c index 9edde83f7..465ebeb73 100644 --- a/src/proj_mdist.c +++ b/src/proj_mdist.c @@ -4,7 +4,7 @@ ** Copyright (c) 2003, 2006 Gerald I. Evenden */ static const char -LIBPROJ_ID[] = "$Id: proj_mdist.c 1504 2009-01-06 02:11:57Z warmerdam $"; +LIBPROJ_ID[] = "$Id: proj_mdist.c 1856 2010-06-11 03:26:04Z warmerdam $"; /* ** Permission is hereby granted, free of charge, to any person obtaining ** a copy of this software and associated documentation files (the @@ -102,7 +102,7 @@ proj_mdist(double phi, double sphi, double cphi, const void *b) { return(D + sc * sum); } double -proj_inv_mdist(double dist, const void *b) { +proj_inv_mdist(projCtx ctx, double dist, const void *b) { double s, t, phi, k; int i; @@ -118,6 +118,6 @@ proj_inv_mdist(double dist, const void *b) { return phi; } /* convergence failed */ - pj_errno = -17; + pj_ctx_set_errno(ctx, -17); return phi; } diff --git a/src/proj_rouss.c b/src/proj_rouss.c index 594c237dd..f2c49e2f5 100644 --- a/src/proj_rouss.c +++ b/src/proj_rouss.c @@ -4,7 +4,7 @@ ** Copyright (c) 2003, 2006 Gerald I. Evenden */ static const char -LIBPROJ_ID[] = "$Id: proj_rouss.c 1504 2009-01-06 02:11:57Z warmerdam $"; +LIBPROJ_ID[] = "$Id: proj_rouss.c 1856 2010-06-11 03:26:04Z warmerdam $"; /* ** Permission is hereby granted, free of charge, to any person obtaining ** a copy of this software and associated documentation files (the @@ -61,7 +61,7 @@ INVERSE(e_inverse); /* ellipsoid */ s = P->s0 + y*(1.+y2*(-P->D2+P->D8*y2))+ x2*(-P->D1+y*(-P->D3+y*(-P->D5+y*(-P->D7+y*P->D11)))+ x2*(P->D4+y*(P->D6+y*P->D10)-x2*P->D9)); - lp.phi=proj_inv_mdist(s, P->en); + lp.phi=proj_inv_mdist(P->ctx, s, P->en); s = sin(lp.phi); lp.lam=al * sqrt(1. - P->es * s * s)/cos(lp.phi); return (lp); diff --git a/src/projects.h b/src/projects.h index 822a53cca..8230e1e64 100644 --- a/src/projects.h +++ b/src/projects.h @@ -1,5 +1,5 @@ /****************************************************************************** - * $Id$ + * $Id: projects.h 2121 2011-11-22 22:51:47Z warmerdam $ * * Project: PROJ.4 * Purpose: Primary (private) include file for PROJ.4 library. @@ -44,6 +44,7 @@ #include #include #include +#include #ifdef __cplusplus #define C_NAMESPACE extern "C" @@ -124,6 +125,14 @@ extern double hypot(double, double); #define DIR_CHAR '/' #endif +/* proj thread context */ +typedef struct { + int last_errno; + int debug_level; + void (*logger)(void *, int, const char *); + void *app_data; +} projCtx_t; + /* datum_type values */ #define PJD_UNKNOWN 0 #define PJD_3PARAM 1 @@ -131,8 +140,10 @@ extern double hypot(double, double); #define PJD_GRIDSHIFT 3 #define PJD_WGS84 4 /* WGS84 (or anything considered equivelent) */ -/* datum system errors */ -#define PJD_ERR_GEOCENTRIC -45 +/* library errors */ +#define PJD_ERR_GEOCENTRIC -45 +#define PJD_ERR_AXIS -47 +#define PJD_ERR_GRID_AREA -48 #define USE_PROJUV @@ -206,6 +217,7 @@ typedef struct ARG_list { typedef struct PJconsts { + projCtx_t *ctx; XY (*fwd)(LP, struct PJconsts *); LP (*inv)(XY, struct PJconsts *); void (*spc)(LP, struct PJconsts *, struct FACTORS *); @@ -232,8 +244,18 @@ typedef struct PJconsts { int datum_type; /* PJD_UNKNOWN/3PARAM/7PARAM/GRIDSHIFT/WGS84 */ double datum_params[7]; + struct _pj_gi **gridlist; + int gridlist_count; + + int has_geoid_vgrids; + struct _pj_gi **vgridlist_geoid; + int vgridlist_geoid_count; + double vto_meter, vfr_meter; + double from_greenwich; /* prime meridian offset (in radians) */ double long_wrap_center; /* 0.0 for -180 to 180, actually in radians*/ + int is_long_wrap_set; + char axis[4]; #ifdef PROJ_PARMS__ PROJ_PARMS__ @@ -287,6 +309,7 @@ extern struct PJ_PRIME_MERIDIANS pj_prime_meridians[]; C_NAMESPACE_VAR const char * const pj_s_##name = des_##name; \ C_NAMESPACE PJ *pj_##name(PJ *P) { if (!P) { \ if( (P = (PJ*) pj_malloc(sizeof(PJ))) != NULL) { \ + memset( P, 0, sizeof(PJ) ); \ P->pfree = freeup; P->fwd = 0; P->inv = 0; \ P->spc = 0; P->descr = des_##name; #define ENTRYX } return P; } else { @@ -294,10 +317,10 @@ extern struct PJ_PRIME_MERIDIANS pj_prime_meridians[]; #define ENTRY1(name, a) ENTRYA(name) P->a = 0; ENTRYX #define ENTRY2(name, a, b) ENTRYA(name) P->a = 0; P->b = 0; ENTRYX #define ENDENTRY(p) } return (p); } -#define E_ERROR(err) { pj_errno = err; freeup(P); return(0); } +#define E_ERROR(err) { pj_ctx_set_errno( P->ctx, err); freeup(P); return(0); } #define E_ERROR_0 { freeup(P); return(0); } -#define F_ERROR { pj_errno = -20; return(xy); } -#define I_ERROR { pj_errno = -20; return(lp); } +#define F_ERROR { pj_ctx_set_errno( P->ctx, -20); return(xy); } +#define I_ERROR { pj_ctx_set_errno( P->ctx, -20); return(lp); } #define FORWARD(name) static XY name(LP lp, PJ *P) { XY xy = {0.0,0.0} #define INVERSE(name) static LP name(XY xy, PJ *P) { LP lp = {0.0,0.0} #define FREEUP static void freeup(PJ *P) { @@ -332,35 +355,35 @@ typedef struct _pj_gi { /* procedure prototypes */ double dmstor(const char *, char **); +double dmstor_ctx(projCtx ctx, const char *, char **); void set_rtodms(int, int); char *rtodms(char *, double, int, int); double adjlon(double); -double aacos(double), aasin(double), asqrt(double), aatan2(double, double); -PVALUE pj_param(paralist *, char *); +double aacos(projCtx,double), aasin(projCtx,double), asqrt(double), aatan2(double, double); +PVALUE pj_param(projCtx ctx, paralist *, const char *); paralist *pj_mkparam(char *); -int pj_ell_set(paralist *, double *, double *); -int pj_datum_set(paralist *, PJ *); +int pj_ell_set(projCtx ctx, paralist *, double *, double *); +int pj_datum_set(projCtx,paralist *, PJ *); int pj_prime_meridian_set(paralist *, PJ *); int pj_angular_units_set(paralist *, PJ *); paralist *pj_clone_paralist( const paralist* ); -void pj_clear_initcache(void); paralist*pj_search_initcache( const char *filekey ); void pj_insert_initcache( const char *filekey, const paralist *list); double *pj_enfn(double); double pj_mlfn(double, double, double, double *); -double pj_inv_mlfn(double, double, double *); +double pj_inv_mlfn(projCtx, double, double, double *); double pj_qsfn(double, double, double); double pj_tsfn(double, double, double); double pj_msfn(double, double, double); -double pj_phi2(double, double); +double pj_phi2(projCtx, double, double); double pj_qsfn_(double, PJ *); double *pj_authset(double); double pj_authlat(double, double *); COMPLEX pj_zpoly1(COMPLEX, COMPLEX *, int); COMPLEX pj_zpolyd1(COMPLEX, COMPLEX *, int, COMPLEX *); -FILE *pj_open_lib(char *, char *); +FILE *pj_open_lib(projCtx, char *, char *); int pj_deriv(LP, double, PJ *, struct DERIVS *); int pj_factors(LP, PJ *, double, struct FACTORS *); @@ -390,26 +413,42 @@ int bch2bps(projUV, projUV, projUV **, int, int); /* nadcon related protos */ LP nad_intr(LP, struct CTABLE *); LP nad_cvt(LP, int, struct CTABLE *); -struct CTABLE *nad_init(char *); -struct CTABLE *nad_ctable_init( FILE * fid ); -int nad_ctable_load( struct CTABLE *, FILE * fid ); +struct CTABLE *nad_init(projCtx ctx, char *); +struct CTABLE *nad_ctable_init( projCtx ctx, FILE * fid ); +int nad_ctable_load( projCtx ctx, struct CTABLE *, FILE * fid ); +struct CTABLE *nad_ctable2_init( projCtx ctx, FILE * fid ); +int nad_ctable2_load( projCtx ctx, struct CTABLE *, FILE * fid ); void nad_free(struct CTABLE *); /* higher level handling of datum grid shift files */ -PJ_GRIDINFO **pj_gridlist_from_nadgrids( const char *, int * ); +int pj_apply_vgridshift( PJ *defn, const char *listname, + PJ_GRIDINFO ***gridlist_p, + int *gridlist_count_p, + int inverse, + long point_count, int point_offset, + double *x, double *y, double *z ); +int pj_apply_gridshift_2( PJ *defn, int inverse, + long point_count, int point_offset, + double *x, double *y, double *z ); +int pj_apply_gridshift_3( projCtx ctx, + PJ_GRIDINFO **gridlist, int gridlist_count, + int inverse, long point_count, int point_offset, + double *x, double *y, double *z ); + +PJ_GRIDINFO **pj_gridlist_from_nadgrids( projCtx, const char *, int * ); void pj_deallocate_grids(); -PJ_GRIDINFO *pj_gridinfo_init( const char * ); -int pj_gridinfo_load( PJ_GRIDINFO * ); -void pj_gridinfo_free( PJ_GRIDINFO * ); +PJ_GRIDINFO *pj_gridinfo_init( projCtx, const char * ); +int pj_gridinfo_load( projCtx, PJ_GRIDINFO * ); +void pj_gridinfo_free( projCtx, PJ_GRIDINFO * ); void *proj_mdist_ini(double); double proj_mdist(double, double, double, const void *); -double proj_inv_mdist(double, const void *); +double proj_inv_mdist(projCtx ctx, double, const void *); void *pj_gauss_ini(double, double, double *,double *); -LP pj_gauss(LP, const void *); -LP pj_inv_gauss(LP, const void *); +LP pj_gauss(projCtx, LP, const void *); +LP pj_inv_gauss(projCtx, LP, const void *); extern char const pj_release[]; @@ -420,8 +459,12 @@ struct PJ_LIST *pj_get_list_ref( void ); struct PJ_PRIME_MERIDIANS *pj_get_prime_meridians_ref( void ); #ifndef DISABLE_CVSID -# define PJ_CVSID(string) static char pj_cvsid[] = string; \ +# if defined(__GNUC__) && __GNUC__ >= 4 +# define PJ_CVSID(string) static char pj_cvsid[] __attribute__((used)) = string; +# else +# define PJ_CVSID(string) static char pj_cvsid[] = string; \ static char *cvsid_aw() { return( cvsid_aw() ? ((char *) NULL) : pj_cvsid ); } +# endif #else # define PJ_CVSID(string) #endif diff --git a/src/pycompat.h b/src/pycompat.h new file mode 100644 index 000000000..df28c383d --- /dev/null +++ b/src/pycompat.h @@ -0,0 +1,7 @@ +#include "Python.h" + +/* Suggested by M. v. Loewis: http://mail.python.org/pipermail/python-dev/2006-March/062561.html */ + +#if (PY_VERSION_HEX < 0x02050000) +typedef int Py_ssize_t; +#endif diff --git a/src/vector1.c b/src/vector1.c index 30fca1cac..b3023ee59 100644 --- a/src/vector1.c +++ b/src/vector1.c @@ -15,7 +15,7 @@ freev2(void **v, int nrows) { vector2(int nrows, int ncols, int size) { void **s; - if (s = (void **)pj_malloc(sizeof(void *) * nrows)) { + if ((s = (void **)pj_malloc(sizeof(void *) * nrows)) != NULL) { int rsize, i; rsize = size * ncols; From dc24ab2a7b8d84a1e9e0f7f8b102c5e276af1389 Mon Sep 17 00:00:00 2001 From: Jeff Whitaker Date: Fri, 16 Dec 2011 09:04:48 -0700 Subject: [PATCH 02/14] update to pyproj 1.9.0 --- nad2bin.c | 403 +++++++++++++++++++++++++++++++++++++++++++++++------- setup.py | 2 +- 2 files changed, 352 insertions(+), 53 deletions(-) diff --git a/nad2bin.c b/nad2bin.c index db4bb0766..807859ba1 100644 --- a/nad2bin.c +++ b/nad2bin.c @@ -1,65 +1,364 @@ -/* Convert bivariate ASCII NAD27 to NAD83 tables to binary structure */ +/* Convert bivariate ASCII NAD27 to NAD83 tables to NTv2 binary structure */ #include #include +#include + #define PJ_LIB__ #include #define U_SEC_TO_RAD 4.848136811095359935899141023e-12 - static char -*usage = "phi * (3600.0 / (PI/180.0)); + row_buf[i*4+1] = cvs->lam * (3600.0 / (PI/180.0)); + + /* We leave the accuracy values as zero */ + } + + if( !IS_LSB ) + swap_words( row_buf, 4, ct.lim.lam * 4 ); + + if( fwrite( row_buf, sizeof(float), ct.lim.lam*4, fp ) + != 4 * ct.lim.lam ) + { + perror( "write()" ); + exit( 2 ); + } + } + } + + fclose( fp ); + exit(0); /* normal completion */ + } + + fprintf( stderr, "Unsupported format, nothing written.\n" ); + exit( 3 ); } diff --git a/setup.py b/setup.py index 6a444433d..5eac2f786 100644 --- a/setup.py +++ b/setup.py @@ -94,7 +94,7 @@ def checkversion(GEOS_dir): cc = ccompiler.new_compiler() sysconfig.customize_compiler(cc) cc.set_include_dirs(['src']) - objects = cc.compile(['nad2bin.c']) + objects = cc.compile(['nad2bin.c', 'src/pj_malloc.c']) execname = 'nad2bin' cc.link_executable(objects, execname) llafiles = glob.glob('datumgrid/*.lla') From 066b56d4767b3f1e2dbdf8dd2315e170e31a5737 Mon Sep 17 00:00:00 2001 From: Jeff Whitaker Date: Fri, 16 Dec 2011 09:06:30 -0700 Subject: [PATCH 03/14] update to pyproj 1.9.0 --- lib/mpl_toolkits/basemap/data/epsg | 5795 ++++++++++++--------- lib/mpl_toolkits/basemap/data/esri.extra | 4 - lib/mpl_toolkits/basemap/data/other.extra | 4 + lib/mpl_toolkits/basemap/data/test27 | 13 +- lib/mpl_toolkits/basemap/data/test83 | 13 +- lib/mpl_toolkits/basemap/data/testntv2 | 13 +- lib/mpl_toolkits/basemap/data/testvarious | 165 +- lib/mpl_toolkits/basemap/pyproj.py | 292 +- 8 files changed, 3730 insertions(+), 2569 deletions(-) diff --git a/lib/mpl_toolkits/basemap/data/epsg b/lib/mpl_toolkits/basemap/data/epsg index fbb2c9a82..c11e183f0 100644 --- a/lib/mpl_toolkits/basemap/data/epsg +++ b/lib/mpl_toolkits/basemap/data/epsg @@ -7,7 +7,7 @@ # IGRS <3889> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # MGI 1901 -<3906> +proj=longlat +ellps=bessel +no_defs <> +<3906> +proj=longlat +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +no_defs <> # Unknown datum based upon the Airy 1830 ellipsoid <4001> +proj=longlat +ellps=airy +no_defs <> # Unknown datum based upon the Airy Modified 1849 ellipsoid @@ -51,7 +51,7 @@ # Unknown datum based upon the International 1924 ellipsoid <4022> +proj=longlat +ellps=intl +no_defs <> # MOLDREF99 -<4023> +proj=longlat +ellps=GRS80 +no_defs <> +<4023> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Unknown datum based upon the Krassowsky 1940 ellipsoid <4024> +proj=longlat +ellps=krass +no_defs <> # Unknown datum based upon the NWL 9D ellipsoid @@ -105,19 +105,19 @@ # Greek <4120> +proj=longlat +ellps=bessel +no_defs <> # GGRS87 -<4121> +proj=longlat +ellps=GRS80 +datum=GGRS87 +no_defs <> +<4121> +proj=longlat +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +no_defs <> # ATS77 <4122> +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs <> # KKJ -<4123> +proj=longlat +ellps=intl +no_defs <> +<4123> +proj=longlat +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +no_defs <> # RT90 -<4124> +proj=longlat +ellps=bessel +no_defs <> +<4124> +proj=longlat +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +no_defs <> # Samboja <4125> +proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs <> # LKS94 (ETRS89) <4126> +proj=longlat +ellps=GRS80 +no_defs <> # Tete -<4127> +proj=longlat +ellps=clrk66 +no_defs <> +<4127> +proj=longlat +ellps=clrk66 +towgs84=219.315,168.975,-166.145,0.198,5.926,-2.356,-57.104 +no_defs <> # Madzansua <4128> +proj=longlat +ellps=clrk66 +no_defs <> # Observatario @@ -125,15 +125,15 @@ # Moznet <4130> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +no_defs <> # Indian 1960 -<4131> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <> +<4131> +proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +no_defs <> # FD58 -<4132> +proj=longlat +ellps=clrk80 +no_defs <> +<4132> +proj=longlat +ellps=clrk80 +towgs84=-239.1,-170.02,397.5,0,0,0,0 +no_defs <> # EST92 <4133> +proj=longlat +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +no_defs <> # PSD93 -<4134> +proj=longlat +ellps=clrk80 +no_defs <> +<4134> +proj=longlat +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101 +no_defs <> # Old Hawaiian -<4135> +proj=longlat +ellps=clrk66 +no_defs <> +<4135> +proj=longlat +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +no_defs <> # St. Lawrence Island <4136> +proj=longlat +ellps=clrk66 +no_defs <> # St. Paul Island @@ -151,9 +151,9 @@ # Abidjan 1987 <4143> +proj=longlat +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +no_defs <> # Kalianpur 1937 -<4144> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <> +<4144> +proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=282,726,254,0,0,0,0 +no_defs <> # Kalianpur 1962 -<4145> +proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs <> +<4145> +proj=longlat +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +no_defs <> # Kalianpur 1975 <4146> +proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +no_defs <> # Hanoi 1972 @@ -161,27 +161,27 @@ # Hartebeesthoek94 <4148> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # CH1903 -<4149> +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs <> +<4149> +proj=longlat +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +no_defs <> # CH1903+ <4150> +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs <> # CHTRF95 <4151> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # NAD83(HARN) -<4152> +proj=longlat +ellps=GRS80 +no_defs <> +<4152> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Rassadiran <4153> +proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +no_defs <> # ED50(ED77) -<4154> +proj=longlat +ellps=intl +no_defs <> +<4154> +proj=longlat +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +no_defs <> # Dabola 1981 <4155> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +no_defs <> # S-JTSK -<4156> +proj=longlat +ellps=bessel +no_defs <> +<4156> +proj=longlat +ellps=bessel +towgs84=589,76,480,0,0,0,0 +no_defs <> # Mount Dillon <4157> +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs <> # Naparima 1955 -<4158> +proj=longlat +ellps=intl +no_defs <> +<4158> +proj=longlat +ellps=intl +towgs84=-0.465,372.095,171.736,0,0,0,0 +no_defs <> # ELD79 -<4159> +proj=longlat +ellps=intl +no_defs <> +<4159> +proj=longlat +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +no_defs <> # Chos Malal 1914 <4160> +proj=longlat +ellps=intl +no_defs <> # Pampa del Castillo @@ -199,7 +199,7 @@ # NZGD2000 <4167> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Accra -<4168> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs <> +<4168> +proj=longlat +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +no_defs <> # American Samoa 1962 <4169> +proj=longlat +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +no_defs <> # SIRGAS 1995 @@ -217,15 +217,15 @@ # Australian Antarctic <4176> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Pulkovo 1942(83) -<4178> +proj=longlat +ellps=krass +no_defs <> +<4178> +proj=longlat +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +no_defs <> # Pulkovo 1942(58) -<4179> +proj=longlat +ellps=krass +no_defs <> +<4179> +proj=longlat +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +no_defs <> # EST97 <4180> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Luxembourg 1930 -<4181> +proj=longlat +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +no_defs <> +<4181> +proj=longlat +ellps=intl +towgs84=-189.681,18.3463,-42.7695,-0.33746,-3.09264,2.53861,0.4598 +no_defs <> # Azores Occidental 1939 -<4182> +proj=longlat +ellps=intl +no_defs <> +<4182> +proj=longlat +ellps=intl +towgs84=-425,-169,81,0,0,0,0 +no_defs <> # Azores Central 1948 <4183> +proj=longlat +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +no_defs <> # Azores Oriental 1940 @@ -237,7 +237,7 @@ # REGVEN <4189> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # POSGAR 98 -<4190> +proj=longlat +ellps=GRS80 +no_defs <> +<4190> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Albanian 1987 <4191> +proj=longlat +ellps=krass +no_defs <> # Douala 1948 @@ -245,7 +245,7 @@ # Manoca 1962 <4193> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs <> # Qornoq 1927 -<4194> +proj=longlat +ellps=intl +no_defs <> +<4194> +proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs <> # Scoresbysund 1952 <4195> +proj=longlat +ellps=intl +towgs84=105,326,-102.5,0,0,0.814,-0.6 +no_defs <> # Ammassalik 1958 @@ -257,69 +257,69 @@ # Egypt 1930 <4199> +proj=longlat +ellps=intl +no_defs <> # Pulkovo 1995 -<4200> +proj=longlat +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +no_defs <> +<4200> +proj=longlat +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +no_defs <> # Adindan -<4201> +proj=longlat +ellps=clrk80 +no_defs <> +<4201> +proj=longlat +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +no_defs <> # AGD66 -<4202> +proj=longlat +ellps=aust_SA +no_defs <> +<4202> +proj=longlat +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +no_defs <> # AGD84 -<4203> +proj=longlat +ellps=aust_SA +no_defs <> +<4203> +proj=longlat +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +no_defs <> # Ain el Abd -<4204> +proj=longlat +ellps=intl +no_defs <> +<4204> +proj=longlat +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +no_defs <> # Afgooye <4205> +proj=longlat +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +no_defs <> # Agadez <4206> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Lisbon -<4207> +proj=longlat +ellps=intl +no_defs <> +<4207> +proj=longlat +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +no_defs <> # Aratu -<4208> +proj=longlat +ellps=intl +no_defs <> +<4208> +proj=longlat +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +no_defs <> # Arc 1950 -<4209> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs <> +<4209> +proj=longlat +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +no_defs <> # Arc 1960 -<4210> +proj=longlat +ellps=clrk80 +no_defs <> +<4210> +proj=longlat +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +no_defs <> # Batavia -<4211> +proj=longlat +ellps=bessel +no_defs <> +<4211> +proj=longlat +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +no_defs <> # Barbados 1938 <4212> +proj=longlat +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +no_defs <> # Beduaram <4213> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +no_defs <> # Beijing 1954 -<4214> +proj=longlat +ellps=krass +no_defs <> +<4214> +proj=longlat +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +no_defs <> # Belge 1950 <4215> +proj=longlat +ellps=intl +no_defs <> # Bermuda 1957 -<4216> +proj=longlat +ellps=clrk66 +no_defs <> +<4216> +proj=longlat +ellps=clrk66 +towgs84=-73,213,296,0,0,0,0 +no_defs <> # Bogota 1975 <4218> +proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +no_defs <> # Bukit Rimpah <4219> +proj=longlat +ellps=bessel +towgs84=-384,664,-48,0,0,0,0 +no_defs <> # Camacupa -<4220> +proj=longlat +ellps=clrk80 +no_defs <> +<4220> +proj=longlat +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +no_defs <> # Campo Inchauspe -<4221> +proj=longlat +ellps=intl +no_defs <> +<4221> +proj=longlat +ellps=intl +towgs84=-148,136,90,0,0,0,0 +no_defs <> # Cape -<4222> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs <> +<4222> +proj=longlat +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +no_defs <> # Carthage -<4223> +proj=longlat +a=6378249.2 +b=6356515 +datum=carthage +no_defs <> +<4223> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +no_defs <> # Chua -<4224> +proj=longlat +ellps=intl +no_defs <> -# Corrego Alegre +<4224> +proj=longlat +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +no_defs <> +# Corrego Alegre 1970-72 <4225> +proj=longlat +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +no_defs <> # Cote d'Ivoire <4226> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Deir ez Zor -<4227> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> +<4227> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +no_defs <> # Douala <4228> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Egypt 1907 -<4229> +proj=longlat +ellps=helmert +no_defs <> +<4229> +proj=longlat +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +no_defs <> # ED50 -<4230> +proj=longlat +ellps=intl +no_defs <> +<4230> +proj=longlat +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +no_defs <> # ED87 -<4231> +proj=longlat +ellps=intl +no_defs <> +<4231> +proj=longlat +ellps=intl +towgs84=-83.11,-97.38,-117.22,0.00569291,-0.0446976,0.0442851,0.1218 +no_defs <> # Fahud -<4232> +proj=longlat +ellps=clrk80 +no_defs <> +<4232> +proj=longlat +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +no_defs <> # Gandajika 1970 <4233> +proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs <> # Garoua @@ -329,17 +329,17 @@ # Hu Tzu Shan 1950 <4236> +proj=longlat +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +no_defs <> # HD72 -<4237> +proj=longlat +ellps=GRS67 +no_defs <> +<4237> +proj=longlat +ellps=GRS67 +towgs84=52.17,-71.82,-14.9,0,0,0,0 +no_defs <> # ID74 -<4238> +proj=longlat +a=6378160 +b=6356774.50408554 +no_defs <> +<4238> +proj=longlat +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +no_defs <> # Indian 1954 <4239> +proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +no_defs <> # Indian 1975 -<4240> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <> +<4240> +proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +no_defs <> # Jamaica 1875 <4241> +proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs <> # JAD69 -<4242> +proj=longlat +ellps=clrk66 +no_defs <> +<4242> +proj=longlat +ellps=clrk66 +towgs84=70,207,389.5,0,0,0,0 +no_defs <> # Kalianpur 1880 <4243> +proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs <> # Kandawala @@ -351,7 +351,7 @@ # La Canoa <4247> +proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +no_defs <> # PSAD56 -<4248> +proj=longlat +ellps=intl +no_defs <> +<4248> +proj=longlat +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +no_defs <> # Lake <4249> +proj=longlat +ellps=intl +no_defs <> # Leigon @@ -361,9 +361,9 @@ # Lome <4252> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Luzon 1911 -<4253> +proj=longlat +ellps=clrk66 +no_defs <> +<4253> +proj=longlat +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +no_defs <> # Hito XVIII 1963 -<4254> +proj=longlat +ellps=intl +no_defs <> +<4254> +proj=longlat +ellps=intl +towgs84=16,196,93,0,0,0,0 +no_defs <> # Herat North <4255> +proj=longlat +ellps=intl +towgs84=-333,-222,114,0,0,0,0 +no_defs <> # Mahe 1971 @@ -371,9 +371,9 @@ # Makassar <4257> +proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +no_defs <> # ETRS89 -<4258> +proj=longlat +ellps=GRS80 +no_defs <> +<4258> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Malongo 1987 -<4259> +proj=longlat +ellps=intl +no_defs <> +<4259> +proj=longlat +ellps=intl +towgs84=-254.1,-5.36,-100.29,0,0,0,0 +no_defs <> # Manoca <4260> +proj=longlat +ellps=clrk80 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs <> # Merchich @@ -381,35 +381,35 @@ # Massawa <4262> +proj=longlat +ellps=bessel +towgs84=639,405,60,0,0,0,0 +no_defs <> # Minna -<4263> +proj=longlat +ellps=clrk80 +no_defs <> +<4263> +proj=longlat +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +no_defs <> # Mhast <4264> +proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +no_defs <> # Monte Mario -<4265> +proj=longlat +ellps=intl +no_defs <> +<4265> +proj=longlat +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +no_defs <> # M'poraloko -<4266> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> +<4266> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +no_defs <> # NAD27 -<4267> +proj=longlat +ellps=clrk66 +datum=NAD27 +no_defs <> +<4267> +proj=longlat +datum=NAD27 +no_defs <> # NAD27 Michigan <4268> +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs <> # NAD83 -<4269> +proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs <> +<4269> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Nahrwan 1967 -<4270> +proj=longlat +ellps=clrk80 +no_defs <> +<4270> +proj=longlat +ellps=clrk80 +towgs84=-243,-192,477,0,0,0,0 +no_defs <> # Naparima 1972 -<4271> +proj=longlat +ellps=intl +no_defs <> +<4271> +proj=longlat +ellps=intl +towgs84=-10,375,165,0,0,0,0 +no_defs <> # NZGD49 -<4272> +proj=longlat +ellps=intl +datum=nzgd49 +no_defs <> +<4272> +proj=longlat +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +no_defs <> # NGO 1948 <4273> +proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +no_defs <> # Datum 73 -<4274> +proj=longlat +ellps=intl +no_defs <> +<4274> +proj=longlat +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +no_defs <> # NTF <4275> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs <> # NSWC 9Z-2 <4276> +proj=longlat +ellps=WGS66 +no_defs <> # OSGB 1936 -<4277> +proj=longlat +ellps=airy +datum=OSGB36 +no_defs <> +<4277> +proj=longlat +ellps=airy +towgs84=375,-111,431,0,0,0,0 +no_defs <> # OSGB70 <4278> +proj=longlat +ellps=airy +no_defs <> # OS(SN)80 @@ -419,13 +419,13 @@ # Palestine 1923 <4281> +proj=longlat +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +no_defs <> # Pointe Noire -<4282> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> +<4282> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-148,51,-291,0,0,0,0 +no_defs <> # GDA94 <4283> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Pulkovo 1942 -<4284> +proj=longlat +ellps=krass +no_defs <> +<4284> +proj=longlat +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +no_defs <> # Qatar 1974 -<4285> +proj=longlat +ellps=intl +no_defs <> +<4285> +proj=longlat +ellps=intl +towgs84=-128.16,-282.42,21.93,0,0,0,0 +no_defs <> # Qatar 1948 <4286> +proj=longlat +ellps=helmert +no_defs <> # Qornoq @@ -433,15 +433,15 @@ # Loma Quintana <4288> +proj=longlat +ellps=intl +no_defs <> # Amersfoort -<4289> +proj=longlat +ellps=bessel +no_defs <> +<4289> +proj=longlat +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725 +no_defs <> # SAD69 -<4291> +proj=longlat +ellps=GRS67 +no_defs <> +<4291> +proj=longlat +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +no_defs <> # Sapper Hill 1943 <4292> +proj=longlat +ellps=intl +towgs84=-355,21,72,0,0,0,0 +no_defs <> # Schwarzeck -<4293> +proj=longlat +ellps=bess_nam +no_defs <> +<4293> +proj=longlat +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +no_defs <> # Segora -<4294> +proj=longlat +ellps=bessel +no_defs <> +<4294> +proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +no_defs <> # Serindung <4295> +proj=longlat +ellps=bessel +no_defs <> # Sudan @@ -449,15 +449,15 @@ # Tananarive <4297> +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +no_defs <> # Timbalai 1948 -<4298> +proj=longlat +ellps=evrstSS +no_defs <> +<4298> +proj=longlat +ellps=evrstSS +towgs84=-533.4,669.2,-52.5,0,0,4.28,9.4 +no_defs <> # TM65 -<4299> +proj=longlat +ellps=mod_airy +datum=ire65 +no_defs <> +<4299> +proj=longlat +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs <> # TM75 -<4300> +proj=longlat +ellps=mod_airy +no_defs <> +<4300> +proj=longlat +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs <> # Tokyo -<4301> +proj=longlat +ellps=bessel +no_defs <> +<4301> +proj=longlat +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +no_defs <> # Trinidad 1903 -<4302> +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs <> +<4302> +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0,0,0,0 +no_defs <> # TC(1948) <4303> +proj=longlat +ellps=helmert +no_defs <> # Voirol 1875 @@ -465,7 +465,7 @@ # Bern 1938 <4306> +proj=longlat +ellps=bessel +no_defs <> # Nord Sahara 1959 -<4307> +proj=longlat +ellps=clrk80 +no_defs <> +<4307> +proj=longlat +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +no_defs <> # RT38 <4308> +proj=longlat +ellps=bessel +no_defs <> # Yacare @@ -475,31 +475,45 @@ # Zanderij <4311> +proj=longlat +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +no_defs <> # MGI -<4312> +proj=longlat +ellps=bessel +datum=hermannskogel +no_defs <> +<4312> +proj=longlat +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +no_defs <> # Belge 1972 -<4313> +proj=longlat +ellps=intl +towgs84=106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1 +no_defs <> +<4313> +proj=longlat +ellps=intl +towgs84=-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,-1.2747 +no_defs <> # DHDN -<4314> +proj=longlat +ellps=bessel +datum=potsdam +no_defs <> +<4314> +proj=longlat +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +no_defs <> # Conakry 1905 <4315> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +no_defs <> # Dealul Piscului 1930 -<4316> +proj=longlat +ellps=intl +no_defs <> +<4316> +proj=longlat +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +no_defs <> # Dealul Piscului 1970 -<4317> +proj=longlat +ellps=krass +no_defs <> +<4317> +proj=longlat +ellps=krass +towgs84=28,-121,-77,0,0,0,0 +no_defs <> # NGN <4318> +proj=longlat +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +no_defs <> # KUDAMS -<4319> +proj=longlat +ellps=GRS80 +no_defs <> +<4319> +proj=longlat +ellps=GRS80 +towgs84=-20.8,11.3,2.4,0,0,0,0 +no_defs <> # WGS 72 -<4322> +proj=longlat +ellps=WGS72 +no_defs <> +<4322> +proj=longlat +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +no_defs <> # WGS 72BE <4324> +proj=longlat +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +no_defs <> # WGS 84 -<4326> +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs <> +<4326> +proj=longlat +datum=WGS84 +no_defs <> +# RGSPM06 +<4463> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# RGM04 +<4470> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# Cadastre 1997 +<4475> +proj=longlat +ellps=intl +towgs84=-381.788,-57.501,-256.673,0,0,0,0 +no_defs <> +# Mexican Datum of 1993 +<4483> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# China Geodetic Coordinate System 2000 +<4490> +proj=longlat +ellps=GRS80 +no_defs <> +# New Beijing +<4555> +proj=longlat +ellps=krass +no_defs <> +# RRAF 1991 +<4558> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Anguilla 1957 <4600> +proj=longlat +ellps=clrk80 +no_defs <> # Antigua 1943 -<4601> +proj=longlat +ellps=clrk80 +no_defs <> +<4601> +proj=longlat +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +no_defs <> # Dominica 1945 <4602> +proj=longlat +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +no_defs <> # Grenada 1953 @@ -507,7 +521,7 @@ # Montserrat 1958 <4604> +proj=longlat +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +no_defs <> # St. Kitts 1955 -<4605> +proj=longlat +ellps=clrk80 +no_defs <> +<4605> +proj=longlat +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +no_defs <> # St. Lucia 1955 <4606> +proj=longlat +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +no_defs <> # St. Vincent 1945 @@ -523,17 +537,17 @@ # JGD2000 <4612> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Segara -<4613> +proj=longlat +ellps=bessel +no_defs <> +<4613> +proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +no_defs <> # QND95 <4614> +proj=longlat +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +no_defs <> # Porto Santo <4615> +proj=longlat +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +no_defs <> # Selvagem Grande -<4616> +proj=longlat +ellps=intl +no_defs <> +<4616> +proj=longlat +ellps=intl +towgs84=-289,-124,60,0,0,0,0 +no_defs <> # NAD83(CSRS) -<4617> +proj=longlat +ellps=GRS80 +no_defs <> +<4617> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # SAD69 -<4618> +proj=longlat +ellps=aust_SA +no_defs <> +<4618> +proj=longlat +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +no_defs <> # SWEREF99 <4619> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Point 58 @@ -541,31 +555,31 @@ # Fort Marigot <4621> +proj=longlat +ellps=intl +towgs84=137,248,-430,0,0,0,0 +no_defs <> # Guadeloupe 1948 -<4622> +proj=longlat +ellps=intl +no_defs <> +<4622> +proj=longlat +ellps=intl +towgs84=-467,-16,-300,0,0,0,0 +no_defs <> # CSG67 <4623> +proj=longlat +ellps=intl +towgs84=-186,230,110,0,0,0,0 +no_defs <> # RGFG95 -<4624> +proj=longlat +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +no_defs <> +<4624> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Martinique 1938 -<4625> +proj=longlat +ellps=intl +no_defs <> +<4625> +proj=longlat +ellps=intl +towgs84=186,482,151,0,0,0,0 +no_defs <> # Reunion 1947 -<4626> +proj=longlat +ellps=intl +no_defs <> +<4626> +proj=longlat +ellps=intl +towgs84=94,-948,-1262,0,0,0,0 +no_defs <> # RGR92 <4627> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Tahiti 52 <4628> +proj=longlat +ellps=intl +towgs84=162,117,154,0,0,0,0 +no_defs <> # Tahaa 54 -<4629> +proj=longlat +ellps=intl +no_defs <> +<4629> +proj=longlat +ellps=intl +towgs84=72.438,345.918,79.486,1.6045,0.8823,0.5565,1.3746 +no_defs <> # IGN72 Nuku Hiva -<4630> +proj=longlat +ellps=intl +no_defs <> +<4630> +proj=longlat +ellps=intl +towgs84=84,274,65,0,0,0,0 +no_defs <> # K0 1949 <4631> +proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs <> # Combani 1950 <4632> +proj=longlat +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +no_defs <> # IGN56 Lifou -<4633> +proj=longlat +ellps=intl +no_defs <> +<4633> +proj=longlat +ellps=intl +towgs84=335.47,222.58,-230.94,0,0,0,0 +no_defs <> # IGN72 Grand Terre -<4634> +proj=longlat +ellps=intl +no_defs <> +<4634> +proj=longlat +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +no_defs <> # ST87 Ouvea <4635> +proj=longlat +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +no_defs <> # Petrels 1972 @@ -575,21 +589,21 @@ # Saint Pierre et Miquelon 1950 <4638> +proj=longlat +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +no_defs <> # MOP78 -<4639> +proj=longlat +ellps=intl +no_defs <> +<4639> +proj=longlat +ellps=intl +towgs84=253,-132,-127,0,0,0,0 +no_defs <> # RRAF 1991 <4640> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # IGN53 Mare -<4641> +proj=longlat +ellps=intl +no_defs <> +<4641> +proj=longlat +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +no_defs <> # ST84 Ile des Pins -<4642> +proj=longlat +ellps=intl +no_defs <> +<4642> +proj=longlat +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +no_defs <> # ST71 Belep <4643> +proj=longlat +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +no_defs <> # NEA74 Noumea -<4644> +proj=longlat +ellps=intl +no_defs <> +<4644> +proj=longlat +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +no_defs <> # RGNC 1991 <4645> +proj=longlat +ellps=intl +towgs84=0,0,0,0,0,0,0 +no_defs <> # Grand Comoros -<4646> +proj=longlat +ellps=intl +no_defs <> +<4646> +proj=longlat +ellps=intl +towgs84=-963,510,-359,0,0,0,0 +no_defs <> # Reykjavik 1900 <4657> +proj=longlat +a=6377019.27 +b=6355762.5391 +towgs84=-28,199,5,0,0,0,0 +no_defs <> # Hjorsey 1955 @@ -597,19 +611,19 @@ # ISN93 <4659> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Helle 1954 -<4660> +proj=longlat +ellps=intl +towgs84=982.609,552.753,-540.873,32.3934,-153.257,-96.2266,16.805 +no_defs <> +<4660> +proj=longlat +ellps=intl +towgs84=982.609,552.753,-540.873,6.68163,-31.6115,-19.8482,16.805 +no_defs <> # LKS92 <4661> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # IGN72 Grande Terre -<4662> +proj=longlat +ellps=intl +no_defs <> +<4662> +proj=longlat +ellps=intl +towgs84=-11.64,-348.6,291.98,0,0,0,0 +no_defs <> # Porto Santo 1995 -<4663> +proj=longlat +ellps=intl +no_defs <> +<4663> +proj=longlat +ellps=intl +towgs84=-502.862,-247.438,312.724,0,0,0,0 +no_defs <> # Azores Oriental 1995 -<4664> +proj=longlat +ellps=intl +no_defs <> +<4664> +proj=longlat +ellps=intl +towgs84=-204.619,140.176,55.226,0,0,0,0 +no_defs <> # Azores Central 1995 -<4665> +proj=longlat +ellps=intl +no_defs <> +<4665> +proj=longlat +ellps=intl +towgs84=-106.226,166.366,-37.893,0,0,0,0 +no_defs <> # Lisbon 1890 -<4666> +proj=longlat +ellps=bessel +no_defs <> +<4666> +proj=longlat +ellps=bessel +towgs84=508.088,-191.042,565.223,0,0,0,0 +no_defs <> # IKBD-92 <4667> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # ED79 @@ -641,7 +655,7 @@ # Mauritania 1999 <4681> +proj=longlat +ellps=clrk80 +no_defs <> # Gulshan 303 -<4682> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <> +<4682> +proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=283.7,735.9,261.1,0,0,0,0 +no_defs <> # PRS92 <4683> +proj=longlat +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +no_defs <> # Gan 1970 @@ -651,13 +665,13 @@ # MAGNA-SIRGAS <4686> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # RGPF -<4687> +proj=longlat +ellps=GRS80 +no_defs <> +<4687> +proj=longlat +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +no_defs <> # Fatu Iva 72 <4688> +proj=longlat +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +no_defs <> # IGN63 Hiva Oa -<4689> +proj=longlat +ellps=intl +no_defs <> +<4689> +proj=longlat +ellps=intl +towgs84=410.721,55.049,80.746,2.5779,2.3514,0.6664,17.3311 +no_defs <> # Tahiti 79 -<4690> +proj=longlat +ellps=intl +no_defs <> +<4690> +proj=longlat +ellps=intl +towgs84=221.525,152.948,176.768,-2.3847,-1.3896,-0.877,11.4741 +no_defs <> # Moorea 87 <4691> +proj=longlat +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +no_defs <> # Maupiti 83 @@ -713,11 +727,11 @@ # Cape Canaveral <4717> +proj=longlat +ellps=clrk66 +towgs84=-2,151,181,0,0,0,0 +no_defs <> # Solomon 1968 -<4718> +proj=longlat +ellps=intl +no_defs <> +<4718> +proj=longlat +ellps=intl +towgs84=252,-209,-751,0,0,0,0 +no_defs <> # Easter Island 1967 <4719> +proj=longlat +ellps=intl +towgs84=211,147,111,0,0,0,0 +no_defs <> # Fiji 1986 -<4720> +proj=longlat +ellps=WGS72 +no_defs <> +<4720> +proj=longlat +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +no_defs <> # Fiji 1956 <4721> +proj=longlat +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +no_defs <> # South Georgia 1968 @@ -729,9 +743,9 @@ # Johnston Island 1961 <4725> +proj=longlat +ellps=intl +towgs84=189,-79,-202,0,0,0,0 +no_defs <> # Little Cayman 1961 -<4726> +proj=longlat +ellps=clrk66 +no_defs <> +<4726> +proj=longlat +ellps=clrk66 +towgs84=42,124,147,0,0,0,0 +no_defs <> # Midway 1961 -<4727> +proj=longlat +ellps=intl +no_defs <> +<4727> +proj=longlat +ellps=intl +towgs84=403,-81,277,0,0,0,0 +no_defs <> # Pico de las Nieves 1984 <4728> +proj=longlat +ellps=intl +towgs84=-307,-92,127,0,0,0,0 +no_defs <> # Pitcairn 1967 @@ -757,13 +771,13 @@ # Hong Kong 1963(67) <4739> +proj=longlat +ellps=intl +towgs84=-156,-271,-189,0,0,0,0 +no_defs <> # PZ-90 -<4740> +proj=longlat +a=6378136 +b=6356751.361745712 +no_defs <> +<4740> +proj=longlat +a=6378136 +b=6356751.361745712 +towgs84=0,0,1.5,-0,-0,0.076,0 +no_defs <> # FD54 <4741> +proj=longlat +ellps=intl +no_defs <> # GDM2000 <4742> +proj=longlat +ellps=GRS80 +no_defs <> # Karbala 1979 -<4743> +proj=longlat +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +no_defs <> +<4743> +proj=longlat +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +no_defs <> # Nahrwan 1934 <4744> +proj=longlat +ellps=clrk80 +no_defs <> # RD/83 @@ -789,7 +803,7 @@ # DGN95 <4755> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # VN-2000 -<4756> +proj=longlat +ellps=WGS84 +no_defs <> +<4756> +proj=longlat +ellps=WGS84 +towgs84=-192.873,-39.382,-111.202,-0.00205,-0.0005,0.00335,0.0188 +no_defs <> # SVY21 <4757> +proj=longlat +ellps=WGS84 +no_defs <> # JAD2001 @@ -809,17 +823,17 @@ # Slovenia 1996 <4765> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Bern 1898 (Bern) -<4801> +proj=longlat +ellps=bessel +pm=bern +no_defs <> +<4801> +proj=longlat +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +pm=bern +no_defs <> # Bogota 1975 (Bogota) -<4802> +proj=longlat +ellps=intl +pm=bogota +no_defs <> +<4802> +proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +pm=bogota +no_defs <> # Lisbon (Lisbon) -<4803> +proj=longlat +ellps=intl +pm=lisbon +no_defs <> +<4803> +proj=longlat +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +pm=lisbon +no_defs <> # Makassar (Jakarta) <4804> +proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +no_defs <> # MGI (Ferro) -<4805> +proj=longlat +ellps=bessel +pm=ferro +no_defs <> +<4805> +proj=longlat +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +no_defs <> # Monte Mario (Rome) -<4806> +proj=longlat +ellps=intl +pm=rome +no_defs <> +<4806> +proj=longlat +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +pm=rome +no_defs <> # NTF (Paris) <4807> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs <> # Padang (Jakarta) @@ -831,35 +845,87 @@ # Voirol 1875 (Paris) <4811> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +pm=paris +no_defs <> # Batavia (Jakarta) -<4813> +proj=longlat +ellps=bessel +pm=jakarta +no_defs <> +<4813> +proj=longlat +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +pm=jakarta +no_defs <> # RT38 (Stockholm) <4814> +proj=longlat +ellps=bessel +pm=stockholm +no_defs <> # Greek (Athens) <4815> +proj=longlat +ellps=bessel +pm=athens +no_defs <> # Carthage (Paris) -<4816> +proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs <> +<4816> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +pm=paris +no_defs <> # NGO 1948 (Oslo) <4817> +proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +no_defs <> # S-JTSK (Ferro) -<4818> +proj=longlat +ellps=bessel +pm=ferro +no_defs <> +<4818> +proj=longlat +ellps=bessel +towgs84=589,76,480,0,0,0,0 +pm=ferro +no_defs <> # Nord Sahara 1959 (Paris) -<4819> +proj=longlat +ellps=clrk80 +pm=paris +no_defs <> +<4819> +proj=longlat +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +pm=paris +no_defs <> # Segara (Jakarta) -<4820> +proj=longlat +ellps=bessel +pm=jakarta +no_defs <> +<4820> +proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +pm=jakarta +no_defs <> # Voirol 1879 (Paris) <4821> +proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs <> -# unnamed ellipse -<4901> +proj=longlat +a=6376523 +b=6355862.933255573 +pm=2.3372291666985 +no_defs <> +# Sao Tome +<4823> +proj=longlat +ellps=intl +no_defs <> +# Principe +<4824> +proj=longlat +ellps=intl +no_defs <> +# ATF (Paris) +<4901> +proj=longlat +a=6376523 +b=6355862.933255573 +pm=2.337208333333333 +no_defs <> # NDG (Paris) <4902> +proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs <> # Madrid 1870 (Madrid) <4903> +proj=longlat +a=6378298.3 +b=6356657.142669561 +pm=madrid +no_defs <> # Lisbon 1890 (Lisbon) -<4904> +proj=longlat +ellps=bessel +pm=lisbon +no_defs <> +<4904> +proj=longlat +ellps=bessel +towgs84=508.088,-191.042,565.223,0,0,0,0 +pm=lisbon +no_defs <> +# PTRA08 +<5013> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# Tokyo 1892 +<5132> +proj=longlat +ellps=bessel +no_defs <> +# S-JTSK/05 +<5228> +proj=longlat +ellps=bessel +towgs84=572.213,85.334,461.94,4.9732,1.529,5.2484,3.5378 +no_defs <> +# S-JTSK/05 (Ferro) +<5229> +proj=longlat +ellps=bessel +towgs84=572.213,85.334,461.94,4.9732,1.529,5.2484,3.5378 +pm=ferro +no_defs <> +# SLD99 +<5233> +proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=-0.293,766.95,87.713,0.195704,1.69507,3.47302,-0.039338 +no_defs <> +# GDBD2009 +<5246> +proj=longlat +ellps=GRS80 +no_defs <> +# TUREF +<5252> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# DRUKREF 03 +<5264> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# ISN2004 +<5324> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# POSGAR 2007 +<5340> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# MARGEN +<5354> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# SIRGAS-Chile +<5360> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# CR05 +<5365> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# MACARIO SOLIS +<5371> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# Peru96 +<5373> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# SIRGAS-ROU98 +<5381> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# SIRGAS_ES2007.8 +<5393> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# Ocotepeque 1935 +<5451> +proj=longlat +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +no_defs <> +# Sibun Gorge 1922 +<5464> +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs <> +# Panama-Colon 1911 +<5467> +proj=longlat +ellps=clrk66 +no_defs <> +# RGAF09 +<5489> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> +# Corrego Alegre 1961 +<5524> +proj=longlat +ellps=intl +no_defs <> +# SAD69(96) +<5527> +proj=longlat +ellps=aust_SA +no_defs <> +# PNG94 +<5546> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Anguilla 1957 / British West Indies Grid <2000> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs <> # Antigua 1943 / British West Indies Grid -<2001> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs <> +<2001> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +units=m +no_defs <> # Dominica 1945 / British West Indies Grid <2002> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +units=m +no_defs <> # Grenada 1953 / British West Indies Grid @@ -867,12 +933,12 @@ # Montserrat 1958 / British West Indies Grid <2004> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +units=m +no_defs <> # St. Kitts 1955 / British West Indies Grid -<2005> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs <> +<2005> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +units=m +no_defs <> # St. Lucia 1955 / British West Indies Grid <2006> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +units=m +no_defs <> # St. Vincent 45 / British West Indies Grid <2007> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +units=m +no_defs <> -# NAD27(CGQ77) / SCoPQ zone 2 +# NAD27(CGQ77) / SCoPQ zone 2 (deprecated) <2008> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / SCoPQ zone 3 <2009> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> @@ -949,47 +1015,37 @@ # Hanoi 1972 / Gauss-Kruger zone 19 <2045> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs <> # Hartebeesthoek94 / Lo15 -# Unable to translate coordinate system EPSG:2046 into PROJ.4 format. -# +<2046> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Hartebeesthoek94 / Lo17 -# Unable to translate coordinate system EPSG:2047 into PROJ.4 format. -# +<2047> +proj=tmerc +lat_0=0 +lon_0=17 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Hartebeesthoek94 / Lo19 -# Unable to translate coordinate system EPSG:2048 into PROJ.4 format. -# +<2048> +proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Hartebeesthoek94 / Lo21 -# Unable to translate coordinate system EPSG:2049 into PROJ.4 format. -# +<2049> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Hartebeesthoek94 / Lo23 -# Unable to translate coordinate system EPSG:2050 into PROJ.4 format. -# +<2050> +proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Hartebeesthoek94 / Lo25 -# Unable to translate coordinate system EPSG:2051 into PROJ.4 format. -# +<2051> +proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Hartebeesthoek94 / Lo27 -# Unable to translate coordinate system EPSG:2052 into PROJ.4 format. -# +<2052> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Hartebeesthoek94 / Lo29 -# Unable to translate coordinate system EPSG:2053 into PROJ.4 format. -# +<2053> +proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Hartebeesthoek94 / Lo31 -# Unable to translate coordinate system EPSG:2054 into PROJ.4 format. -# +<2054> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Hartebeesthoek94 / Lo33 -# Unable to translate coordinate system EPSG:2055 into PROJ.4 format. -# +<2055> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # CH1903+ / LV95 <2056> +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs <> # Rassadiran / Nakhl e Taqi -<2057> +proj=omerc +lat_0=27.51882880555555 +lonc=52.60353916666667 +alpha=0.5716611944444444 +k=0.999895934 +x_0=658377.437 +y_0=3044969.194 +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +units=m +no_defs <> +<2057> +proj=omerc +lat_0=27.51882880555555 +lonc=52.60353916666667 +alpha=0.5716611944444444 +k=0.999895934 +x_0=658377.437 +y_0=3044969.194 +gamma=0.5716611944444444 +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +units=m +no_defs <> # ED50(ED77) / UTM zone 38N -<2058> +proj=utm +zone=38 +ellps=intl +units=m +no_defs <> +<2058> +proj=utm +zone=38 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs <> # ED50(ED77) / UTM zone 39N -<2059> +proj=utm +zone=39 +ellps=intl +units=m +no_defs <> +<2059> +proj=utm +zone=39 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs <> # ED50(ED77) / UTM zone 40N -<2060> +proj=utm +zone=40 +ellps=intl +units=m +no_defs <> +<2060> +proj=utm +zone=40 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs <> # ED50(ED77) / UTM zone 41N -<2061> +proj=utm +zone=41 +ellps=intl +units=m +no_defs <> +<2061> +proj=utm +zone=41 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs <> # Madrid 1870 (Madrid) / Spain <2062> +proj=lcc +lat_1=40 +lat_0=40 +lon_0=0 +k_0=0.9988085293 +x_0=600000 +y_0=600000 +a=6378298.3 +b=6356657.142669561 +pm=madrid +units=m +no_defs <> # Dabola 1981 / UTM zone 28N (deprecated) @@ -997,53 +1053,53 @@ # Dabola 1981 / UTM zone 29N (deprecated) <2064> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs <> # S-JTSK (Ferro) / Krovak -<2065> +proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> +<2065> +proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=0 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=589,76,480,0,0,0,0 +pm=ferro +units=m +no_defs <> # Mount Dillon / Tobago Grid <2066> +proj=cass +lat_0=11.25217861111111 +lon_0=-60.68600888888889 +x_0=37718.66159325 +y_0=36209.91512952 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164 +no_defs <> # Naparima 1955 / UTM zone 20N -<2067> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <> +<2067> +proj=utm +zone=20 +ellps=intl +towgs84=-0.465,372.095,171.736,0,0,0,0 +units=m +no_defs <> # ELD79 / Libya zone 5 -<2068> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2068> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs <> # ELD79 / Libya zone 6 -<2069> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2069> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs <> # ELD79 / Libya zone 7 -<2070> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2070> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs <> # ELD79 / Libya zone 8 -<2071> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2071> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs <> # ELD79 / Libya zone 9 -<2072> +proj=tmerc +lat_0=0 +lon_0=17 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2072> +proj=tmerc +lat_0=0 +lon_0=17 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs <> # ELD79 / Libya zone 10 -<2073> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2073> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs <> # ELD79 / Libya zone 11 -<2074> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2074> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs <> # ELD79 / Libya zone 12 -<2075> +proj=tmerc +lat_0=0 +lon_0=23 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2075> +proj=tmerc +lat_0=0 +lon_0=23 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs <> # ELD79 / Libya zone 13 -<2076> +proj=tmerc +lat_0=0 +lon_0=25 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2076> +proj=tmerc +lat_0=0 +lon_0=25 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs <> # ELD79 / UTM zone 32N -<2077> +proj=utm +zone=32 +ellps=intl +units=m +no_defs <> +<2077> +proj=utm +zone=32 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs <> # ELD79 / UTM zone 33N -<2078> +proj=utm +zone=33 +ellps=intl +units=m +no_defs <> +<2078> +proj=utm +zone=33 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs <> # ELD79 / UTM zone 34N -<2079> +proj=utm +zone=34 +ellps=intl +units=m +no_defs <> +<2079> +proj=utm +zone=34 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs <> # ELD79 / UTM zone 35N -<2080> +proj=utm +zone=35 +ellps=intl +units=m +no_defs <> -# Chos Malal 1914 / Argentina zone 2 +<2080> +proj=utm +zone=35 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs <> +# Chos Malal 1914 / Argentina 2 <2081> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs <> -# Pampa del Castillo / Argentina zone 2 +# Pampa del Castillo / Argentina 2 <2082> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +units=m +no_defs <> -# Hito XVIII 1963 / Argentina zone 2 -<2083> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs <> +# Hito XVIII 1963 / Argentina 2 +<2083> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=16,196,93,0,0,0,0 +units=m +no_defs <> # Hito XVIII 1963 / UTM zone 19S -<2084> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs <> +<2084> +proj=utm +zone=19 +south +ellps=intl +towgs84=16,196,93,0,0,0,0 +units=m +no_defs <> # NAD27 / Cuba Norte (deprecated) -<2085> +proj=lcc +lat_1=22.35 +lat_0=22.35 +lon_0=-81 +k_0=0.99993602 +x_0=500000 +y_0=280296.016 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<2085> +proj=lcc +lat_1=22.35 +lat_0=22.35 +lon_0=-81 +k_0=0.99993602 +x_0=500000 +y_0=280296.016 +datum=NAD27 +units=m +no_defs <> # NAD27 / Cuba Sur (deprecated) -<2086> +proj=lcc +lat_1=20.71666666666667 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +k_0=0.99994848 +x_0=500000 +y_0=229126.939 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<2086> +proj=lcc +lat_1=20.71666666666667 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +k_0=0.99994848 +x_0=500000 +y_0=229126.939 +datum=NAD27 +units=m +no_defs <> # ELD79 / TM 12 NE -<2087> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2087> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs <> # Carthage / TM 11 NE -<2088> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +datum=carthage +units=m +no_defs <> +<2088> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs <> # Yemen NGN96 / UTM zone 38N <2089> +proj=utm +zone=38 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Yemen NGN96 / UTM zone 39N @@ -1058,16 +1114,16 @@ <2094> +proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # Bissau / UTM zone 28N <2095> +proj=utm +zone=28 +ellps=intl +towgs84=-173,253,27,0,0,0,0 +units=m +no_defs <> -# Korean 1985 / Korea East Belt +# Korean 1985 / East Belt <2096> +proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <> -# Korean 1985 / Korea Central Belt +# Korean 1985 / Central Belt <2097> +proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <> -# Korean 1985 / Korea West Belt +# Korean 1985 / West Belt <2098> +proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <> # Qatar 1948 / Qatar Grid <2099> +proj=cass +lat_0=25.38236111111111 +lon_0=50.76138888888889 +x_0=100000 +y_0=100000 +ellps=helmert +units=m +no_defs <> # GGRS87 / Greek Grid -<2100> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=GGRS87 +units=m +no_defs <> +<2100> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +units=m +no_defs <> # Lake / Maracaibo Grid M1 <2101> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=0 +y_0=-52684.972 +ellps=intl +units=m +no_defs <> # Lake / Maracaibo Grid @@ -1139,9 +1195,9 @@ # NZGD2000 / UTM zone 60S <2135> +proj=utm +zone=60 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Accra / Ghana National Grid -<2136> +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.7391633579 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs <> +<2136> +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.7391633579 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +to_meter=0.3047997101815088 +no_defs <> # Accra / TM 1 NW -<2137> +proj=tmerc +lat_0=0 +lon_0=-1 +k=0.9996 +x_0=500000 +y_0=0 +a=6378300 +b=6356751.689189189 +units=m +no_defs <> +<2137> +proj=tmerc +lat_0=0 +lon_0=-1 +k=0.9996 +x_0=500000 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +units=m +no_defs <> # NAD27(CGQ77) / Quebec Lambert <2138> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD83(CSRS98) / SCoPQ zone 2 (deprecated) @@ -1179,7 +1235,7 @@ # American Samoa 1962 / American Samoa Lambert (deprecated) <2155> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / UTM zone 59S (deprecated) -<2156> +proj=utm +zone=59 +south +ellps=GRS80 +units=m +no_defs <> +<2156> +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IRENET95 / Irish Transverse Mercator <2157> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=0.99982 +x_0=600000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IRENET95 / UTM zone 29N @@ -1192,44 +1248,44 @@ <2161> +proj=utm +zone=28 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs <> # Sierra Leone 1968 / UTM zone 29N <2162> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs <> -# unnamed +# US National Atlas Equal Area <2163> +proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs <> # Locodjo 1965 / TM 5 NW <2164> +proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs <> # Abidjan 1987 / TM 5 NW <2165> +proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942(83) / Gauss Kruger zone 3 (deprecated) -<2166> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2166> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942(83) / Gauss Kruger zone 4 (deprecated) -<2167> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2167> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942(83) / Gauss Kruger zone 5 (deprecated) -<2168> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2168> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs <> # Luxembourg 1930 / Gauss -<2169> +proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +units=m +no_defs <> +<2169> +proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-189.681,18.3463,-42.7695,-0.33746,-3.09264,2.53861,0.4598 +units=m +no_defs <> # MGI / Slovenia Grid (deprecated) -<2170> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<2170> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # Pulkovo 1942(58) / Poland zone I (deprecated) -<2171> +proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5647000 +ellps=krass +units=m +no_defs <> +<2171> +proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5647000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs <> # Pulkovo 1942(58) / Poland zone II -<2172> +proj=sterea +lat_0=53.00194444444445 +lon_0=21.50277777777778 +k=0.9998 +x_0=4603000 +y_0=5806000 +ellps=krass +units=m +no_defs <> +<2172> +proj=sterea +lat_0=53.00194444444445 +lon_0=21.50277777777778 +k=0.9998 +x_0=4603000 +y_0=5806000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs <> # Pulkovo 1942(58) / Poland zone III -<2173> +proj=sterea +lat_0=53.58333333333334 +lon_0=17.00833333333333 +k=0.9998 +x_0=3501000 +y_0=5999000 +ellps=krass +units=m +no_defs <> +<2173> +proj=sterea +lat_0=53.58333333333334 +lon_0=17.00833333333333 +k=0.9998 +x_0=3501000 +y_0=5999000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs <> # Pulkovo 1942(58) / Poland zone IV -<2174> +proj=sterea +lat_0=51.67083333333333 +lon_0=16.67222222222222 +k=0.9998 +x_0=3703000 +y_0=5627000 +ellps=krass +units=m +no_defs <> +<2174> +proj=sterea +lat_0=51.67083333333333 +lon_0=16.67222222222222 +k=0.9998 +x_0=3703000 +y_0=5627000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs <> # Pulkovo 1942(58) / Poland zone V -<2175> +proj=tmerc +lat_0=0 +lon_0=18.95833333333333 +k=0.999983 +x_0=237000 +y_0=-4700000 +ellps=krass +units=m +no_defs <> +<2175> +proj=tmerc +lat_0=0 +lon_0=18.95833333333333 +k=0.999983 +x_0=237000 +y_0=-4700000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs <> # ETRS89 / Poland CS2000 zone 5 -<2176> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999923 +x_0=5500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2176> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999923 +x_0=5500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / Poland CS2000 zone 6 -<2177> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.999923 +x_0=6500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2177> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.999923 +x_0=6500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / Poland CS2000 zone 7 -<2178> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999923 +x_0=7500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2178> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999923 +x_0=7500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / Poland CS2000 zone 8 -<2179> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999923 +x_0=8500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2179> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999923 +x_0=8500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / Poland CS92 -<2180> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +units=m +no_defs <> +<2180> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Azores Occidental 1939 / UTM zone 25N -<2188> +proj=utm +zone=25 +ellps=intl +units=m +no_defs <> +<2188> +proj=utm +zone=25 +ellps=intl +towgs84=-425,-169,81,0,0,0,0 +units=m +no_defs <> # Azores Central 1948 / UTM zone 26N <2189> +proj=utm +zone=26 +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +units=m +no_defs <> # Azores Oriental 1940 / UTM zone 26N @@ -1237,19 +1293,19 @@ # Madeira 1936 / UTM zone 28N (deprecated) <2191> +proj=utm +zone=28 +ellps=intl +units=m +no_defs <> # ED50 / France EuroLambert -<2192> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +ellps=intl +units=m +no_defs <> +<2192> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # NZGD2000 / New Zealand Transverse Mercator 2000 <2193> +proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # American Samoa 1962 / American Samoa Lambert (deprecated) <2194> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / UTM zone 2S -<2195> +proj=utm +zone=2 +south +ellps=GRS80 +units=m +no_defs <> +<2195> +proj=utm +zone=2 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / Kp2000 Jutland -<2196> +proj=tmerc +lat_0=0 +lon_0=9.5 +k=0.99995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2196> +proj=tmerc +lat_0=0 +lon_0=9.5 +k=0.99995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / Kp2000 Zealand -<2197> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.99995 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2197> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.99995 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / Kp2000 Bornholm -<2198> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2198> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Albanian 1987 / Gauss Kruger zone 4 (deprecated) <2199> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> # ATS77 / New Brunswick Stereographic (ATS77) @@ -1261,33 +1317,33 @@ # REGVEN / UTM zone 20N <2203> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD27 / Tennessee -<2204> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=609601.2192024384 +y_0=30480.06096012192 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<2204> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=609601.2192024384 +y_0=30480.06096012192 +datum=NAD27 +units=us-ft +no_defs <> # NAD83 / Kentucky North -<2205> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<2205> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ED50 / 3-degree Gauss-Kruger zone 9 -<2206> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2206> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / 3-degree Gauss-Kruger zone 10 -<2207> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2207> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / 3-degree Gauss-Kruger zone 11 -<2208> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2208> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / 3-degree Gauss-Kruger zone 12 -<2209> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2209> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / 3-degree Gauss-Kruger zone 13 -<2210> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2210> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / 3-degree Gauss-Kruger zone 14 -<2211> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2211> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / 3-degree Gauss-Kruger zone 15 -<2212> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2212> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ETRS89 / TM 30 NE -<2213> +proj=tmerc +lat_0=0 +lon_0=30 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2213> +proj=tmerc +lat_0=0 +lon_0=30 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Douala 1948 / AOF west (deprecated) <2214> +proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs <> # Manoca 1962 / UTM zone 32N <2215> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +units=m +no_defs <> # Qornoq 1927 / UTM zone 22N -<2216> +proj=utm +zone=22 +ellps=intl +units=m +no_defs <> +<2216> +proj=utm +zone=22 +ellps=intl +towgs84=164,138,-189,0,0,0,0 +units=m +no_defs <> # Qornoq 1927 / UTM zone 23N -<2217> +proj=utm +zone=23 +ellps=intl +units=m +no_defs <> +<2217> +proj=utm +zone=23 +ellps=intl +towgs84=164,138,-189,0,0,0,0 +units=m +no_defs <> # Scoresbysund 1952 / Greenland zone 5 east # Unable to translate coordinate system EPSG:2218 into PROJ.4 format. # @@ -1299,141 +1355,141 @@ # Unable to translate coordinate system EPSG:2221 into PROJ.4 format. # # NAD83 / Arizona East (ft) -<2222> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> +<2222> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83 / Arizona Central (ft) -<2223> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> +<2223> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83 / Arizona West (ft) -<2224> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> +<2224> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83 / California zone 1 (ftUS) -<2225> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2225> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / California zone 2 (ftUS) -<2226> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2226> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / California zone 3 (ftUS) -<2227> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2227> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / California zone 4 (ftUS) -<2228> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2228> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / California zone 5 (ftUS) -<2229> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2229> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / California zone 6 (ftUS) -<2230> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2230> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Colorado North (ftUS) -<2231> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2231> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Colorado Central (ftUS) -<2232> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2232> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Colorado South (ftUS) -<2233> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2233> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Connecticut (ftUS) -<2234> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2234> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Delaware (ftUS) -<2235> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2235> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Florida East (ftUS) -<2236> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2236> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Florida West (ftUS) -<2237> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2237> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Florida North (ftUS) -<2238> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2238> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Georgia East (ftUS) -<2239> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2239> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Georgia West (ftUS) -<2240> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2240> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Idaho East (ftUS) -<2241> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2241> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Idaho Central (ftUS) -<2242> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2242> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Idaho West (ftUS) -<2243> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2243> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Indiana East (ftUS) (deprecated) -<2244> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2244> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Indiana West (ftUS) (deprecated) -<2245> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2245> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Kentucky North (ftUS) -<2246> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2246> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Kentucky South (ftUS) -<2247> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2247> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Maryland (ftUS) -<2248> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2248> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Massachusetts Mainland (ftUS) -<2249> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2249> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Massachusetts Island (ftUS) -<2250> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2250> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Michigan North (ft) -<2251> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> +<2251> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83 / Michigan Central (ft) -<2252> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> +<2252> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83 / Michigan South (ft) -<2253> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> +<2253> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83 / Mississippi East (ftUS) -<2254> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2254> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Mississippi West (ftUS) -<2255> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2255> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Montana (ft) -<2256> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> +<2256> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83 / New Mexico East (ftUS) -<2257> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2257> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / New Mexico Central (ftUS) -<2258> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2258> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / New Mexico West (ftUS) -<2259> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2259> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / New York East (ftUS) -<2260> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2260> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / New York Central (ftUS) -<2261> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2261> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / New York West (ftUS) -<2262> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2262> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / New York Long Island (ftUS) -<2263> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2263> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / North Carolina (ftUS) -<2264> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2264> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / North Dakota North (ft) -<2265> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> +<2265> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83 / North Dakota South (ft) -<2266> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> +<2266> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83 / Oklahoma North (ftUS) -<2267> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2267> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Oklahoma South (ftUS) -<2268> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2268> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Oregon North (ft) -<2269> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> +<2269> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83 / Oregon South (ft) -<2270> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> +<2270> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83 / Pennsylvania North (ftUS) -<2271> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2271> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Pennsylvania South (ftUS) -<2272> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2272> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / South Carolina (ft) -<2273> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> +<2273> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83 / Tennessee (ftUS) -<2274> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2274> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Texas North (ftUS) -<2275> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2275> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Texas North Central (ftUS) -<2276> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2276> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Texas Central (ftUS) -<2277> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2277> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Texas South Central (ftUS) -<2278> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2278> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Texas South (ftUS) -<2279> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2279> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Utah North (ft) -<2280> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> +<2280> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83 / Utah Central (ft) -<2281> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> +<2281> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83 / Utah South (ft) -<2282> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> +<2282> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83 / Virginia North (ftUS) -<2283> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2283> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Virginia South (ftUS) -<2284> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2284> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Washington North (ftUS) -<2285> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2285> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Washington South (ftUS) -<2286> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2286> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Wisconsin North (ftUS) -<2287> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2287> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Wisconsin Central (ftUS) -<2288> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2288> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Wisconsin South (ftUS) -<2289> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2289> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # ATS77 / Prince Edward Isl. Stereographic (ATS77) <2290> +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=700000 +y_0=400000 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> # NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) (deprecated) @@ -1481,41 +1537,41 @@ # Unable to translate coordinate system EPSG:2307 into PROJ.4 format. # # Batavia / TM 109 SE -<2308> +proj=tmerc +lat_0=0 +lon_0=109 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=bessel +units=m +no_defs <> +<2308> +proj=tmerc +lat_0=0 +lon_0=109 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs <> # WGS 84 / TM 116 SE -<2309> +proj=tmerc +lat_0=0 +lon_0=116 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<2309> +proj=tmerc +lat_0=0 +lon_0=116 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs <> # WGS 84 / TM 132 SE -<2310> +proj=tmerc +lat_0=0 +lon_0=132 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<2310> +proj=tmerc +lat_0=0 +lon_0=132 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs <> # WGS 84 / TM 6 NE -<2311> +proj=tmerc +lat_0=0 +lon_0=6 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<2311> +proj=tmerc +lat_0=0 +lon_0=6 +k=0.9996 +x_0=500000 +y_0=0 +datum=WGS84 +units=m +no_defs <> # Garoua / UTM zone 33N <2312> +proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs <> # Kousseri / UTM zone 33N <2313> +proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs <> # Trinidad 1903 / Trinidad Grid (ftCla) -<2314> +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392052001 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs <> +<2314> +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392052001 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.3047972654 +no_defs <> # Campo Inchauspe / UTM zone 19S -<2315> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs <> +<2315> +proj=utm +zone=19 +south +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs <> # Campo Inchauspe / UTM zone 20S -<2316> +proj=utm +zone=20 +south +ellps=intl +units=m +no_defs <> +<2316> +proj=utm +zone=20 +south +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs <> # PSAD56 / ICN Regional -<2317> +proj=lcc +lat_1=9 +lat_2=3 +lat_0=6 +lon_0=-66 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs <> +<2317> +proj=lcc +lat_1=9 +lat_2=3 +lat_0=6 +lon_0=-66 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs <> # Ain el Abd / Aramco Lambert -<2318> +proj=lcc +lat_1=17 +lat_2=33 +lat_0=25.08951 +lon_0=48 +x_0=0 +y_0=0 +ellps=intl +units=m +no_defs <> +<2318> +proj=lcc +lat_1=17 +lat_2=33 +lat_0=25.08951 +lon_0=48 +x_0=0 +y_0=0 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs <> # ED50 / TM27 -<2319> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2319> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / TM30 -<2320> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2320> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / TM33 -<2321> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2321> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / TM36 -<2322> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2322> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / TM39 -<2323> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2323> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / TM42 -<2324> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2324> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / TM45 -<2325> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2325> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # Hong Kong 1980 Grid System <2326> +proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1 +x_0=836694.05 +y_0=819069.8 +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 13 @@ -1647,109 +1703,109 @@ # Xian 1980 / 3-degree Gauss-Kruger CM 135E <2390> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # KKJ / Finland zone 1 -<2391> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2391> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs <> # KKJ / Finland zone 2 -<2392> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2392> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs <> # KKJ / Finland Uniform Coordinate System -<2393> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2393> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs <> # KKJ / Finland zone 4 -<2394> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<2394> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs <> # South Yemen / Gauss-Kruger zone 8 <2395> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs <> # South Yemen / Gauss-Kruger zone 9 <2396> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 3 -<2397> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2397> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 4 -<2398> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2398> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 5 -<2399> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2399> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs <> # RT90 2.5 gon W (deprecated) -<2400> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> +<2400> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 25 -<2401> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2401> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 26 -<2402> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2402> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 27 -<2403> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2403> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 28 -<2404> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2404> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 29 -<2405> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2405> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 30 -<2406> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2406> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 31 -<2407> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2407> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 32 -<2408> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2408> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 33 -<2409> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2409> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 34 -<2410> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2410> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 35 -<2411> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2411> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 36 -<2412> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2412> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 37 -<2413> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2413> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 38 -<2414> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2414> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 39 -<2415> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2415> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 40 -<2416> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2416> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 41 -<2417> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2417> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 42 -<2418> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2418> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 43 -<2419> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2419> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 44 -<2420> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2420> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 45 -<2421> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2421> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 75E -<2422> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2422> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 78E -<2423> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2423> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 81E -<2424> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2424> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 84E -<2425> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2425> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 87E -<2426> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2426> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 90E -<2427> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2427> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 93E -<2428> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2428> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 96E -<2429> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2429> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 99E -<2430> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2430> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 102E -<2431> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2431> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 105E -<2432> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2432> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 108E -<2433> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2433> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 111E -<2434> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2434> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 114E -<2435> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2435> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 117E -<2436> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2436> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 120E -<2437> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2437> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 123E -<2438> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2438> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 126E -<2439> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2439> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 129E -<2440> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2440> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 132E -<2441> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2441> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 135E -<2442> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2442> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS I <2443> +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS II @@ -1791,1044 +1847,1044 @@ # Albanian 1987 / Gauss-Kruger zone 4 <2462> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 21E -<2463> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2463> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 27E -<2464> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2464> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 33E -<2465> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2465> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 39E -<2466> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2466> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 45E -<2467> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2467> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 51E -<2468> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2468> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 57E -<2469> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2469> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 63E -<2470> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2470> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 69E -<2471> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2471> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 75E -<2472> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2472> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 81E -<2473> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2473> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 87E -<2474> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2474> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 93E -<2475> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2475> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 99E -<2476> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2476> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 105E -<2477> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2477> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 111E -<2478> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2478> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 117E -<2479> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2479> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 123E -<2480> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2480> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 129E -<2481> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2481> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 135E -<2482> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2482> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 141E -<2483> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2483> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 147E -<2484> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2484> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 153E -<2485> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2485> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 159E -<2486> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2486> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 165E -<2487> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2487> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 171E -<2488> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2488> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 177E -<2489> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2489> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 177W -<2490> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2490> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 171W -<2491> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2491> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 9E (deprecated) -<2492> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2492> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 15E (deprecated) -<2493> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2493> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 21E -<2494> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2494> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 27E -<2495> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2495> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 33E -<2496> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2496> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 39E -<2497> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2497> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 45E -<2498> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2498> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 51E -<2499> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2499> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 57E -<2500> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2500> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 63E -<2501> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2501> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 69E -<2502> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2502> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 75E -<2503> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2503> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 81E -<2504> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2504> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 87E -<2505> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2505> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 93E -<2506> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2506> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 99E -<2507> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2507> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 105E -<2508> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2508> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 111E -<2509> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2509> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 117E -<2510> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2510> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 123E -<2511> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2511> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 129E -<2512> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2512> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 135E -<2513> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2513> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 141E -<2514> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2514> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 147E -<2515> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2515> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 153E -<2516> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2516> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 159E -<2517> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2517> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 165E -<2518> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2518> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 171E -<2519> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2519> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 177E -<2520> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2520> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 177W -<2521> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2521> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 171W -<2522> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2522> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 7 -<2523> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2523> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 8 -<2524> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2524> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 9 -<2525> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2525> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 10 -<2526> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2526> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 11 -<2527> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2527> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 12 -<2528> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2528> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 13 -<2529> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2529> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 14 -<2530> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2530> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 15 -<2531> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2531> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 16 -<2532> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2532> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 17 -<2533> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2533> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 18 -<2534> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2534> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 19 -<2535> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2535> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 20 -<2536> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2536> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 21 -<2537> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2537> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 22 -<2538> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2538> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 23 -<2539> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2539> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 24 -<2540> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2540> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 25 -<2541> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2541> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 26 -<2542> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2542> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 27 -<2543> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2543> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 28 -<2544> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2544> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 29 -<2545> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2545> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 30 -<2546> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2546> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 31 -<2547> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2547> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 32 -<2548> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2548> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 33 -<2549> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2549> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Samboja / UTM zone 50S (deprecated) <2550> +proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 34 -<2551> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2551> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 35 -<2552> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2552> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 36 -<2553> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2553> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 37 -<2554> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2554> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 38 -<2555> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2555> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 39 -<2556> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2556> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 40 -<2557> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2557> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 41 -<2558> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2558> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 42 -<2559> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2559> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 43 -<2560> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2560> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 44 -<2561> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2561> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 45 -<2562> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2562> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 46 -<2563> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2563> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 47 -<2564> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2564> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 48 -<2565> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2565> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 49 -<2566> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2566> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 50 -<2567> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2567> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 51 -<2568> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2568> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 52 -<2569> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2569> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 53 -<2570> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2570> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 54 -<2571> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2571> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 55 -<2572> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2572> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 56 -<2573> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2573> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 57 -<2574> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2574> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 58 -<2575> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2575> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 59 -<2576> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2576> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 60 (deprecated) -<2577> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2577> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 61 -<2578> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2578> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 62 -<2579> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2579> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 63 -<2580> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2580> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 64 -<2581> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2581> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 21E -<2582> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2582> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 24E -<2583> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2583> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 27E -<2584> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2584> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 30E -<2585> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2585> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 33E -<2586> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2586> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 36E -<2587> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2587> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 39E -<2588> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2588> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 42E -<2589> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2589> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 45E -<2590> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2590> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 48E -<2591> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2591> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 51E -<2592> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2592> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 54E -<2593> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2593> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 57E -<2594> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2594> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 60E -<2595> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2595> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 63E -<2596> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2596> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 66E -<2597> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2597> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 69E -<2598> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2598> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 72E -<2599> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2599> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Lietuvos Koordinoei Sistema 1994 (deprecated) <2600> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 75E -<2601> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2601> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 78E -<2602> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2602> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 81E -<2603> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2603> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 84E -<2604> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2604> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 87E -<2605> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2605> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 90E -<2606> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2606> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 93E -<2607> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2607> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 96E -<2608> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2608> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 99E -<2609> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2609> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 102E -<2610> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2610> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 105E -<2611> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2611> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 108E -<2612> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2612> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 111E -<2613> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2613> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 114E -<2614> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2614> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 117E -<2615> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2615> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 120E -<2616> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2616> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 123E -<2617> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2617> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 126E -<2618> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2618> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 129E -<2619> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2619> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 132E -<2620> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2620> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 135E -<2621> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2621> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 138E -<2622> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2622> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 141E -<2623> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2623> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 144E -<2624> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2624> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 147E -<2625> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2625> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 150E -<2626> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2626> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 153E -<2627> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2627> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 156E -<2628> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2628> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 159E -<2629> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2629> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 162E -<2630> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2630> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 165E -<2631> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2631> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 168E -<2632> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2632> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 171E -<2633> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2633> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 174E -<2634> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2634> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 177E -<2635> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2635> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 180E -<2636> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2636> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 177W -<2637> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2637> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 174W -<2638> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2638> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 171W -<2639> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2639> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 168W -<2640> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2640> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 7 -<2641> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2641> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 8 -<2642> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2642> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 9 -<2643> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2643> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 10 -<2644> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2644> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 11 -<2645> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2645> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 12 -<2646> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2646> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 13 -<2647> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2647> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 14 -<2648> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2648> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 15 -<2649> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2649> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 16 -<2650> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2650> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 17 -<2651> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2651> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 18 -<2652> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2652> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 19 -<2653> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2653> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 20 -<2654> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2654> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 21 -<2655> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2655> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 22 -<2656> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2656> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 23 -<2657> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2657> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 24 -<2658> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2658> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 25 -<2659> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2659> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 26 -<2660> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2660> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 27 -<2661> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2661> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 28 -<2662> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2662> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 29 -<2663> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2663> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 30 -<2664> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2664> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 31 -<2665> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2665> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 32 -<2666> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2666> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 33 -<2667> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2667> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 34 -<2668> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2668> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 35 -<2669> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2669> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 36 -<2670> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2670> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 37 -<2671> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2671> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 38 -<2672> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2672> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 39 -<2673> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2673> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 40 -<2674> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2674> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 41 -<2675> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2675> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 42 -<2676> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2676> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 43 -<2677> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2677> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 44 -<2678> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2678> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 45 -<2679> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2679> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 46 -<2680> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2680> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 47 -<2681> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2681> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 48 -<2682> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2682> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 49 -<2683> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2683> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 50 -<2684> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2684> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 51 -<2685> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2685> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 52 -<2686> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2686> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 53 -<2687> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2687> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 54 -<2688> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2688> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 55 -<2689> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2689> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 56 -<2690> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2690> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 57 -<2691> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2691> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 58 -<2692> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2692> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 59 -<2693> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2693> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 60 (deprecated) -<2694> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2694> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 61 -<2695> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2695> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 62 -<2696> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2696> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 63 -<2697> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2697> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 64 -<2698> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2698> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 21E -<2699> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2699> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 24E -<2700> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2700> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 27E -<2701> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2701> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 30E -<2702> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2702> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 33E -<2703> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2703> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 36E -<2704> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2704> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 39E -<2705> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2705> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 42E -<2706> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2706> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 45E -<2707> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2707> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 48E -<2708> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2708> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 51E -<2709> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2709> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 54E -<2710> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2710> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 57E -<2711> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2711> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 60E -<2712> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2712> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 63E -<2713> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2713> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 66E -<2714> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2714> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 69E -<2715> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2715> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 72E -<2716> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2716> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 75E -<2717> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2717> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 78E -<2718> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2718> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 81E -<2719> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2719> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 84E -<2720> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2720> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 87E -<2721> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2721> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 90E -<2722> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2722> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 93E -<2723> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2723> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 96E -<2724> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2724> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 99E -<2725> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2725> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 102E -<2726> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2726> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 105E -<2727> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2727> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 108E -<2728> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2728> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 111E -<2729> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2729> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 114E -<2730> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2730> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 117E -<2731> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2731> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 120E -<2732> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2732> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 123E -<2733> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2733> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 126E -<2734> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2734> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 129E -<2735> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2735> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Tete / UTM zone 36S -<2736> +proj=utm +zone=36 +south +ellps=clrk66 +units=m +no_defs <> +<2736> +proj=utm +zone=36 +south +ellps=clrk66 +towgs84=219.315,168.975,-166.145,0.198,5.926,-2.356,-57.104 +units=m +no_defs <> # Tete / UTM zone 37S -<2737> +proj=utm +zone=37 +south +ellps=clrk66 +units=m +no_defs <> +<2737> +proj=utm +zone=37 +south +ellps=clrk66 +towgs84=219.315,168.975,-166.145,0.198,5.926,-2.356,-57.104 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 132E -<2738> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2738> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 135E -<2739> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2739> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 138E -<2740> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2740> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 141E -<2741> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2741> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 144E -<2742> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2742> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 147E -<2743> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2743> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 150E -<2744> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2744> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 153E -<2745> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2745> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 156E -<2746> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2746> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 159E -<2747> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2747> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 162E -<2748> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2748> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 165E -<2749> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2749> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 168E -<2750> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2750> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 171E -<2751> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2751> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 174E -<2752> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2752> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 177E -<2753> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2753> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 180E -<2754> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2754> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 177W -<2755> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2755> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 174W -<2756> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2756> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 171W -<2757> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2757> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 168W -<2758> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<2758> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # NAD83(HARN) / Alabama East -<2759> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2759> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Alabama West -<2760> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2760> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Arizona East -<2761> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2761> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Arizona Central -<2762> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2762> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Arizona West -<2763> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2763> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Arkansas North -<2764> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2764> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Arkansas South -<2765> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs <> +<2765> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / California zone 1 -<2766> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> +<2766> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / California zone 2 -<2767> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> +<2767> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / California zone 3 -<2768> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> +<2768> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / California zone 4 -<2769> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> +<2769> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / California zone 5 -<2770> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> +<2770> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / California zone 6 -<2771> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> +<2771> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Colorado North -<2772> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs <> +<2772> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Colorado Central -<2773> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs <> +<2773> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Colorado South -<2774> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs <> +<2774> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Connecticut -<2775> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +units=m +no_defs <> +<2775> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Delaware -<2776> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2776> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Florida East -<2777> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2777> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Florida West -<2778> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2778> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Florida North -<2779> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2779> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Georgia East -<2780> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2780> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Georgia West -<2781> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2781> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Hawaii zone 1 -<2782> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2782> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Hawaii zone 2 -<2783> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2783> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Hawaii zone 3 -<2784> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2784> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Hawaii zone 4 -<2785> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2785> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Hawaii zone 5 -<2786> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2786> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Idaho East -<2787> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2787> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Idaho Central -<2788> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2788> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Idaho West -<2789> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2789> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Illinois East -<2790> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2790> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Illinois West -<2791> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2791> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Indiana East -<2792> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +units=m +no_defs <> +<2792> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Indiana West -<2793> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +units=m +no_defs <> +<2793> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Iowa North -<2794> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <> +<2794> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Iowa South -<2795> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2795> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Kansas North -<2796> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2796> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Kansas South -<2797> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs <> +<2797> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Kentucky North -<2798> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2798> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Kentucky South -<2799> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> +<2799> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Louisiana North -<2800> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2800> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Louisiana South -<2801> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2801> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Maine East -<2802> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2802> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Maine West -<2803> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2803> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Maryland -<2804> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2804> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Massachusetts Mainland -<2805> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +units=m +no_defs <> +<2805> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Massachusetts Island -<2806> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2806> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Michigan North -<2807> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2807> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Michigan Central -<2808> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2808> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Michigan South -<2809> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2809> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Minnesota North -<2810> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <> +<2810> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Minnesota Central -<2811> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <> +<2811> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Minnesota South -<2812> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <> +<2812> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Mississippi East -<2813> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2813> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Mississippi West -<2814> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2814> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Missouri East -<2815> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2815> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Missouri Central -<2816> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2816> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Missouri West -<2817> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2817> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Montana -<2818> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2818> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Nebraska -<2819> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2819> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Nevada East -<2820> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +units=m +no_defs <> +<2820> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Nevada Central -<2821> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +units=m +no_defs <> +<2821> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Nevada West -<2822> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +units=m +no_defs <> +<2822> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / New Hampshire -<2823> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2823> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / New Jersey -<2824> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2824> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / New Mexico East -<2825> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2825> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / New Mexico Central -<2826> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2826> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / New Mexico West -<2827> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2827> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / New York East -<2828> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2828> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / New York Central -<2829> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2829> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / New York West -<2830> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2830> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / New York Long Island -<2831> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2831> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / North Dakota North -<2832> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2832> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / North Dakota South -<2833> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2833> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Ohio North -<2834> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2834> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Ohio South -<2835> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2835> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Oklahoma North -<2836> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2836> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Oklahoma South -<2837> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2837> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Oregon North -<2838> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2838> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Oregon South -<2839> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2839> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Rhode Island -<2840> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2840> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / South Dakota North -<2841> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2841> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / South Dakota South -<2842> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2842> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Tennessee -<2843> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2843> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Texas North -<2844> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <> +<2844> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Texas North Central -<2845> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs <> +<2845> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Texas Central -<2846> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs <> +<2846> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Texas South Central -<2847> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +units=m +no_defs <> +<2847> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Texas South -<2848> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +units=m +no_defs <> +<2848> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Utah North -<2849> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <> +<2849> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Utah Central -<2850> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs <> +<2850> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Utah South -<2851> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs <> +<2851> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Vermont -<2852> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2852> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Virginia North -<2853> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs <> +<2853> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Virginia South -<2854> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <> +<2854> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Washington North -<2855> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2855> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Washington South -<2856> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2856> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / West Virginia North -<2857> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2857> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / West Virginia South -<2858> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2858> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Wisconsin North -<2859> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2859> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Wisconsin Central -<2860> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2860> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Wisconsin South -<2861> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2861> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Wyoming East -<2862> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2862> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Wyoming East Central -<2863> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <> +<2863> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Wyoming West Central -<2864> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2864> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Wyoming West -<2865> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <> +<2865> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Puerto Rico and Virgin Is. -<2866> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +units=m +no_defs <> +<2866> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Arizona East (ft) -<2867> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +<2867> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(HARN) / Arizona Central (ft) -<2868> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +<2868> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(HARN) / Arizona West (ft) -<2869> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +<2869> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(HARN) / California zone 1 (ftUS) -<2870> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> +<2870> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / California zone 2 (ftUS) -<2871> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> +<2871> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / California zone 3 (ftUS) -<2872> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> +<2872> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / California zone 4 (ftUS) -<2873> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> +<2873> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / California zone 5 (ftUS) -<2874> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> +<2874> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / California zone 6 (ftUS) -<2875> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> +<2875> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Colorado North (ftUS) -<2876> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +units=us-ft +no_defs <> +<2876> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Colorado Central (ftUS) -<2877> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +units=us-ft +no_defs <> +<2877> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Colorado South (ftUS) -<2878> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +units=us-ft +no_defs <> +<2878> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Connecticut (ftUS) -<2879> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +units=us-ft +no_defs <> +<2879> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Delaware (ftUS) -<2880> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2880> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Florida East (ftUS) -<2881> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2881> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Florida West (ftUS) -<2882> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2882> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Florida North (ftUS) -<2883> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2883> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Georgia East (ftUS) -<2884> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2884> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Georgia West (ftUS) -<2885> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2885> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Idaho East (ftUS) -<2886> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2886> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Idaho Central (ftUS) -<2887> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2887> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Idaho West (ftUS) -<2888> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2888> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Indiana East (ftUS) (deprecated) -<2889> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +units=us-ft +no_defs <> +<2889> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Indiana West (ftUS) (deprecated) -<2890> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +units=us-ft +no_defs <> +<2890> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Kentucky North (ftUS) -<2891> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2891> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Kentucky South (ftUS) -<2892> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> +<2892> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Maryland (ftUS) -<2893> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2893> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Massachusetts Mainland (ftUS) -<2894> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +units=us-ft +no_defs <> +<2894> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Massachusetts Island (ftUS) -<2895> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2895> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Michigan North (ft) -<2896> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +<2896> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(HARN) / Michigan Central (ft) -<2897> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +<2897> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(HARN) / Michigan South (ft) -<2898> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +<2898> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(HARN) / Mississippi East (ftUS) -<2899> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2899> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Mississippi West (ftUS) -<2900> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2900> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Montana (ft) -<2901> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +<2901> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(HARN) / New Mexico East (ftUS) -<2902> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2902> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / New Mexico Central (ftUS) -<2903> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2903> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / New Mexico West (ftUS) -<2904> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2904> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / New York East (ftUS) -<2905> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2905> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / New York Central (ftUS) -<2906> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2906> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / New York West (ftUS) -<2907> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2907> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / New York Long Island (ftUS) -<2908> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2908> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / North Dakota North (ft) -<2909> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +<2909> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(HARN) / North Dakota South (ft) -<2910> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +<2910> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(HARN) / Oklahoma North (ftUS) -<2911> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2911> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Oklahoma South (ftUS) -<2912> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2912> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Oregon North (ft) -<2913> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +<2913> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(HARN) / Oregon South (ft) -<2914> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +<2914> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(HARN) / Tennessee (ftUS) -<2915> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2915> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Texas North (ftUS) -<2916> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <> +<2916> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Texas North Central (ftUS) -<2917> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +units=us-ft +no_defs <> +<2917> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Texas Central (ftUS) -<2918> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +units=us-ft +no_defs <> +<2918> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Texas South Central (ftUS) -<2919> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +units=us-ft +no_defs <> +<2919> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Texas South (ftUS) -<2920> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +units=us-ft +no_defs <> +<2920> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Utah North (ft) -<2921> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +units=ft +no_defs <> +<2921> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(HARN) / Utah Central (ft) -<2922> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +units=ft +no_defs <> +<2922> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(HARN) / Utah South (ft) -<2923> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +units=ft +no_defs <> +<2923> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(HARN) / Virginia North (ftUS) -<2924> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +units=us-ft +no_defs <> +<2924> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Virginia South (ftUS) -<2925> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <> +<2925> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Washington North (ftUS) -<2926> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2926> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Washington South (ftUS) -<2927> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2927> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Wisconsin North (ftUS) -<2928> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2928> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Wisconsin Central (ftUS) -<2929> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2929> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Wisconsin South (ftUS) -<2930> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<2930> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # Beduaram / TM 13 NE <2931> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +units=m +no_defs <> # QND95 / Qatar National Grid <2932> +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +units=m +no_defs <> # Segara / UTM zone 50S -<2933> +proj=utm +zone=50 +south +ellps=bessel +units=m +no_defs <> +<2933> +proj=utm +zone=50 +south +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +units=m +no_defs <> # Segara (Jakarta) / NEIEZ (deprecated) -<2934> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs <> +<2934> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +pm=jakarta +units=m +no_defs <> # Pulkovo 1942 / CS63 zone A1 -<2935> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=41.53333333333333 +k=1 +x_0=1300000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2935> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=41.53333333333333 +k=1 +x_0=1300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / CS63 zone A2 -<2936> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=44.53333333333333 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2936> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=44.53333333333333 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / CS63 zone A3 -<2937> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=47.53333333333333 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2937> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=47.53333333333333 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / CS63 zone A4 -<2938> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=50.53333333333333 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2938> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=50.53333333333333 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / CS63 zone K2 -<2939> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=50.76666666666667 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2939> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=50.76666666666667 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / CS63 zone K3 -<2940> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=53.76666666666667 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2940> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=53.76666666666667 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / CS63 zone K4 -<2941> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=56.76666666666667 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs <> +<2941> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=56.76666666666667 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Porto Santo / UTM zone 28N <2942> +proj=utm +zone=28 +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +units=m +no_defs <> # Selvagem Grande / UTM zone 28N -<2943> +proj=utm +zone=28 +ellps=intl +units=m +no_defs <> -# NAD83(CSRS) / SCoPQ zone 2 -<2944> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2943> +proj=utm +zone=28 +ellps=intl +towgs84=-289,-124,60,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / SCoPQ zone 2 (deprecated) +<2944> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 3 -<2945> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2945> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 4 -<2946> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2946> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 5 -<2947> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2947> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 6 -<2948> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2948> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 7 -<2949> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2949> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 8 -<2950> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2950> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 9 -<2951> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2951> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 10 -<2952> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2952> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / New Brunswick Stereographic -<2953> +proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +units=m +no_defs <> +<2953> +proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / Prince Edward Isl. Stereographic (NAD83) -<2954> +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +units=m +no_defs <> +<2954> +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 11N -<2955> +proj=utm +zone=11 +ellps=GRS80 +units=m +no_defs <> +<2955> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 12N -<2956> +proj=utm +zone=12 +ellps=GRS80 +units=m +no_defs <> +<2956> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 13N -<2957> +proj=utm +zone=13 +ellps=GRS80 +units=m +no_defs <> +<2957> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 17N -<2958> +proj=utm +zone=17 +ellps=GRS80 +units=m +no_defs <> +<2958> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 18N -<2959> +proj=utm +zone=18 +ellps=GRS80 +units=m +no_defs <> +<2959> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 19N -<2960> +proj=utm +zone=19 +ellps=GRS80 +units=m +no_defs <> +<2960> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 20N -<2961> +proj=utm +zone=20 +ellps=GRS80 +units=m +no_defs <> +<2961> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 21N -<2962> +proj=utm +zone=21 +ellps=GRS80 +units=m +no_defs <> +<2962> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Lisbon 1890 (Lisbon) / Portugal Bonne # Unable to translate coordinate system EPSG:2963 into PROJ.4 format. # # NAD27 / Alaska Albers -<2964> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<2964> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD83 / Indiana East (ftUS) -<2965> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2965> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Indiana West (ftUS) -<2966> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<2966> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Indiana East (ftUS) -<2967> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <> +<2967> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Indiana West (ftUS) -<2968> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <> +<2968> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # Fort Marigot / UTM zone 20N <2969> +proj=utm +zone=20 +ellps=intl +towgs84=137,248,-430,0,0,0,0 +units=m +no_defs <> # Guadeloupe 1948 / UTM zone 20N -<2970> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <> +<2970> +proj=utm +zone=20 +ellps=intl +towgs84=-467,-16,-300,0,0,0,0 +units=m +no_defs <> # CSG67 / UTM zone 22N <2971> +proj=utm +zone=22 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs <> # RGFG95 / UTM zone 22N -<2972> +proj=utm +zone=22 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs <> +<2972> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Martinique 1938 / UTM zone 20N -<2973> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <> +<2973> +proj=utm +zone=20 +ellps=intl +towgs84=186,482,151,0,0,0,0 +units=m +no_defs <> # RGR92 / UTM zone 40S <2975> +proj=utm +zone=40 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Tahiti 52 / UTM zone 6S <2976> +proj=utm +zone=6 +south +ellps=intl +towgs84=162,117,154,0,0,0,0 +units=m +no_defs <> # Tahaa 54 / UTM zone 5S -<2977> +proj=utm +zone=5 +south +ellps=intl +units=m +no_defs <> +<2977> +proj=utm +zone=5 +south +ellps=intl +towgs84=72.438,345.918,79.486,1.6045,0.8823,0.5565,1.3746 +units=m +no_defs <> # IGN72 Nuku Hiva / UTM zone 7S -<2978> +proj=utm +zone=7 +south +ellps=intl +units=m +no_defs <> +<2978> +proj=utm +zone=7 +south +ellps=intl +towgs84=84,274,65,0,0,0,0 +units=m +no_defs <> # K0 1949 / UTM zone 42S (deprecated) <2979> +proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs <> # Combani 1950 / UTM zone 38S <2980> +proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs <> # IGN56 Lifou / UTM zone 58S -<2981> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> +<2981> +proj=utm +zone=58 +south +ellps=intl +towgs84=335.47,222.58,-230.94,0,0,0,0 +units=m +no_defs <> # IGN72 Grand Terre / UTM zone 58S (deprecated) -<2982> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> +<2982> +proj=utm +zone=58 +south +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +units=m +no_defs <> # ST87 Ouvea / UTM zone 58S (deprecated) <2983> +proj=utm +zone=58 +south +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +units=m +no_defs <> # RGNC 1991 / Lambert New Caledonia (deprecated) @@ -2842,41 +2898,41 @@ # Saint Pierre et Miquelon 1950 / UTM zone 21N <2987> +proj=utm +zone=21 +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +units=m +no_defs <> # MOP78 / UTM zone 1S -<2988> +proj=utm +zone=1 +south +ellps=intl +units=m +no_defs <> -# RRAF 1991 / UTM zone 20N +<2988> +proj=utm +zone=1 +south +ellps=intl +towgs84=253,-132,-127,0,0,0,0 +units=m +no_defs <> +# RRAF 1991 / UTM zone 20N (deprecated) <2989> +proj=utm +zone=20 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Reunion 1947 / TM Reunion (deprecated) -<2990> +proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=50000 +y_0=160000 +ellps=intl +units=m +no_defs <> +<2990> +proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=50000 +y_0=160000 +ellps=intl +towgs84=94,-948,-1262,0,0,0,0 +units=m +no_defs <> # NAD83 / Oregon Lambert -<2991> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<2991> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Oregon Lambert (ft) -<2992> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> +<2992> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(HARN) / Oregon Lambert -<2993> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<2993> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Oregon Lambert (ft) -<2994> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +<2994> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # IGN53 Mare / UTM zone 58S -<2995> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> +<2995> +proj=utm +zone=58 +south +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +units=m +no_defs <> # ST84 Ile des Pins / UTM zone 58S -<2996> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> +<2996> +proj=utm +zone=58 +south +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +units=m +no_defs <> # ST71 Belep / UTM zone 58S <2997> +proj=utm +zone=58 +south +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +units=m +no_defs <> # NEA74 Noumea / UTM zone 58S -<2998> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> +<2998> +proj=utm +zone=58 +south +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +units=m +no_defs <> # Grand Comoros / UTM zone 38S -<2999> +proj=utm +zone=38 +south +ellps=intl +units=m +no_defs <> +<2999> +proj=utm +zone=38 +south +ellps=intl +towgs84=-963,510,-359,0,0,0,0 +units=m +no_defs <> # Segara / NEIEZ -<3000> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +units=m +no_defs <> +<3000> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +units=m +no_defs <> # Batavia / NEIEZ -<3001> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +units=m +no_defs <> +<3001> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs <> # Makassar / NEIEZ <3002> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +units=m +no_defs <> # Monte Mario / Italy zone 1 -<3003> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<3003> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +units=m +no_defs <> # Monte Mario / Italy zone 2 -<3004> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +units=m +no_defs <> +<3004> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +units=m +no_defs <> # NAD83 / BC Albers -<3005> +proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3005> +proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 TM <3006> +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 12 00 @@ -2904,17 +2960,17 @@ # SWEREF99 23 15 <3018> +proj=tmerc +lat_0=0 +lon_0=23.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RT90 7.5 gon V -<3019> +proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> +<3019> +proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs <> # RT90 5 gon V -<3020> +proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> +<3020> +proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs <> # RT90 2.5 gon V -<3021> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> +<3021> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs <> # RT90 0 gon -<3022> +proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> +<3022> +proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs <> # RT90 2.5 gon O -<3023> +proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> +<3023> +proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs <> # RT90 5 gon O -<3024> +proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> +<3024> +proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs <> # RT38 7.5 gon V <3025> +proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT38 5 gon V @@ -2928,47 +2984,47 @@ # RT38 5 gon O <3030> +proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # WGS 84 / Antarctic Polar Stereographic -<3031> +proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3031> +proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / Australian Antarctic Polar Stereographic -<3032> +proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=70 +k=1 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3032> +proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=70 +k=1 +x_0=6000000 +y_0=6000000 +datum=WGS84 +units=m +no_defs <> # WGS 84 / Australian Antarctic Lambert -<3033> +proj=lcc +lat_1=-68.5 +lat_2=-74.5 +lat_0=-50 +lon_0=70 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# ETRS89 / ETRS-LCC -<3034> +proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-LAEA -<3035> +proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs <> +<3033> +proj=lcc +lat_1=-68.5 +lat_2=-74.5 +lat_0=-50 +lon_0=70 +x_0=6000000 +y_0=6000000 +datum=WGS84 +units=m +no_defs <> +# ETRS89 / LCC Europe +<3034> +proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / LAEA Europe +<3035> +proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Moznet / UTM zone 36S <3036> +proj=utm +zone=36 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs <> # Moznet / UTM zone 37S <3037> +proj=utm +zone=37 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs <> -# ETRS89 / ETRS-TM26 -<3038> +proj=utm +zone=26 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM27 -<3039> +proj=utm +zone=27 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM28 -<3040> +proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM29 -<3041> +proj=utm +zone=29 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM30 -<3042> +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM31 -<3043> +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM32 -<3044> +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM33 -<3045> +proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM34 -<3046> +proj=utm +zone=34 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM35 -<3047> +proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM36 -<3048> +proj=utm +zone=36 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM37 -<3049> +proj=utm +zone=37 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM38 -<3050> +proj=utm +zone=38 +ellps=GRS80 +units=m +no_defs <> -# ETRS89 / ETRS-TM39 -<3051> +proj=utm +zone=39 +ellps=GRS80 +units=m +no_defs <> +# ETRS89 / TM26 +<3038> +proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / TM27 +<3039> +proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / TM28 +<3040> +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / TM29 +<3041> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / TM30 +<3042> +proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / TM31 +<3043> +proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / TM32 +<3044> +proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / TM33 +<3045> +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / TM34 +<3046> +proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / TM35 +<3047> +proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / TM36 +<3048> +proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / TM37 +<3049> +proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / TM38 +<3050> +proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / TM39 +<3051> +proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Reykjavik 1900 / Lambert 1900 # Unable to translate coordinate system EPSG:3052 into PROJ.4 format. # @@ -2984,83 +3040,83 @@ # ISN93 / Lambert 1993 <3057> +proj=lcc +lat_1=64.25 +lat_2=65.75 +lat_0=65 +lon_0=-19 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Helle 1954 / Jan Mayen Grid -<3058> +proj=tmerc +lat_0=0 +lon_0=-8.5 +k=1 +x_0=50000 +y_0=-7800000 +ellps=intl +towgs84=982.609,552.753,-540.873,32.3934,-153.257,-96.2266,16.805 +units=m +no_defs <> +<3058> +proj=tmerc +lat_0=0 +lon_0=-8.5 +k=1 +x_0=50000 +y_0=-7800000 +ellps=intl +towgs84=982.609,552.753,-540.873,6.68163,-31.6115,-19.8482,16.805 +units=m +no_defs <> # LKS92 / Latvia TM <3059> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IGN72 Grande Terre / UTM zone 58S -<3060> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> +<3060> +proj=utm +zone=58 +south +ellps=intl +towgs84=-11.64,-348.6,291.98,0,0,0,0 +units=m +no_defs <> # Porto Santo 1995 / UTM zone 28N -<3061> +proj=utm +zone=28 +ellps=intl +units=m +no_defs <> +<3061> +proj=utm +zone=28 +ellps=intl +towgs84=-502.862,-247.438,312.724,0,0,0,0 +units=m +no_defs <> # Azores Oriental 1995 / UTM zone 26N -<3062> +proj=utm +zone=26 +ellps=intl +units=m +no_defs <> +<3062> +proj=utm +zone=26 +ellps=intl +towgs84=-204.619,140.176,55.226,0,0,0,0 +units=m +no_defs <> # Azores Central 1995 / UTM zone 26N -<3063> +proj=utm +zone=26 +ellps=intl +units=m +no_defs <> +<3063> +proj=utm +zone=26 +ellps=intl +towgs84=-106.226,166.366,-37.893,0,0,0,0 +units=m +no_defs <> # IGM95 / UTM zone 32N <3064> +proj=utm +zone=32 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IGM95 / UTM zone 33N <3065> +proj=utm +zone=33 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ED50 / Jordan TM -<3066> +proj=tmerc +lat_0=0 +lon_0=37 +k=0.9998 +x_0=500000 +y_0=-3000000 +ellps=intl +units=m +no_defs <> -# ETRS89 / ETRS-TM35FIN -<3067> +proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs <> +<3066> +proj=tmerc +lat_0=0 +lon_0=37 +k=0.9998 +x_0=500000 +y_0=-3000000 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> +# ETRS89 / TM35FIN(E,N) +<3067> +proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DHDN / Soldner Berlin -<3068> +proj=cass +lat_0=52.41864827777778 +lon_0=13.62720366666667 +x_0=40000 +y_0=10000 +ellps=bessel +datum=potsdam +units=m +no_defs <> +<3068> +proj=cass +lat_0=52.41864827777778 +lon_0=13.62720366666667 +x_0=40000 +y_0=10000 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs <> # NAD27 / Wisconsin Transverse Mercator -<3069> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=500000 +y_0=-4500000 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<3069> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=500000 +y_0=-4500000 +datum=NAD27 +units=m +no_defs <> # NAD83 / Wisconsin Transverse Mercator -<3070> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3070> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Wisconsin Transverse Mercator -<3071> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +units=m +no_defs <> +<3071> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Maine CS2000 East -<3072> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3072> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Maine CS2000 Central (deprecated) -<3073> +proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3073> +proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Maine CS2000 West -<3074> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3074> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Maine CS2000 East -<3075> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3075> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Maine CS2000 Central (deprecated) -<3076> +proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3076> +proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Maine CS2000 West -<3077> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3077> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Michigan Oblique Mercator -<3078> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3078> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +gamma=337.25556 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Michigan Oblique Mercator -<3079> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +units=m +no_defs <> +<3079> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +gamma=337.25556 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD27 / Shackleford -<3080> +proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=914400 +y_0=914400 +ellps=clrk66 +datum=NAD27 +units=ft +no_defs <> +<3080> +proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=914400 +y_0=914400 +datum=NAD27 +units=ft +no_defs <> # NAD83 / Texas State Mapping System -<3081> +proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3081> +proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Texas Centric Lambert Conformal -<3082> +proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3082> +proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Texas Centric Albers Equal Area -<3083> +proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3083> +proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Texas Centric Lambert Conformal -<3084> +proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +units=m +no_defs <> +<3084> +proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Texas Centric Albers Equal Area -<3085> +proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +units=m +no_defs <> +<3085> +proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Florida GDL Albers -<3086> +proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3086> +proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Florida GDL Albers -<3087> +proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3087> +proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Kentucky Single Zone -<3088> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3088> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Kentucky Single Zone (ftUS) -<3089> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3089> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Kentucky Single Zone -<3090> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <> +<3090> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Kentucky Single Zone (ftUS) -<3091> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <> +<3091> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # Tokyo / UTM zone 51N -<3092> +proj=utm +zone=51 +ellps=bessel +units=m +no_defs <> +<3092> +proj=utm +zone=51 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Tokyo / UTM zone 52N -<3093> +proj=utm +zone=52 +ellps=bessel +units=m +no_defs <> +<3093> +proj=utm +zone=52 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Tokyo / UTM zone 53N -<3094> +proj=utm +zone=53 +ellps=bessel +units=m +no_defs <> +<3094> +proj=utm +zone=53 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Tokyo / UTM zone 54N -<3095> +proj=utm +zone=54 +ellps=bessel +units=m +no_defs <> +<3095> +proj=utm +zone=54 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Tokyo / UTM zone 55N -<3096> +proj=utm +zone=55 +ellps=bessel +units=m +no_defs <> +<3096> +proj=utm +zone=55 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # JGD2000 / UTM zone 51N <3097> +proj=utm +zone=51 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / UTM zone 52N @@ -3080,15 +3136,15 @@ # Mauritania 1999 / UTM zone 30N (deprecated) <3105> +proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs <> # Gulshan 303 / Bangladesh Transverse Mercator -<3106> +proj=tmerc +lat_0=0 +lon_0=90 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> +<3106> +proj=tmerc +lat_0=0 +lon_0=90 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +towgs84=283.7,735.9,261.1,0,0,0,0 +units=m +no_defs <> # GDA94 / SA Lambert <3107> +proj=lcc +lat_1=-28 +lat_2=-36 +lat_0=-32 +lon_0=135 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / Guernsey Grid -<3108> +proj=tmerc +lat_0=49.5 +lon_0=-2.416666666666667 +k=0.999997 +x_0=47000 +y_0=50000 +ellps=GRS80 +units=m +no_defs <> +<3108> +proj=tmerc +lat_0=49.5 +lon_0=-2.416666666666667 +k=0.999997 +x_0=47000 +y_0=50000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / Jersey Transverse Mercator -<3109> +proj=tmerc +lat_0=49.225 +lon_0=-2.135 +k=0.9999999000000001 +x_0=40000 +y_0=70000 +ellps=GRS80 +units=m +no_defs <> +<3109> +proj=tmerc +lat_0=49.225 +lon_0=-2.135 +k=0.9999999000000001 +x_0=40000 +y_0=70000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # AGD66 / Vicgrid66 -<3110> +proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=4500000 +ellps=aust_SA +units=m +no_defs <> +<3110> +proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=4500000 +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs <> # GDA94 / Vicgrid94 <3111> +proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / Geoscience Australia Lambert @@ -3108,7 +3164,7 @@ # Douala 1948 / AEF west <3119> +proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942(58) / Poland zone I -<3120> +proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5467000 +ellps=krass +units=m +no_defs <> +<3120> +proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5467000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs <> # PRS92 / Philippines zone 1 <3121> +proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs <> # PRS92 / Philippines zone 2 @@ -3120,31 +3176,31 @@ # PRS92 / Philippines zone 5 <3125> +proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs <> # ETRS89 / ETRS-GK19FIN -<3126> +proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3126> +proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / ETRS-GK20FIN -<3127> +proj=tmerc +lat_0=0 +lon_0=20 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3127> +proj=tmerc +lat_0=0 +lon_0=20 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / ETRS-GK21FIN -<3128> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3128> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / ETRS-GK22FIN -<3129> +proj=tmerc +lat_0=0 +lon_0=22 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3129> +proj=tmerc +lat_0=0 +lon_0=22 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / ETRS-GK23FIN -<3130> +proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3130> +proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / ETRS-GK24FIN -<3131> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3131> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / ETRS-GK25FIN -<3132> +proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3132> +proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / ETRS-GK26FIN -<3133> +proj=tmerc +lat_0=0 +lon_0=26 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3133> +proj=tmerc +lat_0=0 +lon_0=26 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / ETRS-GK27FIN -<3134> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3134> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / ETRS-GK28FIN -<3135> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3135> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / ETRS-GK29FIN -<3136> +proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3136> +proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / ETRS-GK30FIN -<3137> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3137> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / ETRS-GK31FIN -<3138> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3138> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Vanua Levu 1915 / Vanua Levu Grid # Unable to translate coordinate system EPSG:3139 into PROJ.4 format. # @@ -3155,7 +3211,7 @@ # Fiji 1956 / UTM zone 1S <3142> +proj=utm +zone=1 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs <> # Fiji 1986 / Fiji Map Grid (deprecated) -<3143> +proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +units=m +no_defs <> +<3143> +proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # FD54 / Faroe Lambert # Unable to translate coordinate system EPSG:3144 into PROJ.4 format. # @@ -3163,51 +3219,51 @@ # Unable to translate coordinate system EPSG:3145 into PROJ.4 format. # # Pulkovo 1942 / 3-degree Gauss-Kruger zone 6 -<3146> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<3146> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 18E -<3147> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<3147> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Indian 1960 / UTM zone 48N -<3148> +proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> +<3148> +proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs <> # Indian 1960 / UTM zone 49N -<3149> +proj=utm +zone=49 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> +<3149> +proj=utm +zone=49 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 6 -<3150> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<3150> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 18E -<3151> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<3151> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # ST74 <3152> +proj=tmerc +lat_0=0 +lon_0=18.05779 +k=0.99999425 +x_0=100178.1808 +y_0=-6500614.7836 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / BC Albers -<3153> +proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3153> +proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 7N -<3154> +proj=utm +zone=7 +ellps=GRS80 +units=m +no_defs <> +<3154> +proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 8N -<3155> +proj=utm +zone=8 +ellps=GRS80 +units=m +no_defs <> +<3155> +proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 9N -<3156> +proj=utm +zone=9 +ellps=GRS80 +units=m +no_defs <> +<3156> +proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 10N -<3157> +proj=utm +zone=10 +ellps=GRS80 +units=m +no_defs <> +<3157> +proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 14N -<3158> +proj=utm +zone=14 +ellps=GRS80 +units=m +no_defs <> +<3158> +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 15N -<3159> +proj=utm +zone=15 +ellps=GRS80 +units=m +no_defs <> +<3159> +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 16N -<3160> +proj=utm +zone=16 +ellps=GRS80 +units=m +no_defs <> +<3160> +proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Ontario MNR Lambert -<3161> +proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3161> +proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / Ontario MNR Lambert -<3162> +proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +units=m +no_defs <> +<3162> +proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGNC91-93 / Lambert New Caledonia <3163> +proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ST87 Ouvea / UTM zone 58S <3164> +proj=utm +zone=58 +south +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +units=m +no_defs <> # NEA74 Noumea / Noumea Lambert -<3165> +proj=lcc +lat_1=-22.24469175 +lat_2=-22.29469175 +lat_0=-22.26969175 +lon_0=166.44242575 +x_0=0.66 +y_0=1.02 +ellps=intl +units=m +no_defs <> +<3165> +proj=lcc +lat_1=-22.24469175 +lat_2=-22.29469175 +lat_0=-22.26969175 +lon_0=166.44242575 +x_0=0.66 +y_0=1.02 +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +units=m +no_defs <> # NEA74 Noumea / Noumea Lambert 2 -<3166> +proj=lcc +lat_1=-22.24472222222222 +lat_2=-22.29472222222222 +lat_0=-22.26972222222222 +lon_0=166.4425 +x_0=8.313000000000001 +y_0=-2.354 +ellps=intl +units=m +no_defs <> +<3166> +proj=lcc +lat_1=-22.24472222222222 +lat_2=-22.29472222222222 +lat_0=-22.26972222222222 +lon_0=166.4425 +x_0=8.313000000000001 +y_0=-2.354 +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +units=m +no_defs <> # Kertau (RSO) / RSO Malaya (ch) -<3167> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=40000 +y_0=0 +a=6377295.664 +b=6356094.667915204 +to_meter=20.116756 +no_defs <> +<3167> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=40000 +y_0=0 +gamma=323.1301023611111 +a=6377295.664 +b=6356094.667915204 +to_meter=20.116756 +no_defs <> # Kertau (RSO) / RSO Malaya (m) -<3168> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804670.24 +y_0=0 +a=6377295.664 +b=6356094.667915204 +units=m +no_defs <> +<3168> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804670.24 +y_0=0 +gamma=323.1301023611111 +a=6377295.664 +b=6356094.667915204 +units=m +no_defs <> # RGNC91-93 / UTM zone 57S <3169> +proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGNC91-93 / UTM zone 58S @@ -3215,16 +3271,16 @@ # RGNC91-93 / UTM zone 59S <3171> +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IGN53 Mare / UTM zone 59S -<3172> +proj=utm +zone=59 +south +ellps=intl +units=m +no_defs <> +<3172> +proj=utm +zone=59 +south +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +units=m +no_defs <> # fk89 / Faroe Lambert FK89 # Unable to translate coordinate system EPSG:3173 into PROJ.4 format. # # NAD83 / Great Lakes Albers -<3174> +proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-84.455955 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3174> +proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-84.455955 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Great Lakes and St Lawrence Albers -<3175> +proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-83.248627 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3175> +proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-83.248627 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Indian 1960 / TM 106 NE -<3176> +proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> +<3176> +proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs <> # LGD2006 / Libya TM <3177> +proj=tmerc +lat_0=0 +lon_0=17 +k=0.9965000000000001 +x_0=1000000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 18N @@ -3272,7 +3328,7 @@ # LGD2006 / UTM zone 32N <3199> +proj=utm +zone=32 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # FD58 / Iraq zone -<3200> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs <> +<3200> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +towgs84=-239.1,-170.02,397.5,0,0,0,0 +units=m +no_defs <> # LGD2006 / UTM zone 33N <3201> +proj=utm +zone=33 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / UTM zone 34N @@ -3280,208 +3336,208 @@ # LGD2006 / UTM zone 35N <3203> +proj=utm +zone=35 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # WGS 84 / SCAR IMW SP19-20 -<3204> +proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3204> +proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SP21-22 -<3205> +proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3205> +proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SP23-24 -<3206> +proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3206> +proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-42 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ01-02 -<3207> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-174 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3207> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-174 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ19-20 -<3208> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3208> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ21-22 -<3209> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3209> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ37-38 -<3210> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3210> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ39-40 -<3211> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3211> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ41-42 -<3212> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3212> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ43-44 -<3213> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3213> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ45-46 -<3214> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3214> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ47-48 -<3215> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3215> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ49-50 -<3216> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3216> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ51-52 -<3217> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3217> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ53-54 -<3218> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3218> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ55-56 -<3219> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3219> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ57-58 -<3220> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3220> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR13-14 -<3221> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3221> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-102 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR15-16 -<3222> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3222> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR17-18 -<3223> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3223> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-78 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR19-20 -<3224> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3224> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR27-28 -<3225> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-18 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3225> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-18 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR29-30 -<3226> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-6 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3226> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-6 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR31-32 -<3227> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=6 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3227> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=6 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR33-34 -<3228> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=18 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3228> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=18 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR35-36 -<3229> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=30 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3229> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=30 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR37-38 -<3230> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3230> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR39-40 -<3231> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3231> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR41-42 -<3232> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3232> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR43-44 -<3233> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3233> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR45-46 -<3234> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3234> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR47-48 -<3235> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3235> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR49-50 -<3236> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3236> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR51-52 -<3237> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3237> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR53-54 -<3238> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3238> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR55-56 -<3239> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3239> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR57-58 -<3240> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3240> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR59-60 -<3241> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=174 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3241> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=174 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS04-06 -<3242> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-153 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3242> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-153 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS07-09 -<3243> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-135 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3243> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-135 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS10-12 -<3244> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-117 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3244> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-117 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS13-15 -<3245> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-99 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3245> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-99 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS16-18 -<3246> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-81 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3246> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-81 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS19-21 -<3247> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-63 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3247> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-63 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS25-27 -<3248> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-27 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3248> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-27 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS28-30 -<3249> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-9 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3249> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-9 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS31-33 -<3250> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=9 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3250> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=9 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS34-36 -<3251> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=27 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3251> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=27 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS37-39 -<3252> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=45 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3252> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=45 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS40-42 -<3253> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=63 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3253> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=63 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS43-45 -<3254> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=81 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3254> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=81 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS46-48 -<3255> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=99 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3255> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=99 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS49-51 -<3256> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=117 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3256> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=117 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS52-54 -<3257> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=135 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3257> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=135 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS55-57 -<3258> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=153 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3258> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=153 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS58-60 -<3259> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=171 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3259> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=171 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST01-04 -<3260> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-168 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3260> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-168 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST05-08 -<3261> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-144 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3261> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-144 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST09-12 -<3262> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-120 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3262> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-120 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST13-16 -<3263> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-96 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3263> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-96 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST17-20 -<3264> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-72 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3264> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-72 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST21-24 -<3265> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-48 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3265> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-48 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST25-28 -<3266> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-24 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3266> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-24 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST29-32 -<3267> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3267> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST33-36 -<3268> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=24 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3268> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=24 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST37-40 -<3269> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=48 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3269> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=48 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST41-44 -<3270> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=72 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3270> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=72 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST45-48 -<3271> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=96 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3271> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=96 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST49-52 -<3272> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=120 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3272> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=120 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST53-56 -<3273> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=144 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3273> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=144 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST57-60 -<3274> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=168 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3274> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=168 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU01-05 -<3275> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-165 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3275> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-165 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU06-10 -<3276> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-135 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3276> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-135 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU11-15 -<3277> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-105 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3277> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-105 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU16-20 -<3278> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-75 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3278> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-75 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU21-25 -<3279> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3279> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU26-30 -<3280> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-15 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3280> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-15 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU31-35 -<3281> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=15 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3281> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=15 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU36-40 -<3282> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3282> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=45 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU41-45 -<3283> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=75 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3283> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=75 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU46-50 -<3284> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=105 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3284> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=105 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU51-55 -<3285> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=135 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3285> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=135 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU56-60 -<3286> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=165 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3286> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=165 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SV01-10 -<3287> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3287> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SV11-20 -<3288> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-90 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3288> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-90 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SV21-30 -<3289> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-30 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3289> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-30 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SV31-40 -<3290> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=30 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3290> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=30 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SV41-50 -<3291> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=90 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3291> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=90 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SV51-60 -<3292> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3292> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SW01-60 -<3293> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3293> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / USGS Transantarctic Mountains -<3294> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-78 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3294> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-78 +lon_0=162 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # Guam 1963 / Yap Islands # Unable to translate coordinate system EPSG:3295 into PROJ.4 format. # # RGPF / UTM zone 5S -<3296> +proj=utm +zone=5 +south +ellps=GRS80 +units=m +no_defs <> +<3296> +proj=utm +zone=5 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs <> # RGPF / UTM zone 6S -<3297> +proj=utm +zone=6 +south +ellps=GRS80 +units=m +no_defs <> +<3297> +proj=utm +zone=6 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs <> # RGPF / UTM zone 7S -<3298> +proj=utm +zone=7 +south +ellps=GRS80 +units=m +no_defs <> +<3298> +proj=utm +zone=7 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs <> # RGPF / UTM zone 8S -<3299> +proj=utm +zone=8 +south +ellps=GRS80 +units=m +no_defs <> +<3299> +proj=utm +zone=8 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs <> # Estonian Coordinate System of 1992 <3300> +proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +units=m +no_defs <> # Estonian Coordinate System of 1997 <3301> +proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IGN63 Hiva Oa / UTM zone 7S -<3302> +proj=utm +zone=7 +south +ellps=intl +units=m +no_defs <> +<3302> +proj=utm +zone=7 +south +ellps=intl +towgs84=410.721,55.049,80.746,2.5779,2.3514,0.6664,17.3311 +units=m +no_defs <> # Fatu Iva 72 / UTM zone 7S <3303> +proj=utm +zone=7 +south +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +units=m +no_defs <> # Tahiti 79 / UTM zone 6S -<3304> +proj=utm +zone=6 +south +ellps=intl +units=m +no_defs <> +<3304> +proj=utm +zone=6 +south +ellps=intl +towgs84=221.525,152.948,176.768,-2.3847,-1.3896,-0.877,11.4741 +units=m +no_defs <> # Moorea 87 / UTM zone 6S <3305> +proj=utm +zone=6 +south +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +units=m +no_defs <> # Maupiti 83 / UTM zone 5S @@ -3491,15 +3547,15 @@ # GDA94 / NSW Lambert <3308> +proj=lcc +lat_1=-30.75 +lat_2=-35.75 +lat_0=-33.25 +lon_0=147 +x_0=9300000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD27 / California Albers -<3309> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<3309> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +datum=NAD27 +units=m +no_defs <> # NAD83 / California Albers -<3310> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3310> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / California Albers -<3311> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +units=m +no_defs <> +<3311> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # CSG67 / UTM zone 21N <3312> +proj=utm +zone=21 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs <> # RGFG95 / UTM zone 21N -<3313> +proj=utm +zone=21 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs <> +<3313> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Katanga 1955 / Katanga Lambert (deprecated) <3314> +proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=0 +lon_0=26 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> # Katanga 1955 / Katanga TM (deprecated) @@ -3529,27 +3585,27 @@ # IGC 1962 / Congo TM zone 30 <3327> +proj=tmerc +lat_0=0 +lon_0=30 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # Pulkovo 1942(58) / GUGiK-80 -<3328> +proj=sterea +lat_0=52.16666666666666 +lon_0=19.16666666666667 +k=0.999714 +x_0=500000 +y_0=500000 +ellps=krass +units=m +no_defs <> +<3328> +proj=sterea +lat_0=52.16666666666666 +lon_0=19.16666666666667 +k=0.999714 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 5 -<3329> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<3329> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 6 -<3330> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<3330> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 7 -<3331> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<3331> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 8 -<3332> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<3332> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs <> # Pulkovo 1942(58) / Gauss-Kruger zone 3 -<3333> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<3333> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs <> # Pulkovo 1942(58) / Gauss-Kruger zone 4 -<3334> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<3334> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs <> # Pulkovo 1942(58) / Gauss-Kruger zone 5 -<3335> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<3335> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs <> # IGN 1962 Kerguelen / UTM zone 42S <3336> +proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs <> # Le Pouce 1934 / Mauritius Grid <3337> +proj=lcc +lat_1=-20.19506944444445 +lat_0=-20.19506944444445 +lon_0=57.52182777777778 +k_0=1 +x_0=1000000 +y_0=1000000 +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +units=m +no_defs <> # NAD83 / Alaska Albers -<3338> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3338> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IGCB 1955 / Congo TM zone 12 <3339> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs <> # IGCB 1955 / Congo TM zone 14 @@ -3567,17 +3623,17 @@ # LKS94 / Lithuania TM <3346> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Statistics Canada Lambert -<3347> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3347> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / Statistics Canada Lambert -<3348> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs <> +<3348> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # WGS 84 / PDC Mercator (deprecated) -<3349> +proj=merc +lon_0=-150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3349> +proj=merc +lon_0=-150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # Pulkovo 1942 / CS63 zone C0 -<3350> +proj=tmerc +lat_0=0.1 +lon_0=21.95 +k=1 +x_0=250000 +y_0=0 +ellps=krass +units=m +no_defs <> +<3350> +proj=tmerc +lat_0=0.1 +lon_0=21.95 +k=1 +x_0=250000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / CS63 zone C1 -<3351> +proj=tmerc +lat_0=0.1 +lon_0=24.95 +k=1 +x_0=1250000 +y_0=0 +ellps=krass +units=m +no_defs <> +<3351> +proj=tmerc +lat_0=0.1 +lon_0=24.95 +k=1 +x_0=1250000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / CS63 zone C2 -<3352> +proj=tmerc +lat_0=0.1 +lon_0=27.95 +k=1 +x_0=2250000 +y_0=0 +ellps=krass +units=m +no_defs <> +<3352> +proj=tmerc +lat_0=0.1 +lon_0=27.95 +k=1 +x_0=2250000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Mhast (onshore) / UTM zone 32S <3353> +proj=utm +zone=32 +south +ellps=intl +units=m +no_defs <> # Mhast (offshore) / UTM zone 32S @@ -3587,23 +3643,23 @@ # Grand Cayman 1959 / UTM zone 17N <3356> +proj=utm +zone=17 +ellps=clrk66 +towgs84=67.8,106.1,138.8,0,0,0,0 +units=m +no_defs <> # Little Cayman 1961 / UTM zone 17N -<3357> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs <> +<3357> +proj=utm +zone=17 +ellps=clrk66 +towgs84=42,124,147,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / North Carolina -<3358> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3358> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / North Carolina (ftUS) (deprecated) -<3359> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024385 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +<3359> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024385 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(HARN) / South Carolina -<3360> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3360> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / South Carolina (ft) -<3361> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> +<3361> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(HARN) / Pennsylvania North -<3362> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3362> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Pennsylvania North (ftUS) -<3363> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<3363> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Pennsylvania South -<3364> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3364> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Pennsylvania South (ftUS) -<3365> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<3365> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # Hong Kong 1963 Grid System (deprecated) <3366> +proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +units=m +no_defs <> # IGN Astro 1960 / UTM zone 28N @@ -3613,19 +3669,19 @@ # IGN Astro 1960 / UTM zone 30N <3369> +proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs <> # NAD27 / UTM zone 59N -<3370> +proj=utm +zone=59 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<3370> +proj=utm +zone=59 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 60N -<3371> +proj=utm +zone=60 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<3371> +proj=utm +zone=60 +datum=NAD27 +units=m +no_defs <> # NAD83 / UTM zone 59N -<3372> +proj=utm +zone=59 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3372> +proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 60N -<3373> +proj=utm +zone=60 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3373> +proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # FD54 / UTM zone 29N <3374> +proj=utm +zone=29 +ellps=intl +units=m +no_defs <> # GDM2000 / Peninsula RSO -<3375> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257964666666 +k=0.99984 +x_0=804671 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3375> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257964666666 +k=0.99984 +x_0=804671 +y_0=0 +gamma=323.1301023611111 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / East Malaysia BRSO -<3376> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31580995 +k=0.99984 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3376> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31580995 +k=0.99984 +x_0=0 +y_0=0 +gamma=53.13010236111111 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / Johor Grid <3377> +proj=cass +lat_0=2.121679744444445 +lon_0=103.4279362361111 +x_0=-14810.562 +y_0=8758.32 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / Sembilan and Melaka Grid @@ -3645,25 +3701,25 @@ # GDM2000 / Kelantan Grid <3385> +proj=cass +lat_0=5.972543658333334 +lon_0=102.2952416694444 +x_0=13227.851 +y_0=8739.894 +ellps=GRS80 +units=m +no_defs <> # KKJ / Finland zone 0 -<3386> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<3386> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs <> # KKJ / Finland zone 5 -<3387> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<3387> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs <> # Pulkovo 1942 / Caspian Sea Mercator -<3388> +proj=merc +lon_0=51 +k=1 +x_0=0 +y_0=0 +ellps=krass +units=m +no_defs <> +<3388> +proj=merc +lon_0=51 +lat_ts=42 +x_0=0 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 60 -<3389> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<3389> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 60 -<3390> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<3390> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Karbala 1979 / UTM zone 37N -<3391> +proj=utm +zone=37 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs <> +<3391> +proj=utm +zone=37 +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +units=m +no_defs <> # Karbala 1979 / UTM zone 38N -<3392> +proj=utm +zone=38 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs <> +<3392> +proj=utm +zone=38 +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +units=m +no_defs <> # Karbala 1979 / UTM zone 39N -<3393> +proj=utm +zone=39 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs <> +<3393> +proj=utm +zone=39 +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +units=m +no_defs <> # Nahrwan 1934 / Iraq zone <3394> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs <> # WGS 84 / World Mercator -<3395> +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3395> +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # PD/83 / 3-degree Gauss-Kruger zone 3 <3396> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # PD/83 / 3-degree Gauss-Kruger zone 4 @@ -3673,24 +3729,24 @@ # RD/83 / 3-degree Gauss-Kruger zone 5 <3399> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # NAD83 / Alberta 10-TM (Forest) -<3400> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3400> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Alberta 10-TM (Resource) -<3401> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3401> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / Alberta 10-TM (Forest) -<3402> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3402> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / Alberta 10-TM (Resource) -<3403> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3403> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / North Carolina (ftUS) -<3404> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<3404> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # VN-2000 / UTM zone 48N -<3405> +proj=utm +zone=48 +ellps=WGS84 +units=m +no_defs <> +<3405> +proj=utm +zone=48 +ellps=WGS84 +towgs84=-192.873,-39.382,-111.202,-0.00205,-0.0005,0.00335,0.0188 +units=m +no_defs <> # VN-2000 / UTM zone 49N -<3406> +proj=utm +zone=49 +ellps=WGS84 +units=m +no_defs <> +<3406> +proj=utm +zone=49 +ellps=WGS84 +towgs84=-192.873,-39.382,-111.202,-0.00205,-0.0005,0.00335,0.0188 +units=m +no_defs <> # Hong Kong 1963 Grid System <3407> +proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs <> -# unnamed +# NSIDC EASE-Grid North <3408> +proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs <> -# unnamed +# NSIDC EASE-Grid South <3409> +proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs <> # NSIDC EASE-Grid Global <3410> +proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs <> @@ -3699,75 +3755,75 @@ # NSIDC Sea Ice Polar Stereographic South <3412> +proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs <> # WGS 84 / NSIDC Sea Ice Polar Stereographic North -<3413> +proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3413> +proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # SVY21 / Singapore TM <3414> +proj=tmerc +lat_0=1.366666666666667 +lon_0=103.8333333333333 +k=1 +x_0=28001.642 +y_0=38744.572 +ellps=WGS84 +units=m +no_defs <> # WGS 72BE / South China Sea Lambert <3415> +proj=lcc +lat_1=18 +lat_2=24 +lat_0=21 +lon_0=114 +x_0=500000 +y_0=500000 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # ETRS89 / Austria Lambert -<3416> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs <> +<3416> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Iowa North (ft US) -<3417> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3417> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Iowa South (ft US) -<3418> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3418> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Kansas North (ft US) -<3419> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3419> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Kansas South (ft US) -<3420> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3420> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Nevada East (ft US) -<3421> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3421> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Nevada Central (ft US) -<3422> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3422> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Nevada West (ft US) -<3423> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3423> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / New Jersey (ft US) -<3424> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3424> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Iowa North (ft US) -<3425> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +units=us-ft +no_defs <> +<3425> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Iowa South (ft US) -<3426> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<3426> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Kansas North (ft US) -<3427> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<3427> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Kansas South (ft US) -<3428> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +units=us-ft +no_defs <> +<3428> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Nevada East (ft US) -<3429> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +units=us-ft +no_defs <> +<3429> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Nevada Central (ft US) -<3430> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +units=us-ft +no_defs <> +<3430> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Nevada West (ft US) -<3431> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +units=us-ft +no_defs <> +<3431> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / New Jersey (ft US) -<3432> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<3432> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Arkansas North (ftUS) -<3433> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3433> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Arkansas South (ftUS) -<3434> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3434> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Illinois East (ftUS) -<3435> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3435> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Illinois West (ftUS) -<3436> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3436> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / New Hampshire (ftUS) -<3437> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3437> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Rhode Island (ftUS) -<3438> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3438> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # PSD93 / UTM zone 39N -<3439> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs <> +<3439> +proj=utm +zone=39 +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101 +units=m +no_defs <> # PSD93 / UTM zone 40N -<3440> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs <> +<3440> +proj=utm +zone=40 +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101 +units=m +no_defs <> # NAD83(HARN) / Arkansas North (ftUS) -<3441> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<3441> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Arkansas South (ftUS) -<3442> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +units=us-ft +no_defs <> +<3442> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Illinois East (ftUS) -<3443> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<3443> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Illinois West (ftUS) -<3444> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<3444> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / New Hampshire (ftUS) -<3445> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<3445> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Rhode Island (ftUS) -<3446> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<3446> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # ETRS89 / Belgian Lambert 2005 -<3447> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=150328 +y_0=166262 +ellps=GRS80 +units=m +no_defs <> +<3447> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=150328 +y_0=166262 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JAD2001 / Jamaica Metric Grid <3448> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=750000 +y_0=650000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JAD2001 / UTM zone 17N @@ -3775,33 +3831,33 @@ # JAD2001 / UTM zone 18N <3450> +proj=utm +zone=18 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Louisiana North (ftUS) -<3451> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3451> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Louisiana South (ftUS) -<3452> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3452> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Louisiana Offshore (ftUS) -<3453> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / South Dakota North (ftUS) -<3454> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3453> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD83 / South Dakota North (ftUS) (deprecated) +<3454> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / South Dakota South (ftUS) -<3455> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3455> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Louisiana North (ftUS) -<3456> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<3456> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Louisiana South (ftUS) -<3457> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<3457> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / South Dakota North (ftUS) -<3458> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<3458> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / South Dakota South (ftUS) -<3459> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<3459> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # Fiji 1986 / Fiji Map Grid -<3460> +proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +units=m +no_defs <> +<3460> +proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # Dabola 1981 / UTM zone 28N <3461> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs <> # Dabola 1981 / UTM zone 29N <3462> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs <> # NAD83 / Maine CS2000 Central -<3463> +proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3463> +proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Maine CS2000 Central -<3464> +proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3464> +proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alabama East <3465> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alabama West @@ -3809,7 +3865,7 @@ # NAD83(NSRS2007) / Alaska Albers <3467> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 1 -<3468> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +<3468> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +gamma=323.1301023611111 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 2 <3469> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 3 @@ -3993,49 +4049,49 @@ # NAD83(NSRS2007) / Maryland <3559> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Utah North (ftUS) -<3560> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3560> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # Old Hawaiian / Hawaii zone 1 -<3561> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <> +<3561> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs <> # Old Hawaiian / Hawaii zone 2 -<3562> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <> +<3562> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs <> # Old Hawaiian / Hawaii zone 3 -<3563> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <> +<3563> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs <> # Old Hawaiian / Hawaii zone 4 -<3564> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <> +<3564> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs <> # Old Hawaiian / Hawaii zone 5 -<3565> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <> +<3565> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Utah Central (ftUS) -<3566> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3566> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Utah South (ftUS) -<3567> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3567> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Utah North (ftUS) -<3568> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +units=us-ft +no_defs <> +<3568> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Utah Central (ftUS) -<3569> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +units=us-ft +no_defs <> +<3569> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Utah South (ftUS) -<3570> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +units=us-ft +no_defs <> +<3570> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # WGS 84 / North Pole LAEA Bering Sea -<3571> +proj=laea +lat_0=90 +lon_0=180 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3571> +proj=laea +lat_0=90 +lon_0=180 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / North Pole LAEA Alaska -<3572> +proj=laea +lat_0=90 +lon_0=-150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3572> +proj=laea +lat_0=90 +lon_0=-150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / North Pole LAEA Canada -<3573> +proj=laea +lat_0=90 +lon_0=-100 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3573> +proj=laea +lat_0=90 +lon_0=-100 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / North Pole LAEA Atlantic -<3574> +proj=laea +lat_0=90 +lon_0=-40 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3574> +proj=laea +lat_0=90 +lon_0=-40 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / North Pole LAEA Europe -<3575> +proj=laea +lat_0=90 +lon_0=10 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3575> +proj=laea +lat_0=90 +lon_0=10 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / North Pole LAEA Russia -<3576> +proj=laea +lat_0=90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3576> +proj=laea +lat_0=90 +lon_0=90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # GDA94 / Australian Albers <3577> +proj=aea +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=132 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Yukon Albers -<3578> +proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3578> +proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / Yukon Albers -<3579> +proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> +<3579> +proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / NWT Lambert -<3580> +proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3580> +proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / NWT Lambert -<3581> +proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3581> +proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Maryland (ftUS) <3582> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Massachusetts Island @@ -4055,7 +4111,7 @@ # NAD83(NSRS2007) / Michigan North (ft) <3590> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Michigan Oblique Mercator -<3591> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +<3591> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +gamma=337.25556 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Michigan South <3592> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Michigan South (ft) @@ -4327,7 +4383,7 @@ # NAD83(NSRS2007) / UTM zone 19N <3726> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Reunion 1947 / TM Reunion -<3727> +proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=160000 +y_0=50000 +ellps=intl +units=m +no_defs <> +<3727> +proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=160000 +y_0=50000 +ellps=intl +towgs84=94,-948,-1262,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Ohio North (ftUS) <3728> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Ohio South (ftUS) @@ -4341,65 +4397,65 @@ # NAD83(NSRS2007) / Wyoming West (ftUS) <3733> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Ohio North (ftUS) -<3734> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3734> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Ohio South (ftUS) -<3735> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3735> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Wyoming East (ftUS) -<3736> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3736> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Wyoming East Central (ftUS) -<3737> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3737> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Wyoming West Central (ftUS) -<3738> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3738> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Wyoming West (ftUS) -<3739> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3739> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / UTM zone 10N -<3740> +proj=utm +zone=10 +ellps=GRS80 +units=m +no_defs <> +<3740> +proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / UTM zone 11N -<3741> +proj=utm +zone=11 +ellps=GRS80 +units=m +no_defs <> +<3741> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / UTM zone 12N -<3742> +proj=utm +zone=12 +ellps=GRS80 +units=m +no_defs <> +<3742> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / UTM zone 13N -<3743> +proj=utm +zone=13 +ellps=GRS80 +units=m +no_defs <> +<3743> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / UTM zone 14N -<3744> +proj=utm +zone=14 +ellps=GRS80 +units=m +no_defs <> +<3744> +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / UTM zone 15N -<3745> +proj=utm +zone=15 +ellps=GRS80 +units=m +no_defs <> +<3745> +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / UTM zone 16N -<3746> +proj=utm +zone=16 +ellps=GRS80 +units=m +no_defs <> +<3746> +proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / UTM zone 17N -<3747> +proj=utm +zone=17 +ellps=GRS80 +units=m +no_defs <> +<3747> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / UTM zone 18N -<3748> +proj=utm +zone=18 +ellps=GRS80 +units=m +no_defs <> +<3748> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / UTM zone 19N -<3749> +proj=utm +zone=19 +ellps=GRS80 +units=m +no_defs <> +<3749> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / UTM zone 4N -<3750> +proj=utm +zone=4 +ellps=GRS80 +units=m +no_defs <> +<3750> +proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / UTM zone 5N -<3751> +proj=utm +zone=5 +ellps=GRS80 +units=m +no_defs <> +<3751> +proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # WGS 84 / Mercator 41 (deprecated) -<3752> +proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3752> +proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # NAD83(HARN) / Ohio North (ftUS) -<3753> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<3753> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Ohio South (ftUS) -<3754> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<3754> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Wyoming East (ftUS) -<3755> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<3755> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Wyoming East Central (ftUS) -<3756> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <> +<3756> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Wyoming West Central (ftUS) -<3757> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<3757> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Wyoming West (ftUS) -<3758> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <> +<3758> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Hawaii zone 3 (ftUS) -<3759> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<3759> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Hawaii zone 3 (ftUS) -<3760> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<3760> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(CSRS) / UTM zone 22N -<3761> +proj=utm +zone=22 +ellps=GRS80 +units=m +no_defs <> +<3761> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # WGS 84 / South Georgia Lambert -<3762> +proj=lcc +lat_1=-54 +lat_2=-54.75 +lat_0=-55 +lon_0=-37 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3762> +proj=lcc +lat_1=-54 +lat_2=-54.75 +lat_0=-55 +lon_0=-37 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # ETRS89 / Portugal TM06 -<3763> +proj=tmerc +lat_0=39.66825833333333 +lon_0=-8.133108333333334 +k=1 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3763> +proj=tmerc +lat_0=39.66825833333333 +lon_0=-8.133108333333334 +k=1 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Chatham Island Circuit 2000 <3764> +proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # HTRS96 / Croatia TM @@ -4411,33 +4467,33 @@ # HTRS96 / UTM zone 34N <3768> +proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Bermuda 1957 / UTM zone 20N -<3769> +proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs <> +<3769> +proj=utm +zone=20 +ellps=clrk66 +towgs84=-73,213,296,0,0,0,0 +units=m +no_defs <> # BDA2000 / Bermuda 2000 National Grid <3770> +proj=tmerc +lat_0=32 +lon_0=-64.75 +k=1 +x_0=550000 +y_0=100000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD27 / Alberta 3TM ref merid 111 W -<3771> +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<3771> +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs <> # NAD27 / Alberta 3TM ref merid 114 W -<3772> +proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<3772> +proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs <> # NAD27 / Alberta 3TM ref merid 117 W -<3773> +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<3773> +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs <> # NAD27 / Alberta 3TM ref merid 120 W (deprecated) -<3774> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<3774> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs <> # NAD83 / Alberta 3TM ref merid 111 W -<3775> +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3775> +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Alberta 3TM ref merid 114 W -<3776> +proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3776> +proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Alberta 3TM ref merid 117 W -<3777> +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3777> +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Alberta 3TM ref merid 120 W (deprecated) -<3778> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3778> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / Alberta 3TM ref merid 111 W -<3779> +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3779> +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / Alberta 3TM ref merid 114 W -<3780> +proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3780> +proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / Alberta 3TM ref merid 117 W -<3781> +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3781> +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / Alberta 3TM ref merid 120 W (deprecated) -<3782> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3782> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Pitcairn 2006 / Pitcairn TM 2006 <3783> +proj=tmerc +lat_0=-25.06855261111111 +lon_0=-130.1129671111111 +k=1 +x_0=14200 +y_0=15500 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Pitcairn 1967 / UTM zone 9S @@ -4447,7 +4503,7 @@ # World Equidistant Cylindrical (Sphere) (deprecated) <3786> +proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371007 +b=6371007 +units=m +no_defs <> # MGI / Slovene National Grid (deprecated) -<3787> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<3787> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # NZGD2000 / Auckland Islands TM 2000 <3788> +proj=tmerc +lat_0=0 +lon_0=166 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Campbell Island TM 2000 @@ -4461,27 +4517,27 @@ # Slovenia 1996 / Slovene National Grid <3794> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD27 / Cuba Norte -<3795> +proj=lcc +lat_1=23 +lat_2=21.7 +lat_0=22.35 +lon_0=-81 +x_0=500000 +y_0=280296.016 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<3795> +proj=lcc +lat_1=23 +lat_2=21.7 +lat_0=22.35 +lon_0=-81 +x_0=500000 +y_0=280296.016 +datum=NAD27 +units=m +no_defs <> # NAD27 / Cuba Sur -<3796> +proj=lcc +lat_1=21.3 +lat_2=20.13333333333333 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +x_0=500000 +y_0=229126.939 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<3796> +proj=lcc +lat_1=21.3 +lat_2=20.13333333333333 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +x_0=500000 +y_0=229126.939 +datum=NAD27 +units=m +no_defs <> # NAD27 / MTQ Lambert -<3797> +proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<3797> +proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +datum=NAD27 +units=m +no_defs <> # NAD83 / MTQ Lambert -<3798> +proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3798> +proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / MTQ Lambert -<3799> +proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3799> +proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD27 / Alberta 3TM ref merid 120 W -<3800> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<3800> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs <> # NAD83 / Alberta 3TM ref merid 120 W -<3801> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3801> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / Alberta 3TM ref merid 120 W -<3802> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3802> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / Belgian Lambert 2008 -<3812> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=649328 +y_0=665262 +ellps=GRS80 +units=m +no_defs <> +<3812> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=649328 +y_0=665262 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Mississippi TM -<3814> +proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3814> +proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Mississippi TM -<3815> +proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +units=m +no_defs <> +<3815> +proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Mississippi TM <3816> +proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # TWD97 / TM2 zone 119 @@ -4492,34 +4548,34 @@ <3827> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs <> # TWD67 / TM2 zone 121 <3828> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs <> -# Hu Tzu Shan / UTM zone 51N +# Hu Tzu Shan 1950 / UTM zone 51N <3829> +proj=utm +zone=51 +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +units=m +no_defs <> # WGS 84 / PDC Mercator -<3832> +proj=merc +lon_0=150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3832> +proj=merc +lon_0=150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # Pulkovo 1942(58) / Gauss-Kruger zone 2 -<3833> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<3833> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs <> # Pulkovo 1942(83) / Gauss-Kruger zone 2 -<3834> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<3834> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942(83) / Gauss-Kruger zone 3 -<3835> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<3835> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942(83) / Gauss-Kruger zone 4 -<3836> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<3836> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 3 -<3837> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<3837> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 4 -<3838> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<3838> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 9 -<3839> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<3839> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 10 -<3840> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<3840> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs <> # Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 6 -<3841> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 7 -<3842> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> -# Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 8 -<3843> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<3841> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs <> +# Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 7 (deprecated) +<3842> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs <> +# Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 8 (deprecated) +<3843> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942(58) / Stereo70 -<3844> +proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +units=m +no_defs <> +<3844> +proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs <> # SWEREF99 / RT90 7.5 gon V emulation <3845> +proj=tmerc +lat_0=0 +lon_0=11.30625 +k=1.000006 +x_0=1500025.141 +y_0=-667.282 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 / RT90 5 gon V emulation @@ -4540,6 +4596,32 @@ <3854> +proj=tmerc +lat_0=0 +lon_0=18.05787 +k=0.99999506 +x_0=100182.7406 +y_0=-6500620.1207 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # WGS 84 / Pseudo-Mercator <3857> +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs <> +# ETRS89 / GK19FIN +<3873> +proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=19500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / GK20FIN +<3874> +proj=tmerc +lat_0=0 +lon_0=20 +k=1 +x_0=20500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / GK21FIN +<3875> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=21500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / GK22FIN +<3876> +proj=tmerc +lat_0=0 +lon_0=22 +k=1 +x_0=22500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / GK23FIN +<3877> +proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=23500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / GK24FIN +<3878> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=24500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / GK25FIN +<3879> +proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=25500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / GK26FIN +<3880> +proj=tmerc +lat_0=0 +lon_0=26 +k=1 +x_0=26500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / GK27FIN +<3881> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=27500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / GK28FIN +<3882> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=28500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / GK29FIN +<3883> +proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=29500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / GK30FIN +<3884> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=30500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / GK31FIN +<3885> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=31500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IGRS / UTM zone 37N <3890> +proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IGRS / UTM zone 38N @@ -4547,19 +4629,19 @@ # IGRS / UTM zone 39N <3892> +proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ED50 / Iraq National Grid -<3893> +proj=tmerc +lat_0=29.02626833333333 +lon_0=46.5 +k=0.9994 +x_0=800000 +y_0=0 +ellps=intl +units=m +no_defs <> +<3893> +proj=tmerc +lat_0=29.02626833333333 +lon_0=46.5 +k=0.9994 +x_0=800000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # MGI 1901 / Balkans zone 5 -<3907> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs <> +<3907> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs <> # MGI 1901 / Balkans zone 6 -<3908> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +units=m +no_defs <> +<3908> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs <> # MGI 1901 / Balkans zone 7 -<3909> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +units=m +no_defs <> +<3909> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs <> # MGI 1901 / Balkans zone 8 -<3910> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +units=m +no_defs <> +<3910> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs <> # MGI 1901 / Slovenia Grid -<3911> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +units=m +no_defs <> +<3911> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs <> # MGI 1901 / Slovene National Grid -<3912> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +units=m +no_defs <> +<3912> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs <> # Puerto Rico / UTM zone 20N <3920> +proj=utm +zone=20 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=m +no_defs <> # RGF93 / CC42 @@ -4581,26 +4663,24 @@ # RGF93 / CC50 <3950> +proj=lcc +lat_1=49.25 +lat_2=50.75 +lat_0=50 +lon_0=3 +x_0=1700000 +y_0=9200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Virginia Lambert -<3968> +proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3968> +proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Virginia Lambert -<3969> +proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<3969> +proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Virginia Lambert <3970> +proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # WGS 84 / NSIDC EASE-Grid North -# Unable to translate coordinate system EPSG:3973 into PROJ.4 format. -# +<3973> +proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / NSIDC EASE-Grid South -# Unable to translate coordinate system EPSG:3974 into PROJ.4 format. -# +<3974> +proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / NSIDC EASE-Grid Global -<3975> +proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3975> +proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / NSIDC Sea Ice Polar Stereographic South -<3976> +proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3976> +proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # NAD83 / Canada Atlas Lambert -<3978> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<3978> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / Canada Atlas Lambert -<3979> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> -# Katanga 1955 / Katanga Lambert +<3979> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Katanga 1955 / Katanga Lambert (deprecated) <3985> +proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=9 +lon_0=26 +x_0=500000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> # Katanga 1955 / Katanga Gauss zone A <3986> +proj=tmerc +lat_0=-9 +lon_0=30 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> @@ -4618,19 +4698,19 @@ # Unable to translate coordinate system EPSG:3993 into PROJ.4 format. # # WGS 84 / Mercator 41 -<3994> +proj=merc +lon_0=100 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3994> +proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / Arctic Polar Stereographic -<3995> +proj=stere +lat_0=90 +lat_ts=71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3995> +proj=stere +lat_0=90 +lat_ts=71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / IBCAO Polar Stereographic -<3996> +proj=stere +lat_0=90 +lat_ts=75 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3996> +proj=stere +lat_0=90 +lat_ts=75 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / Dubai Local TM -<3997> +proj=tmerc +lat_0=0 +lon_0=55.33333333333334 +k=1 +x_0=500000 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<3997> +proj=tmerc +lat_0=0 +lon_0=55.33333333333334 +k=1 +x_0=500000 +y_0=0 +datum=WGS84 +units=m +no_defs <> # MOLDREF99 / Moldova TM -<4026> +proj=tmerc +lat_0=0 +lon_0=28.4 +k=0.9999400000000001 +x_0=200000 +y_0=-5000000 +ellps=GRS80 +units=m +no_defs <> +<4026> +proj=tmerc +lat_0=0 +lon_0=28.4 +k=0.9999400000000001 +x_0=200000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # WGS 84 / TMzn35N -<4037> +proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<4037> +proj=utm +zone=35 +datum=WGS84 +units=m +no_defs <> # WGS 84 / TMzn36N -<4038> +proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<4038> +proj=utm +zone=36 +datum=WGS84 +units=m +no_defs <> # RGRDC 2005 / Congo TM zone 12 <4048> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / Congo TM zone 14 @@ -4656,7 +4736,7 @@ # RGRDC 2005 / UTM zone 35S <4063> +proj=utm +zone=35 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Chua / UTM zone 23S -<4071> +proj=utm +zone=23 +south +ellps=intl +units=m +no_defs <> +<4071> +proj=utm +zone=23 +south +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +units=m +no_defs <> # REGCAN95 / UTM zone 27N <4082> +proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # REGCAN95 / UTM zone 28N @@ -4667,6 +4747,777 @@ # World Equidistant Cylindrical (Sphere) # Unable to translate coordinate system EPSG:4088 into PROJ.4 format. # +# ETRS89 / DKTM1 +<4093> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.99998 +x_0=200000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / DKTM2 +<4094> +proj=tmerc +lat_0=0 +lon_0=10 +k=0.99998 +x_0=400000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / DKTM3 +<4095> +proj=tmerc +lat_0=0 +lon_0=11.75 +k=0.99998 +x_0=600000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / DKTM4 +<4096> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=800000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83 / BLM 59N (ftUS) +<4217> +proj=tmerc +lat_0=0 +lon_0=171 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD27 / BLM 59N (ftUS) +<4399> +proj=tmerc +lat_0=0 +lon_0=171 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> +# NAD27 / BLM 60N (ftUS) +<4400> +proj=tmerc +lat_0=0 +lon_0=177 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> +# NAD27 / BLM 1N (ftUS) +<4401> +proj=tmerc +lat_0=0 +lon_0=-177 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> +# NAD27 / BLM 2N (ftUS) +<4402> +proj=tmerc +lat_0=0 +lon_0=-171 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> +# NAD27 / BLM 3N (ftUS) +<4403> +proj=tmerc +lat_0=0 +lon_0=-165 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> +# NAD27 / BLM 4N (ftUS) +<4404> +proj=tmerc +lat_0=0 +lon_0=-159 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> +# NAD27 / BLM 5N (ftUS) +<4405> +proj=tmerc +lat_0=0 +lon_0=-153 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> +# NAD27 / BLM 6N (ftUS) +<4406> +proj=tmerc +lat_0=0 +lon_0=-147 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> +# NAD27 / BLM 7N (ftUS) +<4407> +proj=tmerc +lat_0=0 +lon_0=-141 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> +# NAD27 / BLM 8N (ftUS) +<4408> +proj=tmerc +lat_0=0 +lon_0=-135 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> +# NAD27 / BLM 9N (ftUS) +<4409> +proj=tmerc +lat_0=0 +lon_0=-129 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> +# NAD27 / BLM 10N (ftUS) +<4410> +proj=tmerc +lat_0=0 +lon_0=-123 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> +# NAD27 / BLM 11N (ftUS) +<4411> +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> +# NAD27 / BLM 12N (ftUS) +<4412> +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> +# NAD27 / BLM 13N (ftUS) +<4413> +proj=tmerc +lat_0=0 +lon_0=-105 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> +# NAD83(HARN) / Guam Map Grid +<4414> +proj=tmerc +lat_0=13.5 +lon_0=144.75 +k=1 +x_0=100000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Katanga 1955 / Katanga Lambert +<4415> +proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=-9 +lon_0=26 +x_0=500000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> +# Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 7 +<4417> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs <> +# NAD27 / BLM 18N (ftUS) +<4418> +proj=tmerc +lat_0=0 +lon_0=-75 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> +# NAD27 / BLM 19N (ftUS) +<4419> +proj=tmerc +lat_0=0 +lon_0=-69 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> +# NAD83 / BLM 60N (ftUS) +<4420> +proj=tmerc +lat_0=0 +lon_0=177 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD83 / BLM 1N (ftUS) +<4421> +proj=tmerc +lat_0=0 +lon_0=-177 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD83 / BLM 2N (ftUS) +<4422> +proj=tmerc +lat_0=0 +lon_0=-171 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD83 / BLM 3N (ftUS) +<4423> +proj=tmerc +lat_0=0 +lon_0=-165 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD83 / BLM 4N (ftUS) +<4424> +proj=tmerc +lat_0=0 +lon_0=-159 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD83 / BLM 5N (ftUS) +<4425> +proj=tmerc +lat_0=0 +lon_0=-153 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD83 / BLM 6N (ftUS) +<4426> +proj=tmerc +lat_0=0 +lon_0=-147 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD83 / BLM 7N (ftUS) +<4427> +proj=tmerc +lat_0=0 +lon_0=-141 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD83 / BLM 8N (ftUS) +<4428> +proj=tmerc +lat_0=0 +lon_0=-135 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD83 / BLM 9N (ftUS) +<4429> +proj=tmerc +lat_0=0 +lon_0=-129 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD83 / BLM 10N (ftUS) +<4430> +proj=tmerc +lat_0=0 +lon_0=-123 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD83 / BLM 11N (ftUS) +<4431> +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD83 / BLM 12N (ftUS) +<4432> +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD83 / BLM 13N (ftUS) +<4433> +proj=tmerc +lat_0=0 +lon_0=-105 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 8 +<4434> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / Puerto Rico and Virgin Is. +<4437> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83 / BLM 18N (ftUS) +<4438> +proj=tmerc +lat_0=0 +lon_0=-75 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD83 / BLM 19N (ftUS) +<4439> +proj=tmerc +lat_0=0 +lon_0=-69 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD27 / Pennsylvania South +<4455> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> +# NAD27 / New York Long Island +<4456> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=609601.2192024384 +y_0=30480.06096012192 +datum=NAD27 +units=us-ft +no_defs <> +# NAD83 / South Dakota North (ftUS) +<4457> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# WGS 84 / Australian Centre for Remote Sensing Lambert +<4462> +proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=-27 +lon_0=132 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> +# RGSPM06 / UTM zone 21N +<4467> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# RGM04 / UTM zone 38S +<4471> +proj=utm +zone=38 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Cadastre 1997 / UTM zone 38S +<4474> +proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs <> +# Mexican Datum of 1993 / UTM zone 11N +<4484> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Mexican Datum of 1993 / UTM zone 12N +<4485> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Mexican Datum of 1993 / UTM zone 13N +<4486> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Mexican Datum of 1993 / UTM zone 14N +<4487> +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Mexican Datum of 1993 / UTM zone 15N +<4488> +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Mexican Datum of 1993 / UTM zone 16N +<4489> +proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# CGCS2000 / Gauss-Kruger zone 13 +<4491> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / Gauss-Kruger zone 14 +<4492> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / Gauss-Kruger zone 15 +<4493> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / Gauss-Kruger zone 16 +<4494> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / Gauss-Kruger zone 17 +<4495> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / Gauss-Kruger zone 18 +<4496> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / Gauss-Kruger zone 19 +<4497> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / Gauss-Kruger zone 20 +<4498> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / Gauss-Kruger zone 21 +<4499> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / Gauss-Kruger zone 22 +<4500> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / Gauss-Kruger zone 23 +<4501> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / Gauss-Kruger CM 75E +<4502> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / Gauss-Kruger CM 81E +<4503> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / Gauss-Kruger CM 87E +<4504> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / Gauss-Kruger CM 93E +<4505> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / Gauss-Kruger CM 99E +<4506> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / Gauss-Kruger CM 105E +<4507> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / Gauss-Kruger CM 111E +<4508> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / Gauss-Kruger CM 117E +<4509> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / Gauss-Kruger CM 123E +<4510> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / Gauss-Kruger CM 129E +<4511> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / Gauss-Kruger CM 135E +<4512> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger zone 25 +<4513> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger zone 26 +<4514> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger zone 27 +<4515> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger zone 28 +<4516> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger zone 29 +<4517> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger zone 30 +<4518> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger zone 31 +<4519> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger zone 32 +<4520> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger zone 33 +<4521> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger zone 34 +<4522> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger zone 35 +<4523> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger zone 36 +<4524> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger zone 37 +<4525> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger zone 38 +<4526> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger zone 39 +<4527> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger zone 40 +<4528> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger zone 41 +<4529> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger zone 42 +<4530> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger zone 43 +<4531> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger zone 44 +<4532> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger zone 45 +<4533> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger CM 75E +<4534> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger CM 78E +<4535> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger CM 81E +<4536> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger CM 84E +<4537> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger CM 87E +<4538> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger CM 90E +<4539> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger CM 93E +<4540> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger CM 96E +<4541> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger CM 99E +<4542> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger CM 102E +<4543> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger CM 105E +<4544> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger CM 108E +<4545> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger CM 111E +<4546> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger CM 114E +<4547> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger CM 117E +<4548> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger CM 120E +<4549> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger CM 123E +<4550> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger CM 126E +<4551> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger CM 129E +<4552> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger CM 132E +<4553> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# CGCS2000 / 3-degree Gauss-Kruger CM 135E +<4554> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +# RRAF 1991 / UTM zone 20N +<4559> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# New Beijing / Gauss-Kruger zone 13 +<4568> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / Gauss-Kruger zone 14 +<4569> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / Gauss-Kruger zone 15 +<4570> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / Gauss-Kruger zone 16 +<4571> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / Gauss-Kruger zone 17 +<4572> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / Gauss-Kruger zone 18 +<4573> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / Gauss-Kruger zone 19 +<4574> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / Gauss-Kruger zone 20 +<4575> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / Gauss-Kruger zone 21 +<4576> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / Gauss-Kruger zone 22 +<4577> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / Gauss-Kruger zone 23 +<4578> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / Gauss-Kruger CM 75E +<4579> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / Gauss-Kruger CM 81E +<4580> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / Gauss-Kruger CM 87E +<4581> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / Gauss-Kruger CM 93E +<4582> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / Gauss-Kruger CM 99E +<4583> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / Gauss-Kruger CM 105E +<4584> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / Gauss-Kruger CM 111E +<4585> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / Gauss-Kruger CM 117E +<4586> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / Gauss-Kruger CM 123E +<4587> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / Gauss-Kruger CM 129E +<4588> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / Gauss-Kruger CM 135E +<4589> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# ETRS89 / UTM zone N32 +<4647> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=32500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger zone 25 +<4652> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger zone 26 +<4653> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger zone 27 +<4654> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger zone 28 +<4655> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger zone 29 +<4656> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger zone 30 +<4766> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger zone 31 +<4767> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger zone 32 +<4768> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger zone 33 +<4769> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger zone 34 +<4770> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger zone 35 +<4771> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger zone 36 +<4772> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger zone 37 +<4773> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger zone 38 +<4774> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger zone 39 +<4775> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger zone 40 +<4776> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger zone 41 +<4777> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger zone 42 +<4778> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger zone 43 +<4779> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger zone 44 +<4780> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger zone 45 +<4781> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger CM 75E +<4782> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger CM 78E +<4783> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger CM 81E +<4784> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger CM 84E +<4785> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger CM 87E +<4786> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger CM 90E +<4787> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger CM 93E +<4788> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger CM 96E +<4789> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger CM 99E +<4790> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger CM 102E +<4791> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger CM 105E +<4792> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger CM 108E +<4793> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger CM 111E +<4794> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger CM 114E +<4795> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger CM 117E +<4796> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger CM 120E +<4797> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger CM 123E +<4798> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger CM 126E +<4799> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger CM 129E +<4800> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger CM 132E +<4812> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# New Beijing / 3-degree Gauss-Kruger CM 135E +<4822> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +# WGS 84 / Cape Verde National +<4826> +proj=lcc +lat_1=15 +lat_2=16.66666666666667 +lat_0=15.83333333333333 +lon_0=-24 +x_0=161587.83 +y_0=128511.202 +datum=WGS84 +units=m +no_defs <> +# ETRS89 / LCC Germany (N-E) +<4839> +proj=lcc +lat_1=48.66666666666666 +lat_2=53.66666666666666 +lat_0=51 +lon_0=10.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 5 (deprecated) +<4855> +proj=tmerc +lat_0=0 +lon_0=5.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 6 (deprecated) +<4856> +proj=tmerc +lat_0=0 +lon_0=6.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 7 (deprecated) +<4857> +proj=tmerc +lat_0=0 +lon_0=7.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 8 (deprecated) +<4858> +proj=tmerc +lat_0=0 +lon_0=8.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 9 (deprecated) +<4859> +proj=tmerc +lat_0=0 +lon_0=9.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 10 (deprecated) +<4860> +proj=tmerc +lat_0=0 +lon_0=10.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 11 (deprecated) +<4861> +proj=tmerc +lat_0=0 +lon_0=11.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 12 (deprecated) +<4862> +proj=tmerc +lat_0=0 +lon_0=12.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 13 (deprecated) +<4863> +proj=tmerc +lat_0=0 +lon_0=13.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 14 (deprecated) +<4864> +proj=tmerc +lat_0=0 +lon_0=14.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 15 (deprecated) +<4865> +proj=tmerc +lat_0=0 +lon_0=15.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 16 (deprecated) +<4866> +proj=tmerc +lat_0=0 +lon_0=16.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 17 (deprecated) +<4867> +proj=tmerc +lat_0=0 +lon_0=17.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 18 (deprecated) +<4868> +proj=tmerc +lat_0=0 +lon_0=18.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 19 (deprecated) +<4869> +proj=tmerc +lat_0=0 +lon_0=19.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 20 (deprecated) +<4870> +proj=tmerc +lat_0=0 +lon_0=20.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 21 (deprecated) +<4871> +proj=tmerc +lat_0=0 +lon_0=21.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 22 (deprecated) +<4872> +proj=tmerc +lat_0=0 +lon_0=22.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 23 (deprecated) +<4873> +proj=tmerc +lat_0=0 +lon_0=23.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 24 (deprecated) +<4874> +proj=tmerc +lat_0=0 +lon_0=24.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 25 (deprecated) +<4875> +proj=tmerc +lat_0=0 +lon_0=25.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 26 (deprecated) +<4876> +proj=tmerc +lat_0=0 +lon_0=26.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 27 (deprecated) +<4877> +proj=tmerc +lat_0=0 +lon_0=27.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 28 (deprecated) +<4878> +proj=tmerc +lat_0=0 +lon_0=28.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 29 (deprecated) +<4879> +proj=tmerc +lat_0=0 +lon_0=29.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 30 (deprecated) +<4880> +proj=tmerc +lat_0=0 +lon_0=30.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# PTRA08 / UTM zone 25N +<5014> +proj=utm +zone=25 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# PTRA08 / UTM zone 26N +<5015> +proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# PTRA08 / UTM zone 28N +<5016> +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Lisbon 1890 / Portugal Bonne New +# Unable to translate coordinate system EPSG:5017 into PROJ.4 format. +# +# Lisbon / Portuguese Grid New +<5018> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=0 +y_0=0 +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +units=m +no_defs <> +# WGS 84 / UPS North (E,N) +<5041> +proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UPS South (E,N) +<5042> +proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs <> +# ETRS89 / TM35FIN(N,E) +<5048> +proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD27 / Conus Albers +<5069> +proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs <> +# NAD83 / Conus Albers +<5070> +proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(HARN) / Conus Albers +<5071> +proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(NSRS2007) / Conus Albers +<5072> +proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 5 +<5105> +proj=tmerc +lat_0=58 +lon_0=5.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 6 +<5106> +proj=tmerc +lat_0=58 +lon_0=6.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 7 +<5107> +proj=tmerc +lat_0=58 +lon_0=7.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 8 +<5108> +proj=tmerc +lat_0=58 +lon_0=8.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 9 +<5109> +proj=tmerc +lat_0=58 +lon_0=9.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 10 +<5110> +proj=tmerc +lat_0=58 +lon_0=10.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 11 +<5111> +proj=tmerc +lat_0=58 +lon_0=11.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 12 +<5112> +proj=tmerc +lat_0=58 +lon_0=12.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 13 +<5113> +proj=tmerc +lat_0=58 +lon_0=13.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 14 +<5114> +proj=tmerc +lat_0=58 +lon_0=14.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 15 +<5115> +proj=tmerc +lat_0=58 +lon_0=15.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 16 +<5116> +proj=tmerc +lat_0=58 +lon_0=16.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 17 +<5117> +proj=tmerc +lat_0=58 +lon_0=17.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 18 +<5118> +proj=tmerc +lat_0=58 +lon_0=18.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 19 +<5119> +proj=tmerc +lat_0=58 +lon_0=19.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 20 +<5120> +proj=tmerc +lat_0=58 +lon_0=20.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 21 +<5121> +proj=tmerc +lat_0=58 +lon_0=21.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 22 +<5122> +proj=tmerc +lat_0=58 +lon_0=22.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 23 +<5123> +proj=tmerc +lat_0=58 +lon_0=23.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 24 +<5124> +proj=tmerc +lat_0=58 +lon_0=24.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 25 +<5125> +proj=tmerc +lat_0=58 +lon_0=25.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 26 +<5126> +proj=tmerc +lat_0=58 +lon_0=26.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 27 +<5127> +proj=tmerc +lat_0=58 +lon_0=27.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 28 +<5128> +proj=tmerc +lat_0=58 +lon_0=28.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 29 +<5129> +proj=tmerc +lat_0=58 +lon_0=29.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / NTM zone 30 +<5130> +proj=tmerc +lat_0=58 +lon_0=30.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Korean 1985 / East Sea Belt +<5167> +proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <> +# Korean 1985 / Central Belt Jeju +<5168> +proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=550000 +ellps=bessel +units=m +no_defs <> +# Tokyo 1892 / Korea West Belt +<5169> +proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <> +# Tokyo 1892 / Korea Central Belt +<5170> +proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <> +# Tokyo 1892 / Korea East Belt +<5171> +proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <> +# Tokyo 1892 / Korea East Sea Belt +<5172> +proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <> +# Korean 1985 / Modified West Belt +<5173> +proj=tmerc +lat_0=38 +lon_0=125.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <> +# Korean 1985 / Modified Central Belt +<5174> +proj=tmerc +lat_0=38 +lon_0=127.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <> +# Korean 1985 / Modified Central Belt Jeju +<5175> +proj=tmerc +lat_0=38 +lon_0=127.0028902777778 +k=1 +x_0=200000 +y_0=550000 +ellps=bessel +units=m +no_defs <> +# Korean 1985 / Modified East Belt +<5176> +proj=tmerc +lat_0=38 +lon_0=129.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <> +# Korean 1985 / Modified East Sea Belt +<5177> +proj=tmerc +lat_0=38 +lon_0=131.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <> +# Korean 1985 / Unified CS +<5178> +proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=bessel +units=m +no_defs <> +# Korea 2000 / Unified CS +<5179> +proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Korea 2000 / West Belt +<5180> +proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Korea 2000 / Central Belt +<5181> +proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Korea 2000 / Central Belt Jeju +<5182> +proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=550000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Korea 2000 / East Belt +<5183> +proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Korea 2000 / East Sea Belt +<5184> +proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Korea 2000 / West Belt 2010 +<5185> +proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Korea 2000 / Central Belt 2010 +<5186> +proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Korea 2000 / East Belt 2010 +<5187> +proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Korea 2000 / East Sea Belt 2010 +<5188> +proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# S-JTSK (Ferro) / Krovak East North +# Unable to translate coordinate system EPSG:5221 into PROJ.4 format. +# +# WGS 84 / Gabon TM +<5223> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=500000 +datum=WGS84 +units=m +no_defs <> +# S-JTSK/05 (Ferro) / Modified Krovak +# Unable to translate coordinate system EPSG:5224 into PROJ.4 format. +# +# S-JTSK/05 (Ferro) / Modified Krovak East North +# Unable to translate coordinate system EPSG:5225 into PROJ.4 format. +# +# Kandawala / Sri Lanka Grid +<5234> +proj=tmerc +lat_0=7.000480277777778 +lon_0=80.77171111111112 +k=0.9999238418 +x_0=200000 +y_0=200000 +a=6377276.345 +b=6356075.41314024 +towgs84=-97,787,86,0,0,0,0 +units=m +no_defs <> +# SLD99 / Sri Lanka Grid 1999 +<5235> +proj=tmerc +lat_0=7.000471527777778 +lon_0=80.77171308333334 +k=0.9999238418 +x_0=500000 +y_0=500000 +a=6377276.345 +b=6356075.41314024 +towgs84=-0.293,766.95,87.713,0.195704,1.69507,3.47302,-0.039338 +units=m +no_defs <> +# ETRS89 / LCC Germany (E-N) +<5243> +proj=lcc +lat_1=48.66666666666666 +lat_2=53.66666666666666 +lat_0=51 +lon_0=10.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# GDBD2009 / Brunei BRSO +<5247> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31580995 +k=0.99984 +x_0=0 +y_0=0 +gamma=53.13010236111111 +ellps=GRS80 +units=m +no_defs <> +# TUREF / TM27 +<5253> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# TUREF / TM30 +<5254> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# TUREF / TM33 +<5255> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# TUREF / TM36 +<5256> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# TUREF / TM39 +<5257> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# TUREF / TM42 +<5258> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# TUREF / TM45 +<5259> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DRUKREF 03 / Bhutan National Grid +<5266> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# TUREF / 3-degree Gauss-Kruger zone 9 +<5269> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# TUREF / 3-degree Gauss-Kruger zone 10 +<5270> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# TUREF / 3-degree Gauss-Kruger zone 11 +<5271> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# TUREF / 3-degree Gauss-Kruger zone 12 +<5272> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# TUREF / 3-degree Gauss-Kruger zone 13 +<5273> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# TUREF / 3-degree Gauss-Kruger zone 14 +<5274> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# TUREF / 3-degree Gauss-Kruger zone 15 +<5275> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DRUKREF 03 / Bumthang TM +<5292> +proj=tmerc +lat_0=0 +lon_0=90.73333333333333 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DRUKREF 03 / Chhukha TM +<5293> +proj=tmerc +lat_0=0 +lon_0=89.55 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DRUKREF 03 / Dagana TM +<5294> +proj=tmerc +lat_0=0 +lon_0=89.84999999999999 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DRUKREF 03 / Gasa TM +<5295> +proj=tmerc +lat_0=0 +lon_0=90.03333333333333 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DRUKREF 03 / Ha TM +<5296> +proj=tmerc +lat_0=0 +lon_0=90.15000000000001 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DRUKREF 03 / Lhuentse TM +<5297> +proj=tmerc +lat_0=0 +lon_0=91.13333333333334 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DRUKREF 03 / Mongar TM +<5298> +proj=tmerc +lat_0=0 +lon_0=91.23333333333333 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DRUKREF 03 / Paro TM +<5299> +proj=tmerc +lat_0=0 +lon_0=89.34999999999999 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DRUKREF 03 / Pemagatshel TM +<5300> +proj=tmerc +lat_0=0 +lon_0=91.34999999999999 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DRUKREF 03 / Punakha TM +<5301> +proj=tmerc +lat_0=0 +lon_0=89.84999999999999 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DRUKREF 03 / Samdrup Jongkhar TM +<5302> +proj=tmerc +lat_0=0 +lon_0=91.56666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DRUKREF 03 / Samtse TM +<5303> +proj=tmerc +lat_0=0 +lon_0=89.06666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DRUKREF 03 / Sarpang TM +<5304> +proj=tmerc +lat_0=0 +lon_0=90.26666666666667 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DRUKREF 03 / Thimphu TM +<5305> +proj=tmerc +lat_0=0 +lon_0=89.55 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DRUKREF 03 / Trashigang TM +<5306> +proj=tmerc +lat_0=0 +lon_0=91.75 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DRUKREF 03 / Trongsa TM +<5307> +proj=tmerc +lat_0=0 +lon_0=90.5 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DRUKREF 03 / Tsirang TM +<5308> +proj=tmerc +lat_0=0 +lon_0=90.16666666666667 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DRUKREF 03 / Wangdue Phodrang TM +<5309> +proj=tmerc +lat_0=0 +lon_0=90.11666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DRUKREF 03 / Yangtse TM +<5310> +proj=tmerc +lat_0=0 +lon_0=91.56666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# DRUKREF 03 / Zhemgang TM +<5311> +proj=tmerc +lat_0=0 +lon_0=90.86666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ETRS89 / Faroe TM +<5316> +proj=tmerc +lat_0=0 +lon_0=-7 +k=0.999997 +x_0=200000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83 / Teranet Ontario Lambert +<5320> +proj=lcc +lat_1=44.5 +lat_2=54.5 +lat_0=0 +lon_0=-84 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# NAD83(CSRS) / Teranet Ontario Lambert +<5321> +proj=lcc +lat_1=44.5 +lat_2=54.5 +lat_0=0 +lon_0=-84 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# ISN2004 / Lambert 2004 +<5325> +proj=lcc +lat_1=64.25 +lat_2=65.75 +lat_0=65 +lon_0=-19 +x_0=1700000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Segara (Jakarta) / NEIEZ +<5329> +proj=merc +lon_0=3.192280555555556 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +pm=jakarta +units=m +no_defs <> +# Batavia (Jakarta) / NEIEZ +<5330> +proj=merc +lon_0=3.192280555555556 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +pm=jakarta +units=m +no_defs <> +# Makassar (Jakarta) / NEIEZ +<5331> +proj=merc +lon_0=3.192280555555556 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m +no_defs <> +# Aratu / UTM zone 25S +<5337> +proj=utm +zone=25 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs <> +# POSGAR 2007 / Argentina 1 +<5343> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# POSGAR 2007 / Argentina 2 +<5344> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# POSGAR 2007 / Argentina 3 +<5345> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# POSGAR 2007 / Argentina 4 +<5346> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# POSGAR 2007 / Argentina 5 +<5347> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# POSGAR 2007 / Argentina 6 +<5348> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# POSGAR 2007 / Argentina 7 +<5349> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# MARGEN / UTM zone 20S +<5355> +proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# MARGEN / UTM zone 19S +<5356> +proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# MARGEN / UTM zone 21S +<5357> +proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS-Chile / UTM zone 19S +<5361> +proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS-Chile / UTM zone 18S +<5362> +proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# CR05 / CRTM05 +<5367> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS-ROU98 / UTM zone 21S +<5382> +proj=utm +zone=21 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS-ROU98 / UTM zone 22S +<5383> +proj=utm +zone=22 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Peru96 / UTM zone 18S +<5387> +proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Peru96 / UTM zone 17S +<5388> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Peru96 / UTM zone 19S +<5389> +proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# SIRGAS 2000 / UTM zone 26S +<5396> +proj=utm +zone=26 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Ocotepeque 1935 / Costa Rica Norte +<5456> +proj=lcc +lat_1=10.46666666666667 +lat_0=10.46666666666667 +lon_0=-84.33333333333333 +k_0=0.99995696 +x_0=500000 +y_0=271820.522 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs <> +# Ocotepeque 1935 / Costa Rica Sur +<5457> +proj=lcc +lat_1=9 +lat_0=9 +lon_0=-83.66666666666667 +k_0=0.99995696 +x_0=500000 +y_0=327987.436 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs <> +# Ocotepeque 1935 / Guatemala Norte (deprecated) +<5458> +proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +datum=NAD27 +units=m +no_defs <> +# Ocotepeque 1935 / Guatemala Sur +<5459> +proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs <> +# Ocotepeque 1935 / El Salvador Lambert +<5460> +proj=lcc +lat_1=13.78333333333333 +lat_0=13.78333333333333 +lon_0=-89 +k_0=0.99996704 +x_0=500000 +y_0=295809.184 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs <> +# Ocotepeque 1935 / Nicaragua Norte +<5461> +proj=lcc +lat_1=13.86666666666667 +lat_0=13.86666666666667 +lon_0=-85.5 +k_0=0.99990314 +x_0=500000 +y_0=359891.816 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs <> +# Ocotepeque 1935 / Nicaragua Sur +<5462> +proj=lcc +lat_1=11.73333333333333 +lat_0=11.73333333333333 +lon_0=-85.5 +k_0=0.9999222800000001 +x_0=500000 +y_0=288876.327 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs <> +# SAD69 / UTM zone 17N +<5463> +proj=utm +zone=17 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> +# Sibun Gorge 1922 / Colony Grid +<5466> +proj=tmerc +lat_0=17.06124194444444 +lon_0=-88.6318575 +k=1 +x_0=66220.02833082761 +y_0=135779.5099885299 +a=6378293.645208759 +b=6356617.987679838 +units=m +no_defs <> +# Panama-Colon 1911 / Panama Lambert +<5469> +proj=lcc +lat_1=8.416666666666666 +lat_0=8.416666666666666 +lon_0=-80 +k_0=0.99989909 +x_0=500000 +y_0=294865.303 +ellps=clrk66 +units=m +no_defs <> +# Panama-Colon 1911 / Panama Polyconic +<5472> +proj=poly +lat_0=8.25 +lon_0=-81 +x_0=914391.7962 +y_0=999404.7217154861 +ellps=clrk66 +to_meter=0.9143917962 +no_defs <> +# RSRGD2000 / MSLC2000 +<5479> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-78 +lon_0=163 +x_0=7000000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# RSRGD2000 / BCLC2000 +<5480> +proj=lcc +lat_1=-73.66666666666667 +lat_2=-75.33333333333333 +lat_0=-74.5 +lon_0=165 +x_0=5000000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# RSRGD2000 / PCLC2000 +<5481> +proj=lcc +lat_1=-70.66666666666667 +lat_2=-72.33333333333333 +lat_0=-71.5 +lon_0=166 +x_0=3000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# RSRGD2000 / RSPS2000 +<5482> +proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=180 +k=0.994 +x_0=5000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# RGAF09 / UTM zone 20N +<5490> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# S-JTSK / Krovak +<5513> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=0 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=589,76,480,0,0,0,0 +units=m +no_defs <> +# S-JTSK / Krovak East North +# Unable to translate coordinate system EPSG:5514 into PROJ.4 format. +# +# S-JTSK/05 / Modified Krovak +# Unable to translate coordinate system EPSG:5515 into PROJ.4 format. +# +# S-JTSK/05 / Modified Krovak East North +# Unable to translate coordinate system EPSG:5516 into PROJ.4 format. +# +# CI1971 / Chatham Islands Map Grid +<5518> +proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=350000 +y_0=650000 +ellps=intl +towgs84=175,-38,113,0,0,0,0 +units=m +no_defs <> +# CI1979 / Chatham Islands Map Grid +<5519> +proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=350000 +y_0=650000 +ellps=intl +towgs84=174.05,-25.49,112.57,-0,-0,0.554,0.2263 +units=m +no_defs <> +# DHDN / 3-degree Gauss-Kruger zone 1 +<5520> +proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs <> +# WGS 84 / Gabon TM 2011 +<5523> +proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.9996 +x_0=1500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs <> +# SAD69(96) / Brazil Polyconic +<5530> +proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=aust_SA +units=m +no_defs <> +# SAD69(96) / UTM zone 21S +<5531> +proj=utm +zone=21 +south +ellps=aust_SA +units=m +no_defs <> +# SAD69(96) / UTM zone 22S +<5532> +proj=utm +zone=22 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> +# SAD69(96) / UTM zone 23S +<5533> +proj=utm +zone=23 +south +ellps=aust_SA +units=m +no_defs <> +# SAD69(96) / UTM zone 24S +<5534> +proj=utm +zone=24 +south +ellps=aust_SA +units=m +no_defs <> +# SAD69(96) / UTM zone 25S +<5535> +proj=utm +zone=25 +south +ellps=aust_SA +units=m +no_defs <> +# Corrego Alegre 1961 / UTM zone 21S +<5536> +proj=utm +zone=21 +south +ellps=intl +units=m +no_defs <> +# Corrego Alegre 1961 / UTM zone 22S +<5537> +proj=utm +zone=22 +south +ellps=intl +units=m +no_defs <> +# Corrego Alegre 1961 / UTM zone 23S +<5538> +proj=utm +zone=23 +south +ellps=intl +units=m +no_defs <> +# Corrego Alegre 1961 / UTM zone 24S +<5539> +proj=utm +zone=24 +south +ellps=intl +units=m +no_defs <> +# PNG94 / PNGMG94 zone 54 +<5550> +proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# PNG94 / PNGMG94 zone 55 +<5551> +proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# PNG94 / PNGMG94 zone 56 +<5552> +proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> +# Ocotepeque 1935 / Guatemala Norte +<5559> +proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs <> # EPSG topocentric example A # Unable to translate coordinate system EPSG:5819 into PROJ.4 format. # @@ -4677,303 +5528,303 @@ # Unable to translate coordinate system EPSG:5821 into PROJ.4 format. # # Pulkovo 1995 / Gauss-Kruger zone 4 -<20004> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20004> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 5 -<20005> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20005> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 6 -<20006> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20006> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 7 -<20007> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20007> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 8 -<20008> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20008> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 9 -<20009> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20009> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 10 -<20010> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20010> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 11 -<20011> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20011> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 12 -<20012> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20012> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 13 -<20013> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20013> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 14 -<20014> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20014> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 15 -<20015> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20015> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 16 -<20016> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20016> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 17 -<20017> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20017> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 18 -<20018> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20018> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 19 -<20019> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20019> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 20 -<20020> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20020> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 21 -<20021> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20021> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 22 -<20022> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20022> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 23 -<20023> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20023> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 24 -<20024> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20024> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 25 -<20025> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20025> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 26 -<20026> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20026> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 27 -<20027> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20027> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 28 -<20028> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20028> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 29 -<20029> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20029> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 30 -<20030> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20030> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 31 -<20031> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20031> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 32 -<20032> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20032> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 4N (deprecated) -<20064> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20064> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 5N (deprecated) -<20065> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20065> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 6N (deprecated) -<20066> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20066> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 7N (deprecated) -<20067> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20067> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 8N (deprecated) -<20068> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20068> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 9N (deprecated) -<20069> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20069> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 10N (deprecated) -<20070> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20070> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 11N (deprecated) -<20071> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20071> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 12N (deprecated) -<20072> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20072> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 13N (deprecated) -<20073> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20073> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 14N (deprecated) -<20074> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20074> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 15N (deprecated) -<20075> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20075> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 16N (deprecated) -<20076> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20076> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 17N (deprecated) -<20077> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20077> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 18N (deprecated) -<20078> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20078> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 19N (deprecated) -<20079> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20079> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 20N (deprecated) -<20080> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20080> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 21N (deprecated) -<20081> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20081> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 22N (deprecated) -<20082> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20082> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 23N (deprecated) -<20083> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20083> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 24N (deprecated) -<20084> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20084> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 25N (deprecated) -<20085> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20085> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 26N (deprecated) -<20086> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20086> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 27N (deprecated) -<20087> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20087> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 28N (deprecated) -<20088> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20088> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 29N (deprecated) -<20089> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20089> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 30N (deprecated) -<20090> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20090> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 31N (deprecated) -<20091> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20091> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 32N (deprecated) -<20092> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> +<20092> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs <> # Adindan / UTM zone 35N -<20135> +proj=utm +zone=35 +ellps=clrk80 +units=m +no_defs <> +<20135> +proj=utm +zone=35 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs <> # Adindan / UTM zone 36N -<20136> +proj=utm +zone=36 +ellps=clrk80 +units=m +no_defs <> +<20136> +proj=utm +zone=36 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs <> # Adindan / UTM zone 37N -<20137> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs <> +<20137> +proj=utm +zone=37 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs <> # Adindan / UTM zone 38N -<20138> +proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs <> +<20138> +proj=utm +zone=38 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs <> # AGD66 / AMG zone 48 -<20248> +proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs <> +<20248> +proj=utm +zone=48 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs <> # AGD66 / AMG zone 49 -<20249> +proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs <> +<20249> +proj=utm +zone=49 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs <> # AGD66 / AMG zone 50 -<20250> +proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs <> +<20250> +proj=utm +zone=50 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs <> # AGD66 / AMG zone 51 -<20251> +proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs <> +<20251> +proj=utm +zone=51 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs <> # AGD66 / AMG zone 52 -<20252> +proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs <> +<20252> +proj=utm +zone=52 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs <> # AGD66 / AMG zone 53 -<20253> +proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs <> +<20253> +proj=utm +zone=53 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs <> # AGD66 / AMG zone 54 -<20254> +proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs <> +<20254> +proj=utm +zone=54 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs <> # AGD66 / AMG zone 55 -<20255> +proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs <> +<20255> +proj=utm +zone=55 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs <> # AGD66 / AMG zone 56 -<20256> +proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs <> +<20256> +proj=utm +zone=56 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs <> # AGD66 / AMG zone 57 -<20257> +proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs <> +<20257> +proj=utm +zone=57 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs <> # AGD66 / AMG zone 58 -<20258> +proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs <> +<20258> +proj=utm +zone=58 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs <> # AGD84 / AMG zone 48 -<20348> +proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs <> +<20348> +proj=utm +zone=48 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs <> # AGD84 / AMG zone 49 -<20349> +proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs <> +<20349> +proj=utm +zone=49 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs <> # AGD84 / AMG zone 50 -<20350> +proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs <> +<20350> +proj=utm +zone=50 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs <> # AGD84 / AMG zone 51 -<20351> +proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs <> +<20351> +proj=utm +zone=51 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs <> # AGD84 / AMG zone 52 -<20352> +proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs <> +<20352> +proj=utm +zone=52 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs <> # AGD84 / AMG zone 53 -<20353> +proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs <> +<20353> +proj=utm +zone=53 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs <> # AGD84 / AMG zone 54 -<20354> +proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs <> +<20354> +proj=utm +zone=54 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs <> # AGD84 / AMG zone 55 -<20355> +proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs <> +<20355> +proj=utm +zone=55 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs <> # AGD84 / AMG zone 56 -<20356> +proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs <> +<20356> +proj=utm +zone=56 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs <> # AGD84 / AMG zone 57 -<20357> +proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs <> +<20357> +proj=utm +zone=57 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs <> # AGD84 / AMG zone 58 -<20358> +proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs <> +<20358> +proj=utm +zone=58 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs <> # Ain el Abd / UTM zone 36N -<20436> +proj=utm +zone=36 +ellps=intl +units=m +no_defs <> +<20436> +proj=utm +zone=36 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs <> # Ain el Abd / UTM zone 37N -<20437> +proj=utm +zone=37 +ellps=intl +units=m +no_defs <> +<20437> +proj=utm +zone=37 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs <> # Ain el Abd / UTM zone 38N -<20438> +proj=utm +zone=38 +ellps=intl +units=m +no_defs <> +<20438> +proj=utm +zone=38 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs <> # Ain el Abd / UTM zone 39N -<20439> +proj=utm +zone=39 +ellps=intl +units=m +no_defs <> +<20439> +proj=utm +zone=39 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs <> # Ain el Abd / UTM zone 40N -<20440> +proj=utm +zone=40 +ellps=intl +units=m +no_defs <> +<20440> +proj=utm +zone=40 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs <> # Ain el Abd / Bahrain Grid -<20499> +proj=utm +zone=39 +ellps=intl +units=m +no_defs <> +<20499> +proj=utm +zone=39 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs <> # Afgooye / UTM zone 38N <20538> +proj=utm +zone=38 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs <> # Afgooye / UTM zone 39N <20539> +proj=utm +zone=39 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs <> # Lisbon (Lisbon) / Portuguese National Grid -<20790> +proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=200000 +y_0=300000 +ellps=intl +pm=lisbon +units=m +no_defs <> +<20790> +proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +pm=lisbon +units=m +no_defs <> # Lisbon (Lisbon) / Portuguese Grid -<20791> +proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=0 +y_0=0 +ellps=intl +pm=lisbon +units=m +no_defs <> +<20791> +proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=0 +y_0=0 +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +pm=lisbon +units=m +no_defs <> # Aratu / UTM zone 22S -<20822> +proj=utm +zone=22 +south +ellps=intl +units=m +no_defs <> +<20822> +proj=utm +zone=22 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs <> # Aratu / UTM zone 23S -<20823> +proj=utm +zone=23 +south +ellps=intl +units=m +no_defs <> +<20823> +proj=utm +zone=23 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs <> # Aratu / UTM zone 24S -<20824> +proj=utm +zone=24 +south +ellps=intl +units=m +no_defs <> +<20824> +proj=utm +zone=24 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs <> # Arc 1950 / UTM zone 34S -<20934> +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> +<20934> +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs <> # Arc 1950 / UTM zone 35S -<20935> +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> +<20935> +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs <> # Arc 1950 / UTM zone 36S -<20936> +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> +<20936> +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs <> # Arc 1960 / UTM zone 35S -<21035> +proj=utm +zone=35 +south +ellps=clrk80 +units=m +no_defs <> +<21035> +proj=utm +zone=35 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs <> # Arc 1960 / UTM zone 36S -<21036> +proj=utm +zone=36 +south +ellps=clrk80 +units=m +no_defs <> +<21036> +proj=utm +zone=36 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs <> # Arc 1960 / UTM zone 37S -<21037> +proj=utm +zone=37 +south +ellps=clrk80 +units=m +no_defs <> +<21037> +proj=utm +zone=37 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs <> # Arc 1960 / UTM zone 35N -<21095> +proj=utm +zone=35 +ellps=clrk80 +units=m +no_defs <> +<21095> +proj=utm +zone=35 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs <> # Arc 1960 / UTM zone 36N -<21096> +proj=utm +zone=36 +ellps=clrk80 +units=m +no_defs <> +<21096> +proj=utm +zone=36 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs <> # Arc 1960 / UTM zone 37N -<21097> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs <> +<21097> +proj=utm +zone=37 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs <> # Batavia (Jakarta) / NEIEZ (deprecated) -<21100> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs <> +<21100> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +pm=jakarta +units=m +no_defs <> # Batavia / UTM zone 48S -<21148> +proj=utm +zone=48 +south +ellps=bessel +units=m +no_defs <> +<21148> +proj=utm +zone=48 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs <> # Batavia / UTM zone 49S -<21149> +proj=utm +zone=49 +south +ellps=bessel +units=m +no_defs <> +<21149> +proj=utm +zone=49 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs <> # Batavia / UTM zone 50S -<21150> +proj=utm +zone=50 +south +ellps=bessel +units=m +no_defs <> +<21150> +proj=utm +zone=50 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs <> # Barbados 1938 / British West Indies Grid <21291> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs <> # Barbados 1938 / Barbados National Grid <21292> +proj=tmerc +lat_0=13.17638888888889 +lon_0=-59.55972222222222 +k=0.9999986 +x_0=30000 +y_0=75000 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 13 -<21413> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21413> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 14 -<21414> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21414> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 15 -<21415> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21415> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 16 -<21416> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21416> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 17 -<21417> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21417> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 18 -<21418> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21418> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 19 -<21419> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21419> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 20 -<21420> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21420> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 21 -<21421> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21421> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 22 -<21422> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21422> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 23 -<21423> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21423> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 75E -<21453> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21453> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 81E -<21454> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21454> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 87E -<21455> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21455> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 93E -<21456> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21456> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 99E -<21457> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21457> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 105E -<21458> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21458> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 111E -<21459> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21459> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 117E -<21460> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21460> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 123E -<21461> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21461> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 129E -<21462> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21462> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 135E -<21463> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21463> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 13N (deprecated) -<21473> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21473> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 14N (deprecated) -<21474> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21474> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 15N (deprecated) -<21475> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21475> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 16N (deprecated) -<21476> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21476> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 17N (deprecated) -<21477> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21477> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 18N (deprecated) -<21478> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21478> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 19N (deprecated) -<21479> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21479> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 20N (deprecated) -<21480> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21480> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 21N (deprecated) -<21481> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21481> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 22N (deprecated) -<21482> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21482> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 23N (deprecated) -<21483> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<21483> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs <> # Belge 1950 (Brussels) / Belge Lambert 50 <21500> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=0 +x_0=150000 +y_0=5400000 +ellps=intl +pm=brussels +units=m +no_defs <> # Bern 1898 (Bern) / LV03C -<21780> +proj=somerc +lat_0=46.95240555555556 +lon_0=0 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +pm=bern +units=m +no_defs <> +<21780> +proj=somerc +lat_0=46.95240555555556 +lon_0=0 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +pm=bern +units=m +no_defs <> # CH1903 / LV03 -<21781> +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs <> +<21781> +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +units=m +no_defs <> # CH1903 / LV03C-G -<21782> +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs <> +<21782> +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +units=m +no_defs <> # Bogota 1975 / UTM zone 17N (deprecated) <21817> +proj=utm +zone=17 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> # Bogota 1975 / UTM zone 18N @@ -4995,27 +5846,27 @@ # Bogota 1975 / Colombia East <21899> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> # Camacupa / UTM zone 32S -<22032> +proj=utm +zone=32 +south +ellps=clrk80 +units=m +no_defs <> +<22032> +proj=utm +zone=32 +south +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs <> # Camacupa / UTM zone 33S -<22033> +proj=utm +zone=33 +south +ellps=clrk80 +units=m +no_defs <> +<22033> +proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs <> # Camacupa / TM 11.30 SE -<22091> +proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> +<22091> +proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs <> # Camacupa / TM 12 SE -<22092> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> +<22092> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs <> # POSGAR 98 / Argentina 1 -<22171> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<22171> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # POSGAR 98 / Argentina 2 -<22172> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<22172> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # POSGAR 98 / Argentina 3 -<22173> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<22173> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # POSGAR 98 / Argentina 4 -<22174> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<22174> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # POSGAR 98 / Argentina 5 -<22175> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<22175> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # POSGAR 98 / Argentina 6 -<22176> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<22176> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # POSGAR 98 / Argentina 7 -<22177> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<22177> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # POSGAR 94 / Argentina 1 <22181> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # POSGAR 94 / Argentina 2 @@ -5031,124 +5882,114 @@ # POSGAR 94 / Argentina 7 <22187> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Campo Inchauspe / Argentina 1 -<22191> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<22191> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs <> # Campo Inchauspe / Argentina 2 -<22192> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<22192> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs <> # Campo Inchauspe / Argentina 3 -<22193> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<22193> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs <> # Campo Inchauspe / Argentina 4 -<22194> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<22194> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs <> # Campo Inchauspe / Argentina 5 -<22195> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<22195> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs <> # Campo Inchauspe / Argentina 6 -<22196> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<22196> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs <> # Campo Inchauspe / Argentina 7 -<22197> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<22197> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs <> # Cape / UTM zone 34S -<22234> +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> +<22234> +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs <> # Cape / UTM zone 35S -<22235> +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> -# Cape / UTM zone 36S -<22236> +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> +<22235> +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs <> +# Cape / UTM zone 36S (deprecated) +<22236> +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs <> # Cape / Lo15 -# Unable to translate coordinate system EPSG:22275 into PROJ.4 format. -# +<22275> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs <> # Cape / Lo17 -# Unable to translate coordinate system EPSG:22277 into PROJ.4 format. -# +<22277> +proj=tmerc +lat_0=0 +lon_0=17 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs <> # Cape / Lo19 -# Unable to translate coordinate system EPSG:22279 into PROJ.4 format. -# +<22279> +proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs <> # Cape / Lo21 -# Unable to translate coordinate system EPSG:22281 into PROJ.4 format. -# +<22281> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs <> # Cape / Lo23 -# Unable to translate coordinate system EPSG:22283 into PROJ.4 format. -# +<22283> +proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs <> # Cape / Lo25 -# Unable to translate coordinate system EPSG:22285 into PROJ.4 format. -# +<22285> +proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs <> # Cape / Lo27 -# Unable to translate coordinate system EPSG:22287 into PROJ.4 format. -# +<22287> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs <> # Cape / Lo29 -# Unable to translate coordinate system EPSG:22289 into PROJ.4 format. -# +<22289> +proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs <> # Cape / Lo31 -# Unable to translate coordinate system EPSG:22291 into PROJ.4 format. -# +<22291> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs <> # Cape / Lo33 -# Unable to translate coordinate system EPSG:22293 into PROJ.4 format. -# +<22293> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs <> # Carthage (Paris) / Tunisia Mining Grid # Unable to translate coordinate system EPSG:22300 into PROJ.4 format. # # Carthage / UTM zone 32N -<22332> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +datum=carthage +units=m +no_defs <> +<22332> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs <> # Carthage / Nord Tunisie -<22391> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=9.9 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +datum=carthage +units=m +no_defs <> +<22391> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=9.9 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs <> # Carthage / Sud Tunisie -<22392> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=9.9 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +datum=carthage +units=m +no_defs <> -# Corrego Alegre / UTM zone 21S +<22392> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=9.9 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs <> +# Corrego Alegre 1970-72 / UTM zone 21S <22521> +proj=utm +zone=21 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <> -# Corrego Alegre / UTM zone 22S +# Corrego Alegre 1970-72 / UTM zone 22S <22522> +proj=utm +zone=22 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <> -# Corrego Alegre / UTM zone 23S +# Corrego Alegre 1970-72 / UTM zone 23S <22523> +proj=utm +zone=23 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <> -# Corrego Alegre / UTM zone 24S +# Corrego Alegre 1970-72 / UTM zone 24S <22524> +proj=utm +zone=24 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <> -# Corrego Alegre / UTM zone 25S +# Corrego Alegre 1970-72 / UTM zone 25S <22525> +proj=utm +zone=25 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <> # Deir ez Zor / Levant Zone -<22700> +proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs <> +<22700> +proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +units=m +no_defs <> # Deir ez Zor / Syria Lambert -<22770> +proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs <> +<22770> +proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +units=m +no_defs <> # Deir ez Zor / Levant Stereographic -<22780> +proj=sterea +lat_0=34.2 +lon_0=39.15 +k=0.9995341 +x_0=0 +y_0=0 +a=6378249.2 +b=6356515 +units=m +no_defs <> +<22780> +proj=sterea +lat_0=34.2 +lon_0=39.15 +k=0.9995341 +x_0=0 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +units=m +no_defs <> # Douala / UTM zone 32N (deprecated) <22832> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Egypt 1907 / Blue Belt -<22991> +proj=tmerc +lat_0=30 +lon_0=35 +k=1 +x_0=300000 +y_0=1100000 +ellps=helmert +units=m +no_defs <> +<22991> +proj=tmerc +lat_0=30 +lon_0=35 +k=1 +x_0=300000 +y_0=1100000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs <> # Egypt 1907 / Red Belt -<22992> +proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +units=m +no_defs <> +<22992> +proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs <> # Egypt 1907 / Purple Belt -<22993> +proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=200000 +ellps=helmert +units=m +no_defs <> +<22993> +proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=200000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs <> # Egypt 1907 / Extended Purple Belt -<22994> +proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=1200000 +ellps=helmert +units=m +no_defs <> +<22994> +proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=1200000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs <> # ED50 / UTM zone 28N -<23028> +proj=utm +zone=28 +ellps=intl +units=m +no_defs <> +<23028> +proj=utm +zone=28 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / UTM zone 29N -<23029> +proj=utm +zone=29 +ellps=intl +units=m +no_defs <> +<23029> +proj=utm +zone=29 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / UTM zone 30N -<23030> +proj=utm +zone=30 +ellps=intl +units=m +no_defs <> +<23030> +proj=utm +zone=30 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / UTM zone 31N -<23031> +proj=utm +zone=31 +ellps=intl +units=m +no_defs <> +<23031> +proj=utm +zone=31 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / UTM zone 32N -<23032> +proj=utm +zone=32 +ellps=intl +units=m +no_defs <> +<23032> +proj=utm +zone=32 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / UTM zone 33N -<23033> +proj=utm +zone=33 +ellps=intl +units=m +no_defs <> +<23033> +proj=utm +zone=33 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / UTM zone 34N -<23034> +proj=utm +zone=34 +ellps=intl +units=m +no_defs <> +<23034> +proj=utm +zone=34 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / UTM zone 35N -<23035> +proj=utm +zone=35 +ellps=intl +units=m +no_defs <> +<23035> +proj=utm +zone=35 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / UTM zone 36N -<23036> +proj=utm +zone=36 +ellps=intl +units=m +no_defs <> +<23036> +proj=utm +zone=36 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / UTM zone 37N -<23037> +proj=utm +zone=37 +ellps=intl +units=m +no_defs <> +<23037> +proj=utm +zone=37 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / UTM zone 38N -<23038> +proj=utm +zone=38 +ellps=intl +units=m +no_defs <> +<23038> +proj=utm +zone=38 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / TM 0 N -<23090> +proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<23090> +proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # ED50 / TM 5 NE -<23095> +proj=tmerc +lat_0=0 +lon_0=5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> +<23095> +proj=tmerc +lat_0=0 +lon_0=5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs <> # Fahud / UTM zone 39N -<23239> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs <> +<23239> +proj=utm +zone=39 +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +units=m +no_defs <> # Fahud / UTM zone 40N -<23240> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs <> +<23240> +proj=utm +zone=40 +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +units=m +no_defs <> # Garoua / UTM zone 33N (deprecated) <23433> +proj=utm +zone=33 +a=6378249.2 +b=6356515 +units=m +no_defs <> # HD72 / EOV -<23700> +proj=somerc +lat_0=47.14439372222222 +lon_0=19.04857177777778 +k_0=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 +units=m +no_defs <> +<23700> +proj=somerc +lat_0=47.14439372222222 +lon_0=19.04857177777778 +k_0=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 +towgs84=52.17,-71.82,-14.9,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 46.2 <23830> +proj=tmerc +lat_0=0 +lon_0=94.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 47.1 @@ -5182,21 +6023,21 @@ # DGN95 / Indonesia TM-3 zone 54.1 <23845> +proj=tmerc +lat_0=0 +lon_0=139.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ID74 / UTM zone 46N -<23846> +proj=utm +zone=46 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> +<23846> +proj=utm +zone=46 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs <> # ID74 / UTM zone 47N -<23847> +proj=utm +zone=47 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> +<23847> +proj=utm +zone=47 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs <> # ID74 / UTM zone 48N -<23848> +proj=utm +zone=48 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> +<23848> +proj=utm +zone=48 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs <> # ID74 / UTM zone 49N -<23849> +proj=utm +zone=49 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> +<23849> +proj=utm +zone=49 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs <> # ID74 / UTM zone 50N -<23850> +proj=utm +zone=50 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> +<23850> +proj=utm +zone=50 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs <> # ID74 / UTM zone 51N -<23851> +proj=utm +zone=51 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> +<23851> +proj=utm +zone=51 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs <> # ID74 / UTM zone 52N -<23852> +proj=utm +zone=52 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> +<23852> +proj=utm +zone=52 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs <> # ID74 / UTM zone 53N (deprecated) -<23853> +proj=utm +zone=53 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> +<23853> +proj=utm +zone=53 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 46N <23866> +proj=utm +zone=46 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 47N @@ -5228,23 +6069,23 @@ # DGN95 / UTM zone 54S <23884> +proj=utm +zone=54 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ID74 / UTM zone 46S (deprecated) -<23886> +proj=utm +zone=46 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> +<23886> +proj=utm +zone=46 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs <> # ID74 / UTM zone 47S -<23887> +proj=utm +zone=47 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> +<23887> +proj=utm +zone=47 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs <> # ID74 / UTM zone 48S -<23888> +proj=utm +zone=48 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> +<23888> +proj=utm +zone=48 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs <> # ID74 / UTM zone 49S -<23889> +proj=utm +zone=49 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> +<23889> +proj=utm +zone=49 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs <> # ID74 / UTM zone 50S -<23890> +proj=utm +zone=50 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> +<23890> +proj=utm +zone=50 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs <> # ID74 / UTM zone 51S -<23891> +proj=utm +zone=51 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> +<23891> +proj=utm +zone=51 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs <> # ID74 / UTM zone 52S -<23892> +proj=utm +zone=52 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> +<23892> +proj=utm +zone=52 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs <> # ID74 / UTM zone 53S -<23893> +proj=utm +zone=53 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> +<23893> +proj=utm +zone=53 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs <> # ID74 / UTM zone 54S -<23894> +proj=utm +zone=54 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> +<23894> +proj=utm +zone=54 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs <> # Indian 1954 / UTM zone 46N <23946> +proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs <> # Indian 1954 / UTM zone 47N @@ -5252,23 +6093,23 @@ # Indian 1954 / UTM zone 48N <23948> +proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs <> # Indian 1975 / UTM zone 47N -<24047> +proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> +<24047> +proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +units=m +no_defs <> # Indian 1975 / UTM zone 48N -<24048> +proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> +<24048> +proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +units=m +no_defs <> # Jamaica 1875 / Jamaica (Old Grid) <24100> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=167638.49597 +y_0=121918.90616 +a=6378249.144808011 +b=6356514.966204134 +to_meter=0.3047972654 +no_defs <> # JAD69 / Jamaica National Grid -<24200> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=250000 +y_0=150000 +ellps=clrk66 +units=m +no_defs <> +<24200> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=250000 +y_0=150000 +ellps=clrk66 +towgs84=70,207,389.5,0,0,0,0 +units=m +no_defs <> # Kalianpur 1937 / UTM zone 45N -<24305> +proj=utm +zone=45 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> +<24305> +proj=utm +zone=45 +a=6377276.345 +b=6356075.41314024 +towgs84=282,726,254,0,0,0,0 +units=m +no_defs <> # Kalianpur 1937 / UTM zone 46N -<24306> +proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> +<24306> +proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=282,726,254,0,0,0,0 +units=m +no_defs <> # Kalianpur 1962 / UTM zone 41N -<24311> +proj=utm +zone=41 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <> +<24311> +proj=utm +zone=41 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs <> # Kalianpur 1962 / UTM zone 42N -<24312> +proj=utm +zone=42 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <> +<24312> +proj=utm +zone=42 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs <> # Kalianpur 1962 / UTM zone 43N -<24313> +proj=utm +zone=43 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <> +<24313> +proj=utm +zone=43 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs <> # Kalianpur 1975 / UTM zone 42N <24342> +proj=utm +zone=42 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kalianpur 1975 / UTM zone 43N @@ -5292,11 +6133,11 @@ # Kalianpur 1880 / India zone IV <24374> +proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <> # Kalianpur 1937 / India zone IIb -<24375> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743185.69 +y_0=914395.23 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> +<24375> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743185.69 +y_0=914395.23 +a=6377276.345 +b=6356075.41314024 +towgs84=282,726,254,0,0,0,0 +units=m +no_defs <> # Kalianpur 1962 / India zone I -<24376> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <> +<24376> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs <> # Kalianpur 1962 / India zone IIa -<24377> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <> +<24377> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs <> # Kalianpur 1975 / India zone I <24378> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kalianpur 1975 / India zone IIa @@ -5316,7 +6157,7 @@ # Kertau 1968 / UTM zone 48N <24548> +proj=utm +zone=48 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs <> # Kertau / R.S.O. Malaya (ch) (deprecated) -<24571> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804671.2997750348 +y_0=0 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +to_meter=20.11678249437587 +no_defs <> +<24571> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804671.2997750348 +y_0=0 +gamma=323.1301023611111 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +to_meter=20.11678249437587 +no_defs <> # KOC Lambert <24600> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +units=m +no_defs <> # La Canoa / UTM zone 18N @@ -5326,75 +6167,75 @@ # La Canoa / UTM zone 20N <24720> +proj=utm +zone=20 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs <> # PSAD56 / UTM zone 17N -<24817> +proj=utm +zone=17 +ellps=intl +units=m +no_defs <> +<24817> +proj=utm +zone=17 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs <> # PSAD56 / UTM zone 18N -<24818> +proj=utm +zone=18 +ellps=intl +units=m +no_defs <> +<24818> +proj=utm +zone=18 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs <> # PSAD56 / UTM zone 19N -<24819> +proj=utm +zone=19 +ellps=intl +units=m +no_defs <> +<24819> +proj=utm +zone=19 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs <> # PSAD56 / UTM zone 20N -<24820> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <> +<24820> +proj=utm +zone=20 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs <> # PSAD56 / UTM zone 21N -<24821> +proj=utm +zone=21 +ellps=intl +units=m +no_defs <> +<24821> +proj=utm +zone=21 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs <> # PSAD56 / UTM zone 17S -<24877> +proj=utm +zone=17 +south +ellps=intl +units=m +no_defs <> +<24877> +proj=utm +zone=17 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs <> # PSAD56 / UTM zone 18S -<24878> +proj=utm +zone=18 +south +ellps=intl +units=m +no_defs <> +<24878> +proj=utm +zone=18 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs <> # PSAD56 / UTM zone 19S -<24879> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs <> +<24879> +proj=utm +zone=19 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs <> # PSAD56 / UTM zone 20S -<24880> +proj=utm +zone=20 +south +ellps=intl +units=m +no_defs <> +<24880> +proj=utm +zone=20 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs <> # PSAD56 / UTM zone 21S -<24881> +proj=utm +zone=21 +south +ellps=intl +units=m +no_defs <> +<24881> +proj=utm +zone=21 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs <> # PSAD56 / UTM zone 22S -<24882> +proj=utm +zone=22 +south +ellps=intl +units=m +no_defs <> +<24882> +proj=utm +zone=22 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs <> # PSAD56 / Peru west zone -<24891> +proj=tmerc +lat_0=-6 +lon_0=-80.5 +k=0.99983008 +x_0=222000 +y_0=1426834.743 +ellps=intl +units=m +no_defs <> +<24891> +proj=tmerc +lat_0=-6 +lon_0=-80.5 +k=0.99983008 +x_0=222000 +y_0=1426834.743 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs <> # PSAD56 / Peru central zone -<24892> +proj=tmerc +lat_0=-9.5 +lon_0=-76 +k=0.99932994 +x_0=720000 +y_0=1039979.159 +ellps=intl +units=m +no_defs <> +<24892> +proj=tmerc +lat_0=-9.5 +lon_0=-76 +k=0.99932994 +x_0=720000 +y_0=1039979.159 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs <> # PSAD56 / Peru east zone -<24893> +proj=tmerc +lat_0=-9.5 +lon_0=-70.5 +k=0.99952992 +x_0=1324000 +y_0=1040084.558 +ellps=intl +units=m +no_defs <> +<24893> +proj=tmerc +lat_0=-9.5 +lon_0=-70.5 +k=0.99952992 +x_0=1324000 +y_0=1040084.558 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs <> # Leigon / Ghana Metre Grid <25000> +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.51 +y_0=0 +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +units=m +no_defs <> # Lome / UTM zone 31N <25231> +proj=utm +zone=31 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Luzon 1911 / Philippines zone I -<25391> +proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <> +<25391> +proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs <> # Luzon 1911 / Philippines zone II -<25392> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <> +<25392> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs <> # Luzon 1911 / Philippines zone III -<25393> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <> +<25393> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs <> # Luzon 1911 / Philippines zone IV -<25394> +proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <> +<25394> +proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs <> # Luzon 1911 / Philippines zone V -<25395> +proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <> +<25395> +proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs <> # Makassar (Jakarta) / NEIEZ (deprecated) <25700> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m +no_defs <> # ETRS89 / UTM zone 28N -<25828> +proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs <> +<25828> +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / UTM zone 29N -<25829> +proj=utm +zone=29 +ellps=GRS80 +units=m +no_defs <> +<25829> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / UTM zone 30N -<25830> +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs <> +<25830> +proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / UTM zone 31N -<25831> +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs <> +<25831> +proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / UTM zone 32N -<25832> +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs <> +<25832> +proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / UTM zone 33N -<25833> +proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs <> +<25833> +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / UTM zone 34N -<25834> +proj=utm +zone=34 +ellps=GRS80 +units=m +no_defs <> +<25834> +proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / UTM zone 35N -<25835> +proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs <> +<25835> +proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / UTM zone 36N -<25836> +proj=utm +zone=36 +ellps=GRS80 +units=m +no_defs <> +<25836> +proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / UTM zone 37N -<25837> +proj=utm +zone=37 +ellps=GRS80 +units=m +no_defs <> +<25837> +proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / UTM zone 38N -<25838> +proj=utm +zone=38 +ellps=GRS80 +units=m +no_defs <> +<25838> +proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / TM Baltic93 -<25884> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<25884> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Malongo 1987 / UTM zone 32S -<25932> +proj=utm +zone=32 +south +ellps=intl +units=m +no_defs <> +<25932> +proj=utm +zone=32 +south +ellps=intl +towgs84=-254.1,-5.36,-100.29,0,0,0,0 +units=m +no_defs <> # Merchich / Nord Maroc <26191> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <> # Merchich / Sud Maroc @@ -5408,195 +6249,195 @@ # Massawa / UTM zone 37N <26237> +proj=utm +zone=37 +ellps=bessel +towgs84=639,405,60,0,0,0,0 +units=m +no_defs <> # Minna / UTM zone 31N -<26331> +proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs <> +<26331> +proj=utm +zone=31 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs <> # Minna / UTM zone 32N -<26332> +proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs <> +<26332> +proj=utm +zone=32 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs <> # Minna / Nigeria West Belt -<26391> +proj=tmerc +lat_0=4 +lon_0=4.5 +k=0.99975 +x_0=230738.26 +y_0=0 +ellps=clrk80 +units=m +no_defs <> +<26391> +proj=tmerc +lat_0=4 +lon_0=4.5 +k=0.99975 +x_0=230738.26 +y_0=0 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs <> # Minna / Nigeria Mid Belt -<26392> +proj=tmerc +lat_0=4 +lon_0=8.5 +k=0.99975 +x_0=670553.98 +y_0=0 +ellps=clrk80 +units=m +no_defs <> +<26392> +proj=tmerc +lat_0=4 +lon_0=8.5 +k=0.99975 +x_0=670553.98 +y_0=0 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs <> # Minna / Nigeria East Belt -<26393> +proj=tmerc +lat_0=4 +lon_0=12.5 +k=0.99975 +x_0=1110369.7 +y_0=0 +ellps=clrk80 +units=m +no_defs <> +<26393> +proj=tmerc +lat_0=4 +lon_0=12.5 +k=0.99975 +x_0=1110369.7 +y_0=0 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs <> # Mhast / UTM zone 32S (deprecated) <26432> +proj=utm +zone=32 +south +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +units=m +no_defs <> # Monte Mario (Rome) / Italy zone 1 (deprecated) -<26591> +proj=tmerc +lat_0=0 +lon_0=-3.45233333333333 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs <> +<26591> +proj=tmerc +lat_0=0 +lon_0=-3.45233333333333 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +pm=rome +units=m +no_defs <> # Monte Mario (Rome) / Italy zone 2 (deprecated) -<26592> +proj=tmerc +lat_0=0 +lon_0=2.54766666666666 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs <> +<26592> +proj=tmerc +lat_0=0 +lon_0=2.54766666666666 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +pm=rome +units=m +no_defs <> # M'poraloko / UTM zone 32N -<26632> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs <> +<26632> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +units=m +no_defs <> # M'poraloko / UTM zone 32S -<26692> +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs <> +<26692> +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +units=m +no_defs <> # NAD27 / UTM zone 1N -<26701> +proj=utm +zone=1 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<26701> +proj=utm +zone=1 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 2N -<26702> +proj=utm +zone=2 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<26702> +proj=utm +zone=2 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 3N -<26703> +proj=utm +zone=3 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<26703> +proj=utm +zone=3 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 4N -<26704> +proj=utm +zone=4 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<26704> +proj=utm +zone=4 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 5N -<26705> +proj=utm +zone=5 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<26705> +proj=utm +zone=5 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 6N -<26706> +proj=utm +zone=6 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<26706> +proj=utm +zone=6 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 7N -<26707> +proj=utm +zone=7 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<26707> +proj=utm +zone=7 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 8N -<26708> +proj=utm +zone=8 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<26708> +proj=utm +zone=8 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 9N -<26709> +proj=utm +zone=9 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<26709> +proj=utm +zone=9 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 10N -<26710> +proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<26710> +proj=utm +zone=10 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 11N -<26711> +proj=utm +zone=11 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<26711> +proj=utm +zone=11 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 12N -<26712> +proj=utm +zone=12 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<26712> +proj=utm +zone=12 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 13N -<26713> +proj=utm +zone=13 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<26713> +proj=utm +zone=13 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 14N -<26714> +proj=utm +zone=14 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<26714> +proj=utm +zone=14 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 15N -<26715> +proj=utm +zone=15 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<26715> +proj=utm +zone=15 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 16N -<26716> +proj=utm +zone=16 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<26716> +proj=utm +zone=16 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 17N -<26717> +proj=utm +zone=17 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<26717> +proj=utm +zone=17 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 18N -<26718> +proj=utm +zone=18 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<26718> +proj=utm +zone=18 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 19N -<26719> +proj=utm +zone=19 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<26719> +proj=utm +zone=19 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 20N -<26720> +proj=utm +zone=20 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<26720> +proj=utm +zone=20 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 21N -<26721> +proj=utm +zone=21 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<26721> +proj=utm +zone=21 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 22N -<26722> +proj=utm +zone=22 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<26722> +proj=utm +zone=22 +datum=NAD27 +units=m +no_defs <> # NAD27 / Alabama East -<26729> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26729> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alabama West -<26730> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26730> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 1 -<26731> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000.001016002 +y_0=-5000000.001016002 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26731> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000.001016002 +y_0=-5000000.001016002 +gamma=323.1301023611111 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 2 -<26732> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26732> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 3 -<26733> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26733> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 4 -<26734> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26734> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 5 -<26735> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26735> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 6 -<26736> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26736> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 7 -<26737> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=213360.4267208534 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26737> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=213360.4267208534 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 8 -<26738> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26738> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 9 -<26739> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26739> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=182880.3657607315 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 10 -<26740> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=914401.8288036576 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26740> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=914401.8288036576 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone I -<26741> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26741> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone II -<26742> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26742> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone III -<26743> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26743> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone IV -<26744> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26744> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone V -<26745> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26745> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone VI -<26746> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26746> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone VII (deprecated) -<26747> +proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=127079.524511049 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26747> +proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=127079.524511049 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Arizona East -<26748> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26748> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Arizona Central -<26749> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26749> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Arizona West -<26750> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26750> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Arkansas North -<26751> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26751> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Arkansas South -<26752> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26752> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Colorado North -<26753> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26753> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Colorado Central -<26754> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26754> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Colorado South -<26755> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26755> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Connecticut -<26756> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26756> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=182880.3657607315 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Delaware -<26757> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26757> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Florida East -<26758> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26758> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Florida West -<26759> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26759> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Florida North -<26760> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26760> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Georgia East -<26766> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26766> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Georgia West -<26767> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26767> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Idaho East -<26768> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26768> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Idaho Central -<26769> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26769> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Idaho West -<26770> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26770> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Illinois East -<26771> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26771> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Illinois West -<26772> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26772> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Indiana East -<26773> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26773> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Indiana West -<26774> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26774> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Iowa North -<26775> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26775> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Iowa South -<26776> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26776> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Kansas North -<26777> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26777> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Kansas South -<26778> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26778> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Kentucky North -<26779> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26779> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Kentucky South -<26780> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26780> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Louisiana North -<26781> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.66666666666667 +lon_0=-92.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26781> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.66666666666667 +lon_0=-92.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Louisiana South -<26782> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26782> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Maine East -<26783> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-68.5 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26783> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-68.5 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Maine West -<26784> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26784> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Maryland -<26785> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.83333333333334 +lon_0=-77 +x_0=243840.4876809754 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26785> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.83333333333334 +lon_0=-77 +x_0=243840.4876809754 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Massachusetts Mainland -<26786> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26786> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=182880.3657607315 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Massachusetts Island -<26787> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=60960.12192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26787> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=60960.12192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Minnesota North -<26791> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26791> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Minnesota Central -<26792> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26792> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Minnesota South -<26793> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26793> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Mississippi East -<26794> +proj=tmerc +lat_0=29.66666666666667 +lon_0=-88.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26794> +proj=tmerc +lat_0=29.66666666666667 +lon_0=-88.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Mississippi West -<26795> +proj=tmerc +lat_0=30.5 +lon_0=-90.33333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26795> +proj=tmerc +lat_0=30.5 +lon_0=-90.33333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Missouri East -<26796> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26796> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Missouri Central -<26797> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26797> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Missouri West -<26798> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26798> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone VII -<26799> +proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=1268253.006858014 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<26799> +proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=1268253.006858014 +datum=NAD27 +units=us-ft +no_defs <> # NAD Michigan / Michigan East <26801> +proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999942857 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <> # NAD Michigan / Michigan Old Central @@ -5610,37 +6451,37 @@ # NAD Michigan / Michigan South <26813> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <> # NAD83 / Maine East (ftUS) (deprecated) -<26814> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26814> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Maine West (ftUS) (deprecated) -<26815> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26815> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Minnesota North (ftUS) (deprecated) -<26819> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26819> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Minnesota Central (ftUS) (deprecated) -<26820> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26820> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Minnesota South (ftUS) (deprecated) -<26821> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26821> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Nebraska (ftUS) (deprecated) -<26822> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26822> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / West Virginia North (ftUS) (deprecated) -<26823> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26823> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / West Virginia South (ftUS) (deprecated) -<26824> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26824> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Maine East (ftUS) (deprecated) -<26825> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<26825> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Maine West (ftUS) (deprecated) -<26826> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<26826> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Minnesota North (ftUS) (deprecated) -<26830> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +units=m +no_defs <> +<26830> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Minnesota Central (ftUS) (deprecated) -<26831> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +units=m +no_defs <> +<26831> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Minnesota South (ftUS) (deprecated) -<26832> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +units=m +no_defs <> +<26832> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / Nebraska (ftUS) (deprecated) -<26833> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<26833> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / West Virginia North (ftUS) (deprecated) -<26834> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<26834> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(HARN) / West Virginia South (ftUS) (deprecated) -<26835> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<26835> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Maine East (ftUS) (deprecated) <26836> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Maine West (ftUS) (deprecated) @@ -5658,37 +6499,37 @@ # NAD83(NSRS2007) / West Virginia South (ftUS) (deprecated) <26846> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Maine East (ftUS) -<26847> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<26847> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Maine West (ftUS) -<26848> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<26848> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Minnesota North (ftUS) -<26849> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<26849> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Minnesota Central (ftUS) -<26850> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<26850> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Minnesota South (ftUS) -<26851> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<26851> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Nebraska (ftUS) -<26852> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<26852> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / West Virginia North (ftUS) -<26853> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<26853> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / West Virginia South (ftUS) -<26854> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<26854> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Maine East (ftUS) -<26855> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<26855> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Maine West (ftUS) -<26856> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<26856> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Minnesota North (ftUS) -<26857> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <> +<26857> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Minnesota Central (ftUS) -<26858> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <> +<26858> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Minnesota South (ftUS) -<26859> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <> +<26859> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / Nebraska (ftUS) -<26860> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<26860> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / West Virginia North (ftUS) -<26861> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<26861> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / West Virginia South (ftUS) -<26862> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> +<26862> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Maine East (ftUS) <26863> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Maine West (ftUS) @@ -5706,285 +6547,285 @@ # NAD83(NSRS2007) / West Virginia South (ftUS) <26870> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(CSRS) / MTM zone 11 -<26891> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<26891> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 12 -<26892> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<26892> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 13 -<26893> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<26893> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 14 -<26894> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<26894> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 15 -<26895> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<26895> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 16 -<26896> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<26896> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 17 -<26897> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<26897> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 1 -<26898> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<26898> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 2 -<26899> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<26899> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 1N -<26901> +proj=utm +zone=1 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26901> +proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 2N -<26902> +proj=utm +zone=2 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26902> +proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 3N -<26903> +proj=utm +zone=3 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26903> +proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 4N -<26904> +proj=utm +zone=4 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26904> +proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 5N -<26905> +proj=utm +zone=5 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26905> +proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 6N -<26906> +proj=utm +zone=6 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26906> +proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 7N -<26907> +proj=utm +zone=7 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26907> +proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 8N -<26908> +proj=utm +zone=8 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26908> +proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 9N -<26909> +proj=utm +zone=9 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26909> +proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 10N -<26910> +proj=utm +zone=10 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26910> +proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 11N -<26911> +proj=utm +zone=11 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26911> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 12N -<26912> +proj=utm +zone=12 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26912> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 13N -<26913> +proj=utm +zone=13 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26913> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 14N -<26914> +proj=utm +zone=14 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26914> +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 15N -<26915> +proj=utm +zone=15 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26915> +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 16N -<26916> +proj=utm +zone=16 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26916> +proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 17N -<26917> +proj=utm +zone=17 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26917> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 18N -<26918> +proj=utm +zone=18 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26918> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 19N -<26919> +proj=utm +zone=19 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26919> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 20N -<26920> +proj=utm +zone=20 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26920> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 21N -<26921> +proj=utm +zone=21 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26921> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 22N -<26922> +proj=utm +zone=22 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26922> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / UTM zone 23N -<26923> +proj=utm +zone=23 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26923> +proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Alabama East -<26929> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26929> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Alabama West -<26930> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26930> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Alaska zone 1 -<26931> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26931> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +gamma=323.1301023611111 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Alaska zone 2 -<26932> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26932> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Alaska zone 3 -<26933> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26933> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Alaska zone 4 -<26934> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26934> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Alaska zone 5 -<26935> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26935> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Alaska zone 6 -<26936> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26936> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Alaska zone 7 -<26937> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26937> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Alaska zone 8 -<26938> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26938> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Alaska zone 9 -<26939> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26939> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Alaska zone 10 -<26940> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26940> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / California zone 1 -<26941> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26941> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / California zone 2 -<26942> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26942> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / California zone 3 -<26943> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26943> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / California zone 4 -<26944> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26944> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / California zone 5 -<26945> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26945> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / California zone 6 -<26946> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26946> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Arizona East -<26948> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26948> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Arizona Central -<26949> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26949> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Arizona West -<26950> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26950> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Arkansas North -<26951> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26951> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Arkansas South -<26952> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26952> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Colorado North -<26953> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26953> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Colorado Central -<26954> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26954> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Colorado South -<26955> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26955> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Connecticut -<26956> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26956> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Delaware -<26957> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26957> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Florida East -<26958> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26958> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Florida West -<26959> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26959> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Florida North -<26960> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26960> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Hawaii zone 1 -<26961> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26961> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Hawaii zone 2 -<26962> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26962> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Hawaii zone 3 -<26963> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26963> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Hawaii zone 4 -<26964> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26964> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Hawaii zone 5 -<26965> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26965> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Georgia East -<26966> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26966> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Georgia West -<26967> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26967> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Idaho East -<26968> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26968> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Idaho Central -<26969> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26969> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Idaho West -<26970> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26970> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Illinois East -<26971> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26971> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Illinois West -<26972> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26972> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Indiana East -<26973> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26973> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Indiana West -<26974> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26974> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Iowa North -<26975> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26975> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Iowa South -<26976> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26976> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Kansas North -<26977> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26977> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Kansas South -<26978> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26978> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Kentucky North (deprecated) -<26979> +proj=lcc +lat_1=37.96666666666667 +lat_2=37.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26979> +proj=lcc +lat_1=37.96666666666667 +lat_2=37.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Kentucky South -<26980> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26980> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Louisiana North -<26981> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26981> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Louisiana South -<26982> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26982> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Maine East -<26983> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26983> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Maine West -<26984> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26984> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Maryland -<26985> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26985> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Massachusetts Mainland -<26986> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26986> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Massachusetts Island -<26987> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26987> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Michigan North -<26988> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26988> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Michigan Central -<26989> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26989> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Michigan South -<26990> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26990> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Minnesota North -<26991> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26991> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Minnesota Central -<26992> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26992> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Minnesota South -<26993> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26993> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Mississippi East -<26994> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26994> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Mississippi West -<26995> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26995> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Missouri East -<26996> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26996> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Missouri Central -<26997> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26997> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Missouri West -<26998> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<26998> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Nahrwan 1967 / UTM zone 37N -<27037> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs <> +<27037> +proj=utm +zone=37 +ellps=clrk80 +towgs84=-243,-192,477,0,0,0,0 +units=m +no_defs <> # Nahrwan 1967 / UTM zone 38N -<27038> +proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs <> +<27038> +proj=utm +zone=38 +ellps=clrk80 +towgs84=-243,-192,477,0,0,0,0 +units=m +no_defs <> # Nahrwan 1967 / UTM zone 39N -<27039> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs <> +<27039> +proj=utm +zone=39 +ellps=clrk80 +towgs84=-243,-192,477,0,0,0,0 +units=m +no_defs <> # Nahrwan 1967 / UTM zone 40N -<27040> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs <> +<27040> +proj=utm +zone=40 +ellps=clrk80 +towgs84=-243,-192,477,0,0,0,0 +units=m +no_defs <> # Naparima 1972 / UTM zone 20N -<27120> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <> +<27120> +proj=utm +zone=20 +ellps=intl +towgs84=-10,375,165,0,0,0,0 +units=m +no_defs <> # NZGD49 / New Zealand Map Grid -<27200> +proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27200> +proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Mount Eden Circuit -<27205> +proj=tmerc +lat_0=-36.87986527777778 +lon_0=174.7643393611111 +k=0.9999 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27205> +proj=tmerc +lat_0=-36.87986527777778 +lon_0=174.7643393611111 +k=0.9999 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Bay of Plenty Circuit -<27206> +proj=tmerc +lat_0=-37.76124980555556 +lon_0=176.46619725 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27206> +proj=tmerc +lat_0=-37.76124980555556 +lon_0=176.46619725 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Poverty Bay Circuit -<27207> +proj=tmerc +lat_0=-38.62470277777778 +lon_0=177.8856362777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27207> +proj=tmerc +lat_0=-38.62470277777778 +lon_0=177.8856362777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Hawkes Bay Circuit -<27208> +proj=tmerc +lat_0=-39.65092930555556 +lon_0=176.6736805277778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27208> +proj=tmerc +lat_0=-39.65092930555556 +lon_0=176.6736805277778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Taranaki Circuit -<27209> +proj=tmerc +lat_0=-39.13575830555556 +lon_0=174.22801175 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27209> +proj=tmerc +lat_0=-39.13575830555556 +lon_0=174.22801175 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Tuhirangi Circuit -<27210> +proj=tmerc +lat_0=-39.51247038888889 +lon_0=175.6400368055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27210> +proj=tmerc +lat_0=-39.51247038888889 +lon_0=175.6400368055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Wanganui Circuit -<27211> +proj=tmerc +lat_0=-40.24194713888889 +lon_0=175.4880996111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27211> +proj=tmerc +lat_0=-40.24194713888889 +lon_0=175.4880996111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Wairarapa Circuit -<27212> +proj=tmerc +lat_0=-40.92553263888889 +lon_0=175.6473496666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27212> +proj=tmerc +lat_0=-40.92553263888889 +lon_0=175.6473496666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Wellington Circuit -<27213> +proj=tmerc +lat_0=-41.30131963888888 +lon_0=174.7766231111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27213> +proj=tmerc +lat_0=-41.30131963888888 +lon_0=174.7766231111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Collingwood Circuit -<27214> +proj=tmerc +lat_0=-40.71475905555556 +lon_0=172.6720465 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27214> +proj=tmerc +lat_0=-40.71475905555556 +lon_0=172.6720465 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Nelson Circuit -<27215> +proj=tmerc +lat_0=-41.27454472222222 +lon_0=173.2993168055555 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27215> +proj=tmerc +lat_0=-41.27454472222222 +lon_0=173.2993168055555 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Karamea Circuit -<27216> +proj=tmerc +lat_0=-41.28991152777778 +lon_0=172.1090281944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27216> +proj=tmerc +lat_0=-41.28991152777778 +lon_0=172.1090281944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Buller Circuit -<27217> +proj=tmerc +lat_0=-41.81080286111111 +lon_0=171.5812600555556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27217> +proj=tmerc +lat_0=-41.81080286111111 +lon_0=171.5812600555556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Grey Circuit -<27218> +proj=tmerc +lat_0=-42.33369427777778 +lon_0=171.5497713055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27218> +proj=tmerc +lat_0=-42.33369427777778 +lon_0=171.5497713055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Amuri Circuit -<27219> +proj=tmerc +lat_0=-42.68911658333333 +lon_0=173.0101333888889 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27219> +proj=tmerc +lat_0=-42.68911658333333 +lon_0=173.0101333888889 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Marlborough Circuit -<27220> +proj=tmerc +lat_0=-41.54448666666666 +lon_0=173.8020741111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27220> +proj=tmerc +lat_0=-41.54448666666666 +lon_0=173.8020741111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Hokitika Circuit -<27221> +proj=tmerc +lat_0=-42.88632236111111 +lon_0=170.9799935 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27221> +proj=tmerc +lat_0=-42.88632236111111 +lon_0=170.9799935 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Okarito Circuit -<27222> +proj=tmerc +lat_0=-43.11012813888889 +lon_0=170.2609258333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27222> +proj=tmerc +lat_0=-43.11012813888889 +lon_0=170.2609258333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Jacksons Bay Circuit -<27223> +proj=tmerc +lat_0=-43.97780288888889 +lon_0=168.606267 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27223> +proj=tmerc +lat_0=-43.97780288888889 +lon_0=168.606267 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Mount Pleasant Circuit -<27224> +proj=tmerc +lat_0=-43.59063758333333 +lon_0=172.7271935833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27224> +proj=tmerc +lat_0=-43.59063758333333 +lon_0=172.7271935833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Gawler Circuit -<27225> +proj=tmerc +lat_0=-43.74871155555556 +lon_0=171.3607484722222 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27225> +proj=tmerc +lat_0=-43.74871155555556 +lon_0=171.3607484722222 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Timaru Circuit -<27226> +proj=tmerc +lat_0=-44.40222036111111 +lon_0=171.0572508333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27226> +proj=tmerc +lat_0=-44.40222036111111 +lon_0=171.0572508333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Lindis Peak Circuit -<27227> +proj=tmerc +lat_0=-44.73526797222222 +lon_0=169.4677550833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27227> +proj=tmerc +lat_0=-44.73526797222222 +lon_0=169.4677550833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Mount Nicholas Circuit -<27228> +proj=tmerc +lat_0=-45.13290258333333 +lon_0=168.3986411944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27228> +proj=tmerc +lat_0=-45.13290258333333 +lon_0=168.3986411944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Mount York Circuit -<27229> +proj=tmerc +lat_0=-45.56372616666666 +lon_0=167.7388617777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27229> +proj=tmerc +lat_0=-45.56372616666666 +lon_0=167.7388617777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Observation Point Circuit -<27230> +proj=tmerc +lat_0=-45.81619661111111 +lon_0=170.6285951666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27230> +proj=tmerc +lat_0=-45.81619661111111 +lon_0=170.6285951666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / North Taieri Circuit -<27231> +proj=tmerc +lat_0=-45.86151336111111 +lon_0=170.2825891111111 +k=0.99996 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27231> +proj=tmerc +lat_0=-45.86151336111111 +lon_0=170.2825891111111 +k=0.99996 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / Bluff Circuit -<27232> +proj=tmerc +lat_0=-46.60000961111111 +lon_0=168.342872 +k=1 +x_0=300002.66 +y_0=699999.58 +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27232> +proj=tmerc +lat_0=-46.60000961111111 +lon_0=168.342872 +k=1 +x_0=300002.66 +y_0=699999.58 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / UTM zone 58S -<27258> +proj=utm +zone=58 +south +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27258> +proj=utm +zone=58 +south +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / UTM zone 59S -<27259> +proj=utm +zone=59 +south +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27259> +proj=utm +zone=59 +south +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / UTM zone 60S -<27260> +proj=utm +zone=60 +south +ellps=intl +datum=nzgd49 +units=m +no_defs <> +<27260> +proj=utm +zone=60 +south +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs <> # NZGD49 / North Island Grid -<27291> +proj=tmerc +lat_0=-39 +lon_0=175.5 +k=1 +x_0=274319.5243848086 +y_0=365759.3658464114 +ellps=intl +datum=nzgd49 +to_meter=0.9143984146160287 +no_defs <> +<27291> +proj=tmerc +lat_0=-39 +lon_0=175.5 +k=1 +x_0=274319.5243848086 +y_0=365759.3658464114 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +to_meter=0.9143984146160287 +no_defs <> # NZGD49 / South Island Grid -<27292> +proj=tmerc +lat_0=-44 +lon_0=171.5 +k=1 +x_0=457199.2073080143 +y_0=457199.2073080143 +ellps=intl +datum=nzgd49 +to_meter=0.9143984146160287 +no_defs <> +<27292> +proj=tmerc +lat_0=-44 +lon_0=171.5 +k=1 +x_0=457199.2073080143 +y_0=457199.2073080143 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +to_meter=0.9143984146160287 +no_defs <> # NGO 1948 (Oslo) / NGO zone I <27391> +proj=tmerc +lat_0=58 +lon_0=-4.666666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> # NGO 1948 (Oslo) / NGO zone II @@ -6002,13 +6843,13 @@ # NGO 1948 (Oslo) / NGO zone VIII <27398> +proj=tmerc +lat_0=58 +lon_0=18.33333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> # Datum 73 / UTM zone 29N -<27429> +proj=utm +zone=29 +ellps=intl +units=m +no_defs <> +<27429> +proj=utm +zone=29 +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +units=m +no_defs <> # Datum 73 / Modified Portuguese Grid (deprecated) -<27492> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m +no_defs <> +<27492> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +units=m +no_defs <> # Datum 73 / Modified Portuguese Grid -<27493> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m +no_defs <> -# unnamed -<27500> +proj=lcc +lat_1=49.5 +lat_0=49.5 +lon_0=5.4 +k_0=0.99950908 +x_0=500000 +y_0=300000 +a=6376523 +b=6355862.933255573 +pm=2.3372291666985 +units=m +no_defs <> +<27493> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +units=m +no_defs <> +# ATF (Paris) / Nord de Guerre +<27500> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=5.399999999999999 +k_0=0.99950908 +x_0=500000 +y_0=300000 +a=6376523 +b=6355862.933255573 +pm=2.337208333333333 +units=m +no_defs <> # NTF (Paris) / Lambert Nord France <27561> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Lambert Centre France @@ -6042,7 +6883,7 @@ # NTF (Paris) / Corse (deprecated) <27594> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # OSGB 1936 / British National Grid -<27700> +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +datum=OSGB36 +units=m +no_defs <> +<27700> +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=375,-111,431,0,0,0,0 +units=m +no_defs <> # Palestine 1923 / Palestine Grid <28191> +proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs <> # Palestine 1923 / Palestine Belt @@ -6050,7 +6891,7 @@ # Palestine 1923 / Israeli CS Grid <28193> +proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs <> # Pointe Noire / UTM zone 32S -<28232> +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs <> +<28232> +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +towgs84=-148,51,-291,0,0,0,0 +units=m +no_defs <> # GDA94 / MGA zone 48 <28348> +proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / MGA zone 49 @@ -6074,298 +6915,290 @@ # GDA94 / MGA zone 58 <28358> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 2 (deprecated) -<28402> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28402> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 3 (deprecated) -<28403> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28403> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 4 -<28404> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28404> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 5 -<28405> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28405> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 6 -<28406> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28406> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 7 -<28407> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28407> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 8 -<28408> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28408> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 9 -<28409> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28409> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 10 -<28410> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28410> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 11 -<28411> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28411> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 12 -<28412> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28412> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 13 -<28413> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28413> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 14 -<28414> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28414> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 15 -<28415> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28415> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 16 -<28416> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28416> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 17 -<28417> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28417> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 18 -<28418> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28418> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 19 -<28419> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28419> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 20 -<28420> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28420> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 21 -<28421> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28421> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 22 -<28422> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28422> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 23 -<28423> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28423> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 24 -<28424> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28424> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 25 -<28425> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28425> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 26 -<28426> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28426> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 27 -<28427> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28427> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 28 -<28428> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28428> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 29 -<28429> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28429> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 30 -<28430> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28430> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 31 -<28431> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28431> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 32 -<28432> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28432> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 2N (deprecated) -<28462> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28462> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 3N (deprecated) -<28463> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28463> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 4N (deprecated) -<28464> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28464> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 5N (deprecated) -<28465> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28465> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 6N (deprecated) -<28466> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28466> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 7N (deprecated) -<28467> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28467> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 8N (deprecated) -<28468> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28468> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 9N (deprecated) -<28469> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28469> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 10N (deprecated) -<28470> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28470> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 11N (deprecated) -<28471> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28471> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 12N (deprecated) -<28472> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28472> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 13N (deprecated) -<28473> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28473> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 14N (deprecated) -<28474> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28474> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 15N (deprecated) -<28475> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28475> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 16N (deprecated) -<28476> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28476> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 17N (deprecated) -<28477> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28477> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 18N (deprecated) -<28478> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28478> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 19N (deprecated) -<28479> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28479> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 20N (deprecated) -<28480> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28480> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 21N (deprecated) -<28481> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28481> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 22N (deprecated) -<28482> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28482> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 23N (deprecated) -<28483> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28483> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 24N (deprecated) -<28484> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28484> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 25N (deprecated) -<28485> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28485> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 26N (deprecated) -<28486> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28486> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 27N (deprecated) -<28487> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28487> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 28N (deprecated) -<28488> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28488> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 29N (deprecated) -<28489> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28489> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 30N (deprecated) -<28490> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28490> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 31N (deprecated) -<28491> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28491> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 32N (deprecated) -<28492> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> +<28492> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs <> # Qatar 1974 / Qatar National Grid -<28600> +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +units=m +no_defs <> +<28600> +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-128.16,-282.42,21.93,0,0,0,0 +units=m +no_defs <> # Amersfoort / RD Old -<28991> +proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> +<28991> +proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=0 +y_0=0 +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725 +units=m +no_defs <> # Amersfoort / RD New -<28992> +proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +no_defs <> +<28992> +proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725 +units=m +no_defs <> # SAD69 / Brazil Polyconic (deprecated) -<29100> +proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS67 +units=m +no_defs <> +<29100> +proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / Brazil Polyconic -<29101> +proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=aust_SA +units=m +no_defs <> +<29101> +proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 18N (deprecated) -<29118> +proj=utm +zone=18 +ellps=GRS67 +units=m +no_defs <> +<29118> +proj=utm +zone=18 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 19N (deprecated) -<29119> +proj=utm +zone=19 +ellps=GRS67 +units=m +no_defs <> +<29119> +proj=utm +zone=19 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 20N (deprecated) -<29120> +proj=utm +zone=20 +ellps=GRS67 +units=m +no_defs <> +<29120> +proj=utm +zone=20 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 21N (deprecated) -<29121> +proj=utm +zone=21 +ellps=GRS67 +units=m +no_defs <> +<29121> +proj=utm +zone=21 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 22N (deprecated) -<29122> +proj=utm +zone=22 +ellps=GRS67 +units=m +no_defs <> +<29122> +proj=utm +zone=22 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 18N -<29168> +proj=utm +zone=18 +ellps=aust_SA +units=m +no_defs <> +<29168> +proj=utm +zone=18 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 19N -<29169> +proj=utm +zone=19 +ellps=aust_SA +units=m +no_defs <> +<29169> +proj=utm +zone=19 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 20N -<29170> +proj=utm +zone=20 +ellps=aust_SA +units=m +no_defs <> +<29170> +proj=utm +zone=20 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 21N -<29171> +proj=utm +zone=21 +ellps=aust_SA +units=m +no_defs <> +<29171> +proj=utm +zone=21 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 22N -<29172> +proj=utm +zone=22 +ellps=aust_SA +units=m +no_defs <> +<29172> +proj=utm +zone=22 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 17S (deprecated) -<29177> +proj=utm +zone=17 +south +ellps=GRS67 +units=m +no_defs <> +<29177> +proj=utm +zone=17 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 18S (deprecated) -<29178> +proj=utm +zone=18 +south +ellps=GRS67 +units=m +no_defs <> +<29178> +proj=utm +zone=18 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 19S (deprecated) -<29179> +proj=utm +zone=19 +south +ellps=GRS67 +units=m +no_defs <> +<29179> +proj=utm +zone=19 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 20S (deprecated) -<29180> +proj=utm +zone=20 +south +ellps=GRS67 +units=m +no_defs <> +<29180> +proj=utm +zone=20 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 21S (deprecated) -<29181> +proj=utm +zone=21 +south +ellps=GRS67 +units=m +no_defs <> +<29181> +proj=utm +zone=21 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 22S (deprecated) -<29182> +proj=utm +zone=22 +south +ellps=GRS67 +units=m +no_defs <> +<29182> +proj=utm +zone=22 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 23S (deprecated) -<29183> +proj=utm +zone=23 +south +ellps=GRS67 +units=m +no_defs <> +<29183> +proj=utm +zone=23 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 24S (deprecated) -<29184> +proj=utm +zone=24 +south +ellps=GRS67 +units=m +no_defs <> +<29184> +proj=utm +zone=24 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 25S (deprecated) -<29185> +proj=utm +zone=25 +south +ellps=GRS67 +units=m +no_defs <> +<29185> +proj=utm +zone=25 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 17S -<29187> +proj=utm +zone=17 +south +ellps=aust_SA +units=m +no_defs <> +<29187> +proj=utm +zone=17 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 18S -<29188> +proj=utm +zone=18 +south +ellps=aust_SA +units=m +no_defs <> +<29188> +proj=utm +zone=18 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 19S -<29189> +proj=utm +zone=19 +south +ellps=aust_SA +units=m +no_defs <> +<29189> +proj=utm +zone=19 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 20S -<29190> +proj=utm +zone=20 +south +ellps=aust_SA +units=m +no_defs <> +<29190> +proj=utm +zone=20 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 21S -<29191> +proj=utm +zone=21 +south +ellps=aust_SA +units=m +no_defs <> +<29191> +proj=utm +zone=21 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 22S -<29192> +proj=utm +zone=22 +south +ellps=aust_SA +units=m +no_defs <> +<29192> +proj=utm +zone=22 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 23S -<29193> +proj=utm +zone=23 +south +ellps=aust_SA +units=m +no_defs <> +<29193> +proj=utm +zone=23 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 24S -<29194> +proj=utm +zone=24 +south +ellps=aust_SA +units=m +no_defs <> +<29194> +proj=utm +zone=24 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # SAD69 / UTM zone 25S -<29195> +proj=utm +zone=25 +south +ellps=aust_SA +units=m +no_defs <> +<29195> +proj=utm +zone=25 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs <> # Sapper Hill 1943 / UTM zone 20S <29220> +proj=utm +zone=20 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs <> # Sapper Hill 1943 / UTM zone 21S <29221> +proj=utm +zone=21 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs <> # Schwarzeck / UTM zone 33S -<29333> +proj=utm +zone=33 +south +ellps=bess_nam +units=m +no_defs <> +<29333> +proj=utm +zone=33 +south +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +units=m +no_defs <> # Schwarzeck / Lo22/11 -# Unable to translate coordinate system EPSG:29371 into PROJ.4 format. -# +<29371> +proj=tmerc +lat_0=-22 +lon_0=11 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs <> # Schwarzeck / Lo22/13 -# Unable to translate coordinate system EPSG:29373 into PROJ.4 format. -# +<29373> +proj=tmerc +lat_0=-22 +lon_0=13 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs <> # Schwarzeck / Lo22/15 -# Unable to translate coordinate system EPSG:29375 into PROJ.4 format. -# +<29375> +proj=tmerc +lat_0=-22 +lon_0=15 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs <> # Schwarzeck / Lo22/17 -# Unable to translate coordinate system EPSG:29377 into PROJ.4 format. -# +<29377> +proj=tmerc +lat_0=-22 +lon_0=17 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs <> # Schwarzeck / Lo22/19 -# Unable to translate coordinate system EPSG:29379 into PROJ.4 format. -# +<29379> +proj=tmerc +lat_0=-22 +lon_0=19 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs <> # Schwarzeck / Lo22/21 -# Unable to translate coordinate system EPSG:29381 into PROJ.4 format. -# +<29381> +proj=tmerc +lat_0=-22 +lon_0=21 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs <> # Schwarzeck / Lo22/23 -# Unable to translate coordinate system EPSG:29383 into PROJ.4 format. -# +<29383> +proj=tmerc +lat_0=-22 +lon_0=23 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs <> # Schwarzeck / Lo22/25 -# Unable to translate coordinate system EPSG:29385 into PROJ.4 format. -# +<29385> +proj=tmerc +lat_0=-22 +lon_0=25 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs <> # Sudan / UTM zone 35N (deprecated) <29635> +proj=utm +zone=35 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Sudan / UTM zone 36N (deprecated) <29636> +proj=utm +zone=36 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Tananarive (Paris) / Laborde Grid (deprecated) -<29700> +proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs <> +<29700> +proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +gamma=18.9 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs <> # Tananarive (Paris) / Laborde Grid # Unable to translate coordinate system EPSG:29701 into PROJ.4 format. # # Tananarive (Paris) / Laborde Grid approximation -<29702> +proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs <> +<29702> +proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +gamma=18.9 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs <> # Tananarive / UTM zone 38S <29738> +proj=utm +zone=38 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs <> # Tananarive / UTM zone 39S <29739> +proj=utm +zone=39 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs <> # Timbalai 1948 / UTM zone 49N -<29849> +proj=utm +zone=49 +ellps=evrstSS +units=m +no_defs <> +<29849> +proj=utm +zone=49 +ellps=evrstSS +towgs84=-533.4,669.2,-52.5,0,0,4.28,9.4 +units=m +no_defs <> # Timbalai 1948 / UTM zone 50N -<29850> +proj=utm +zone=50 +ellps=evrstSS +units=m +no_defs <> +<29850> +proj=utm +zone=50 +ellps=evrstSS +towgs84=-533.4,669.2,-52.5,0,0,4.28,9.4 +units=m +no_defs <> # Timbalai 1948 / RSO Borneo (ch) -<29871> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8714630401 +y_0=442857.653094361 +ellps=evrstSS +to_meter=20.11676512155263 +no_defs <> +<29871> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8714630401 +y_0=442857.653094361 +gamma=53.13010236111111 +ellps=evrstSS +towgs84=-533.4,669.2,-52.5,0,0,4.28,9.4 +to_meter=20.11676512155263 +no_defs <> # Timbalai 1948 / RSO Borneo (ft) -<29872> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8727431979 +y_0=442857.6545573985 +ellps=evrstSS +to_meter=0.3047994715386762 +no_defs <> +<29872> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8727431979 +y_0=442857.6545573985 +gamma=53.13010236111111 +ellps=evrstSS +towgs84=-533.4,669.2,-52.5,0,0,4.28,9.4 +to_meter=0.3047994715386762 +no_defs <> # Timbalai 1948 / RSO Borneo (m) -<29873> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.87 +y_0=442857.65 +ellps=evrstSS +units=m +no_defs <> +<29873> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.87 +y_0=442857.65 +gamma=53.13010236111111 +ellps=evrstSS +towgs84=-533.4,669.2,-52.5,0,0,4.28,9.4 +units=m +no_defs <> # TM65 / Irish National Grid (deprecated) -<29900> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +datum=ire65 +units=m +no_defs <> +<29900> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs <> # OSNI 1952 / Irish National Grid <29901> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1 +x_0=200000 +y_0=250000 +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs <> # TM65 / Irish Grid -<29902> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +datum=ire65 +units=m +no_defs <> +<29902> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs <> # TM75 / Irish Grid -<29903> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +units=m +no_defs <> +<29903> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS I -<30161> +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> +<30161> +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS II -<30162> +proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> +<30162> +proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS III -<30163> +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> +<30163> +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS IV -<30164> +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> +<30164> +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS V -<30165> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> +<30165> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS VI -<30166> +proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> +<30166> +proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS VII -<30167> +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> +<30167> +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS VIII -<30168> +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> +<30168> +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS IX -<30169> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> +<30169> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS X -<30170> +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> +<30170> +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XI -<30171> +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> +<30171> +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XII -<30172> +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> +<30172> +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XIII -<30173> +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> +<30173> +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XIV -<30174> +proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> +<30174> +proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XV -<30175> +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> +<30175> +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XVI -<30176> +proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> +<30176> +proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XVII -<30177> +proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> +<30177> +proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XVIII -<30178> +proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> +<30178> +proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XIX -<30179> +proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> +<30179> +proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs <> # Trinidad 1903 / Trinidad Grid -<30200> +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392051999 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164 +no_defs <> +<30200> +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392051999 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.201166195164 +no_defs <> # TC(1948) / UTM zone 39N <30339> +proj=utm +zone=39 +ellps=helmert +units=m +no_defs <> # TC(1948) / UTM zone 40N @@ -6379,17 +7212,17 @@ # Voirol 1879 / Sud Algerie (ancienne) <30494> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Nord Sahara 1959 / UTM zone 29N -<30729> +proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs <> +<30729> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +units=m +no_defs <> # Nord Sahara 1959 / UTM zone 30N -<30730> +proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs <> +<30730> +proj=utm +zone=30 +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +units=m +no_defs <> # Nord Sahara 1959 / UTM zone 31N -<30731> +proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs <> +<30731> +proj=utm +zone=31 +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +units=m +no_defs <> # Nord Sahara 1959 / UTM zone 32N -<30732> +proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs <> +<30732> +proj=utm +zone=32 +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +units=m +no_defs <> # Nord Sahara 1959 / Voirol Unifie Nord -<30791> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs <> +<30791> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +units=m +no_defs <> # Nord Sahara 1959 / Voirol Unifie Sud -<30792> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs <> +<30792> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +towgs84=-186,-93,310,0,0,0,0 +units=m +no_defs <> # RT38 2.5 gon W (deprecated) <30800> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # Yoff / UTM zone 28N @@ -6403,113 +7236,113 @@ # Zanderij / Suriname TM <31171> +proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9999 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs <> # MGI (Ferro) / Austria GK West Zone -<31251> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m +no_defs <> +<31251> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs <> # MGI (Ferro) / Austria GK Central Zone -<31252> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m +no_defs <> +<31252> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs <> # MGI (Ferro) / Austria GK East Zone -<31253> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m +no_defs <> +<31253> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs <> # MGI / Austria GK West -<31254> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31254> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # MGI / Austria GK Central -<31255> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31255> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # MGI / Austria GK East -<31256> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31256> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # MGI / Austria GK M28 -<31257> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31257> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # MGI / Austria GK M31 -<31258> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31258> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # MGI / Austria GK M34 -<31259> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31259> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # MGI / 3-degree Gauss zone 5 (deprecated) -<31265> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31265> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # MGI / 3-degree Gauss zone 6 (deprecated) -<31266> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31266> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # MGI / 3-degree Gauss zone 7 (deprecated) -<31267> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31267> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # MGI / 3-degree Gauss zone 8 (deprecated) -<31268> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31268> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # MGI / Balkans zone 5 (deprecated) -<31275> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31275> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # MGI / Balkans zone 6 (deprecated) -<31276> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31276> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # MGI / Balkans zone 7 (deprecated) -<31277> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31277> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # MGI / Balkans zone 8 (deprecated) -<31278> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31278> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # MGI / Balkans zone 8 (deprecated) -<31279> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31279> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # MGI (Ferro) / Austria West Zone -<31281> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> +<31281> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs <> # MGI (Ferro) / Austria Central Zone -<31282> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> +<31282> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs <> # MGI (Ferro) / Austria East Zone -<31283> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> +<31283> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs <> # MGI / Austria M28 -<31284> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31284> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # MGI / Austria M31 -<31285> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31285> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # MGI / Austria M34 -<31286> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31286> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # MGI / Austria Lambert -<31287> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31287> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # MGI (Ferro) / M28 -<31288> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> +<31288> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs <> # MGI (Ferro) / M31 -<31289> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> +<31289> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs <> # MGI (Ferro) / M34 -<31290> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> +<31290> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs <> # MGI (Ferro) / Austria West Zone (deprecated) -<31291> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> +<31291> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs <> # MGI (Ferro) / Austria Central Zone (deprecated) -<31292> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> +<31292> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs <> # MGI (Ferro) / Austria East Zone (deprecated) -<31293> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> +<31293> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs <> # MGI / M28 (deprecated) -<31294> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31294> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # MGI / M31 (deprecated) -<31295> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31295> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # MGI / M34 (deprecated) -<31296> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31296> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # MGI / Austria Lambert (deprecated) -<31297> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> +<31297> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs <> # Belge 1972 / Belge Lambert 72 -<31300> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=4.356939722222222 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +towgs84=106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1 +units=m +no_defs <> +<31300> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=4.356939722222222 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +towgs84=-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,-1.2747 +units=m +no_defs <> # Belge 1972 / Belgian Lambert 72 -<31370> +proj=lcc +lat_1=51.16666723333333 +lat_2=49.8333339 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +towgs84=106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1 +units=m +no_defs <> +<31370> +proj=lcc +lat_1=51.16666723333333 +lat_2=49.8333339 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +towgs84=-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,-1.2747 +units=m +no_defs <> # DHDN / 3-degree Gauss zone 1 (deprecated) -<31461> +proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> +<31461> +proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs <> # DHDN / 3-degree Gauss zone 2 (deprecated) -<31462> +proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> +<31462> +proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs <> # DHDN / 3-degree Gauss zone 3 (deprecated) -<31463> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> +<31463> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs <> # DHDN / 3-degree Gauss zone 4 (deprecated) -<31464> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> +<31464> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs <> # DHDN / 3-degree Gauss zone 5 (deprecated) -<31465> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> +<31465> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs <> # DHDN / 3-degree Gauss-Kruger zone 2 -<31466> +proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> +<31466> +proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs <> # DHDN / 3-degree Gauss-Kruger zone 3 -<31467> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> +<31467> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs <> # DHDN / 3-degree Gauss-Kruger zone 4 -<31468> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> +<31468> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs <> # DHDN / 3-degree Gauss-Kruger zone 5 -<31469> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> +<31469> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs <> # Conakry 1905 / UTM zone 28N <31528> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs <> # Conakry 1905 / UTM zone 29N <31529> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs <> # Dealul Piscului 1930 / Stereo 33 -<31600> +proj=sterea +lat_0=45.9 +lon_0=25.39246588888889 +k=0.9996667 +x_0=500000 +y_0=500000 +ellps=intl +units=m +no_defs <> +<31600> +proj=sterea +lat_0=45.9 +lon_0=25.39246588888889 +k=0.9996667 +x_0=500000 +y_0=500000 +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +units=m +no_defs <> # Dealul Piscului 1970/ Stereo 70 (deprecated) -<31700> +proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +units=m +no_defs <> +<31700> +proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=28,-121,-77,0,0,0,0 +units=m +no_defs <> # NGN / UTM zone 38N <31838> +proj=utm +zone=38 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs <> # NGN / UTM zone 39N <31839> +proj=utm +zone=39 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs <> # KUDAMS / KTM (deprecated) -<31900> +proj=tmerc +lat_0=0 +lon_0=48 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<31900> +proj=tmerc +lat_0=0 +lon_0=48 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-20.8,11.3,2.4,0,0,0,0 +units=m +no_defs <> # KUDAMS / KTM -<31901> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> +<31901> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-20.8,11.3,2.4,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 11N <31965> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 12N @@ -6583,547 +7416,547 @@ # SIRGAS 1995 / UTM zone 25S <32000> +proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD27 / Montana North -<32001> +proj=lcc +lat_1=48.71666666666667 +lat_2=47.85 +lat_0=47 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32001> +proj=lcc +lat_1=48.71666666666667 +lat_2=47.85 +lat_0=47 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Montana Central -<32002> +proj=lcc +lat_1=47.88333333333333 +lat_2=46.45 +lat_0=45.83333333333334 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32002> +proj=lcc +lat_1=47.88333333333333 +lat_2=46.45 +lat_0=45.83333333333334 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Montana South -<32003> +proj=lcc +lat_1=46.4 +lat_2=44.86666666666667 +lat_0=44 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32003> +proj=lcc +lat_1=46.4 +lat_2=44.86666666666667 +lat_0=44 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Nebraska North -<32005> +proj=lcc +lat_1=41.85 +lat_2=42.81666666666667 +lat_0=41.33333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32005> +proj=lcc +lat_1=41.85 +lat_2=42.81666666666667 +lat_0=41.33333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Nebraska South -<32006> +proj=lcc +lat_1=40.28333333333333 +lat_2=41.71666666666667 +lat_0=39.66666666666666 +lon_0=-99.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32006> +proj=lcc +lat_1=40.28333333333333 +lat_2=41.71666666666667 +lat_0=39.66666666666666 +lon_0=-99.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Nevada East -<32007> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32007> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Nevada Central -<32008> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32008> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Nevada West -<32009> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32009> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New Hampshire -<32010> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32010> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New Jersey -<32011> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.66666666666667 +k=0.9999749999999999 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32011> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.66666666666667 +k=0.9999749999999999 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New Mexico East -<32012> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32012> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New Mexico Central -<32013> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32013> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New Mexico West -<32014> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32014> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New York East -<32015> +proj=tmerc +lat_0=40 +lon_0=-74.33333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32015> +proj=tmerc +lat_0=40 +lon_0=-74.33333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New York Central -<32016> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32016> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New York West -<32017> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / New York Long Island -<32018> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=304800.6096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32017> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> +# NAD27 / New York Long Island (deprecated) +<32018> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=304800.6096012192 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / North Carolina -<32019> +proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32019> +proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / North Dakota North -<32020> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32020> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / North Dakota South -<32021> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32021> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Ohio North -<32022> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32022> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Ohio South -<32023> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32023> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Oklahoma North -<32024> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32024> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Oklahoma South -<32025> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32025> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Oregon North -<32026> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32026> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Oregon South -<32027> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32027> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Pennsylvania North -<32028> +proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Pennsylvania South -<32029> +proj=lcc +lat_1=39.93333333333333 +lat_2=40.8 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32028> +proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> +# NAD27 / Pennsylvania South (deprecated) +<32029> +proj=lcc +lat_1=39.93333333333333 +lat_2=40.8 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Rhode Island -<32030> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.9999938 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32030> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.9999938 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / South Carolina North -<32031> +proj=lcc +lat_1=33.76666666666667 +lat_2=34.96666666666667 +lat_0=33 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32031> +proj=lcc +lat_1=33.76666666666667 +lat_2=34.96666666666667 +lat_0=33 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / South Carolina South -<32033> +proj=lcc +lat_1=32.33333333333334 +lat_2=33.66666666666666 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32033> +proj=lcc +lat_1=32.33333333333334 +lat_2=33.66666666666666 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / South Dakota North -<32034> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32034> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / South Dakota South -<32035> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32035> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Tennessee (deprecated) -<32036> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=30480.06096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32036> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=30480.06096012192 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Texas North -<32037> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32037> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Texas North Central -<32038> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-97.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32038> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-97.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Texas Central -<32039> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32039> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Texas South Central -<32040> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32040> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Texas South -<32041> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32041> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Utah North -<32042> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32042> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Utah Central -<32043> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32043> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Utah South -<32044> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32044> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Vermont -<32045> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32045> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Virginia North -<32046> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32046> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Virginia South -<32047> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32047> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Washington North -<32048> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32048> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Washington South -<32049> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32049> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / West Virginia North -<32050> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32050> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / West Virginia South -<32051> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32051> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Wisconsin North -<32052> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32052> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Wisconsin Central -<32053> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32053> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Wisconsin South -<32054> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32054> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Wyoming East -<32055> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-105.1666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32055> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-105.1666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Wyoming East Central -<32056> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-107.3333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32056> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-107.3333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Wyoming West Central -<32057> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-108.75 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32057> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-108.75 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Wyoming West -<32058> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-110.0833333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> -# NAD27 / Guatemala Norte -<32061> +proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> -# NAD27 / Guatemala Sur -<32062> +proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<32058> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-110.0833333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> +# NAD27 / Guatemala Norte (deprecated) +<32061> +proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +datum=NAD27 +units=m +no_defs <> +# NAD27 / Guatemala Sur (deprecated) +<32062> +proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +datum=NAD27 +units=m +no_defs <> # NAD27 / BLM 14N (ftUS) -<32064> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32064> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / BLM 15N (ftUS) -<32065> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32065> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / BLM 16N (ftUS) -<32066> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32066> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / BLM 17N (ftUS) -<32067> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32067> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / BLM 14N (feet) (deprecated) -<32074> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32074> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / BLM 15N (feet) (deprecated) -<32075> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32075> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / BLM 16N (feet) (deprecated) -<32076> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32076> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / BLM 17N (feet) (deprecated) -<32077> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32077> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / MTM zone 1 -<32081> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<32081> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs <> # NAD27 / MTM zone 2 -<32082> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<32082> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs <> # NAD27 / MTM zone 3 -<32083> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<32083> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs <> # NAD27 / MTM zone 4 -<32084> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<32084> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs <> # NAD27 / MTM zone 5 -<32085> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<32085> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs <> # NAD27 / MTM zone 6 -<32086> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<32086> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs <> # NAD27 / Quebec Lambert -<32098> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> +<32098> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs <> # NAD27 / Louisiana Offshore -<32099> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> +<32099> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs <> # NAD83 / Montana -<32100> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32100> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Nebraska -<32104> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32104> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Nevada East -<32107> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32107> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Nevada Central -<32108> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32108> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Nevada West -<32109> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32109> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / New Hampshire -<32110> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32110> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / New Jersey -<32111> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32111> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / New Mexico East -<32112> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32112> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / New Mexico Central -<32113> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32113> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / New Mexico West -<32114> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32114> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / New York East -<32115> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32115> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / New York Central -<32116> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32116> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / New York West -<32117> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32117> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / New York Long Island -<32118> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32118> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / North Carolina -<32119> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32119> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / North Dakota North -<32120> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32120> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / North Dakota South -<32121> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32121> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Ohio North -<32122> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32122> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Ohio South -<32123> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32123> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Oklahoma North -<32124> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32124> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Oklahoma South -<32125> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32125> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Oregon North -<32126> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32126> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Oregon South -<32127> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32127> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Pennsylvania North -<32128> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32128> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Pennsylvania South -<32129> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32129> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Rhode Island -<32130> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32130> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / South Carolina -<32133> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32133> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / South Dakota North -<32134> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32134> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / South Dakota South -<32135> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32135> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Tennessee -<32136> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32136> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Texas North -<32137> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32137> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Texas North Central -<32138> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32138> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Texas Central -<32139> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32139> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Texas South Central -<32140> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32140> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Texas South -<32141> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32141> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Utah North -<32142> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32142> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Utah Central -<32143> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32143> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Utah South -<32144> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32144> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Vermont -<32145> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32145> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Virginia North -<32146> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32146> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Virginia South -<32147> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32147> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Washington North -<32148> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32148> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Washington South -<32149> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32149> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / West Virginia North -<32150> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32150> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / West Virginia South -<32151> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32151> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Wisconsin North -<32152> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32152> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Wisconsin Central -<32153> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32153> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Wisconsin South -<32154> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32154> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Wyoming East -<32155> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32155> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Wyoming East Central -<32156> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32156> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Wyoming West Central -<32157> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32157> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Wyoming West -<32158> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32158> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Puerto Rico & Virgin Is. -<32161> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32161> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / BLM 14N (ftUS) -<32164> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<32164> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / BLM 15N (ftUS) -<32165> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<32165> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / BLM 16N (ftUS) -<32166> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> +<32166> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / BLM 17N (ftUS) -<32167> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> -# NAD83 / SCoPQ zone 2 -<32180> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32167> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> +# NAD83 / SCoPQ zone 2 (deprecated) +<32180> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / MTM zone 1 -<32181> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32181> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / MTM zone 2 -<32182> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32182> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / MTM zone 3 -<32183> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32183> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / MTM zone 4 -<32184> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32184> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / MTM zone 5 -<32185> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32185> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / MTM zone 6 -<32186> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32186> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / MTM zone 7 -<32187> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32187> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / MTM zone 8 -<32188> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32188> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / MTM zone 9 -<32189> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32189> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / MTM zone 10 -<32190> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32190> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / MTM zone 11 -<32191> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32191> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / MTM zone 12 -<32192> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32192> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / MTM zone 13 -<32193> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32193> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / MTM zone 14 -<32194> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32194> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / MTM zone 15 -<32195> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32195> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / MTM zone 16 -<32196> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32196> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / MTM zone 17 -<32197> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32197> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Quebec Lambert -<32198> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32198> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Louisiana Offshore -<32199> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> +<32199> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # WGS 72 / UTM zone 1N -<32201> +proj=utm +zone=1 +ellps=WGS72 +units=m +no_defs <> +<32201> +proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 2N -<32202> +proj=utm +zone=2 +ellps=WGS72 +units=m +no_defs <> +<32202> +proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 3N -<32203> +proj=utm +zone=3 +ellps=WGS72 +units=m +no_defs <> +<32203> +proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 4N -<32204> +proj=utm +zone=4 +ellps=WGS72 +units=m +no_defs <> +<32204> +proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 5N -<32205> +proj=utm +zone=5 +ellps=WGS72 +units=m +no_defs <> +<32205> +proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 6N -<32206> +proj=utm +zone=6 +ellps=WGS72 +units=m +no_defs <> +<32206> +proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 7N -<32207> +proj=utm +zone=7 +ellps=WGS72 +units=m +no_defs <> +<32207> +proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 8N -<32208> +proj=utm +zone=8 +ellps=WGS72 +units=m +no_defs <> +<32208> +proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 9N -<32209> +proj=utm +zone=9 +ellps=WGS72 +units=m +no_defs <> +<32209> +proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 10N -<32210> +proj=utm +zone=10 +ellps=WGS72 +units=m +no_defs <> +<32210> +proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 11N -<32211> +proj=utm +zone=11 +ellps=WGS72 +units=m +no_defs <> +<32211> +proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 12N -<32212> +proj=utm +zone=12 +ellps=WGS72 +units=m +no_defs <> +<32212> +proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 13N -<32213> +proj=utm +zone=13 +ellps=WGS72 +units=m +no_defs <> +<32213> +proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 14N -<32214> +proj=utm +zone=14 +ellps=WGS72 +units=m +no_defs <> +<32214> +proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 15N -<32215> +proj=utm +zone=15 +ellps=WGS72 +units=m +no_defs <> +<32215> +proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 16N -<32216> +proj=utm +zone=16 +ellps=WGS72 +units=m +no_defs <> +<32216> +proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 17N -<32217> +proj=utm +zone=17 +ellps=WGS72 +units=m +no_defs <> +<32217> +proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 18N -<32218> +proj=utm +zone=18 +ellps=WGS72 +units=m +no_defs <> +<32218> +proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 19N -<32219> +proj=utm +zone=19 +ellps=WGS72 +units=m +no_defs <> +<32219> +proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 20N -<32220> +proj=utm +zone=20 +ellps=WGS72 +units=m +no_defs <> +<32220> +proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 21N -<32221> +proj=utm +zone=21 +ellps=WGS72 +units=m +no_defs <> +<32221> +proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 22N -<32222> +proj=utm +zone=22 +ellps=WGS72 +units=m +no_defs <> +<32222> +proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 23N -<32223> +proj=utm +zone=23 +ellps=WGS72 +units=m +no_defs <> +<32223> +proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 24N -<32224> +proj=utm +zone=24 +ellps=WGS72 +units=m +no_defs <> +<32224> +proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 25N -<32225> +proj=utm +zone=25 +ellps=WGS72 +units=m +no_defs <> +<32225> +proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 26N -<32226> +proj=utm +zone=26 +ellps=WGS72 +units=m +no_defs <> +<32226> +proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 27N -<32227> +proj=utm +zone=27 +ellps=WGS72 +units=m +no_defs <> +<32227> +proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 28N -<32228> +proj=utm +zone=28 +ellps=WGS72 +units=m +no_defs <> +<32228> +proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 29N -<32229> +proj=utm +zone=29 +ellps=WGS72 +units=m +no_defs <> +<32229> +proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 30N -<32230> +proj=utm +zone=30 +ellps=WGS72 +units=m +no_defs <> +<32230> +proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 31N -<32231> +proj=utm +zone=31 +ellps=WGS72 +units=m +no_defs <> +<32231> +proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 32N -<32232> +proj=utm +zone=32 +ellps=WGS72 +units=m +no_defs <> +<32232> +proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 33N -<32233> +proj=utm +zone=33 +ellps=WGS72 +units=m +no_defs <> +<32233> +proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 34N -<32234> +proj=utm +zone=34 +ellps=WGS72 +units=m +no_defs <> +<32234> +proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 35N -<32235> +proj=utm +zone=35 +ellps=WGS72 +units=m +no_defs <> +<32235> +proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 36N -<32236> +proj=utm +zone=36 +ellps=WGS72 +units=m +no_defs <> +<32236> +proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 37N -<32237> +proj=utm +zone=37 +ellps=WGS72 +units=m +no_defs <> +<32237> +proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 38N -<32238> +proj=utm +zone=38 +ellps=WGS72 +units=m +no_defs <> +<32238> +proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 39N -<32239> +proj=utm +zone=39 +ellps=WGS72 +units=m +no_defs <> +<32239> +proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 40N -<32240> +proj=utm +zone=40 +ellps=WGS72 +units=m +no_defs <> +<32240> +proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 41N -<32241> +proj=utm +zone=41 +ellps=WGS72 +units=m +no_defs <> +<32241> +proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 42N -<32242> +proj=utm +zone=42 +ellps=WGS72 +units=m +no_defs <> +<32242> +proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 43N -<32243> +proj=utm +zone=43 +ellps=WGS72 +units=m +no_defs <> +<32243> +proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 44N -<32244> +proj=utm +zone=44 +ellps=WGS72 +units=m +no_defs <> +<32244> +proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 45N -<32245> +proj=utm +zone=45 +ellps=WGS72 +units=m +no_defs <> +<32245> +proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 46N -<32246> +proj=utm +zone=46 +ellps=WGS72 +units=m +no_defs <> +<32246> +proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 47N -<32247> +proj=utm +zone=47 +ellps=WGS72 +units=m +no_defs <> +<32247> +proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 48N -<32248> +proj=utm +zone=48 +ellps=WGS72 +units=m +no_defs <> +<32248> +proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 49N -<32249> +proj=utm +zone=49 +ellps=WGS72 +units=m +no_defs <> +<32249> +proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 50N -<32250> +proj=utm +zone=50 +ellps=WGS72 +units=m +no_defs <> +<32250> +proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 51N -<32251> +proj=utm +zone=51 +ellps=WGS72 +units=m +no_defs <> +<32251> +proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 52N -<32252> +proj=utm +zone=52 +ellps=WGS72 +units=m +no_defs <> +<32252> +proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 53N -<32253> +proj=utm +zone=53 +ellps=WGS72 +units=m +no_defs <> +<32253> +proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 54N -<32254> +proj=utm +zone=54 +ellps=WGS72 +units=m +no_defs <> +<32254> +proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 55N -<32255> +proj=utm +zone=55 +ellps=WGS72 +units=m +no_defs <> +<32255> +proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 56N -<32256> +proj=utm +zone=56 +ellps=WGS72 +units=m +no_defs <> +<32256> +proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 57N -<32257> +proj=utm +zone=57 +ellps=WGS72 +units=m +no_defs <> +<32257> +proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 58N -<32258> +proj=utm +zone=58 +ellps=WGS72 +units=m +no_defs <> +<32258> +proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 59N -<32259> +proj=utm +zone=59 +ellps=WGS72 +units=m +no_defs <> +<32259> +proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 60N -<32260> +proj=utm +zone=60 +ellps=WGS72 +units=m +no_defs <> +<32260> +proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 1S -<32301> +proj=utm +zone=1 +south +ellps=WGS72 +units=m +no_defs <> +<32301> +proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 2S -<32302> +proj=utm +zone=2 +south +ellps=WGS72 +units=m +no_defs <> +<32302> +proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 3S -<32303> +proj=utm +zone=3 +south +ellps=WGS72 +units=m +no_defs <> +<32303> +proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 4S -<32304> +proj=utm +zone=4 +south +ellps=WGS72 +units=m +no_defs <> +<32304> +proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 5S -<32305> +proj=utm +zone=5 +south +ellps=WGS72 +units=m +no_defs <> +<32305> +proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 6S -<32306> +proj=utm +zone=6 +south +ellps=WGS72 +units=m +no_defs <> +<32306> +proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 7S -<32307> +proj=utm +zone=7 +south +ellps=WGS72 +units=m +no_defs <> +<32307> +proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 8S -<32308> +proj=utm +zone=8 +south +ellps=WGS72 +units=m +no_defs <> +<32308> +proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 9S -<32309> +proj=utm +zone=9 +south +ellps=WGS72 +units=m +no_defs <> +<32309> +proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 10S -<32310> +proj=utm +zone=10 +south +ellps=WGS72 +units=m +no_defs <> +<32310> +proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 11S -<32311> +proj=utm +zone=11 +south +ellps=WGS72 +units=m +no_defs <> +<32311> +proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 12S -<32312> +proj=utm +zone=12 +south +ellps=WGS72 +units=m +no_defs <> +<32312> +proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 13S -<32313> +proj=utm +zone=13 +south +ellps=WGS72 +units=m +no_defs <> +<32313> +proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 14S -<32314> +proj=utm +zone=14 +south +ellps=WGS72 +units=m +no_defs <> +<32314> +proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 15S -<32315> +proj=utm +zone=15 +south +ellps=WGS72 +units=m +no_defs <> +<32315> +proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 16S -<32316> +proj=utm +zone=16 +south +ellps=WGS72 +units=m +no_defs <> +<32316> +proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 17S -<32317> +proj=utm +zone=17 +south +ellps=WGS72 +units=m +no_defs <> +<32317> +proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 18S -<32318> +proj=utm +zone=18 +south +ellps=WGS72 +units=m +no_defs <> +<32318> +proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 19S -<32319> +proj=utm +zone=19 +south +ellps=WGS72 +units=m +no_defs <> +<32319> +proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 20S -<32320> +proj=utm +zone=20 +south +ellps=WGS72 +units=m +no_defs <> +<32320> +proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 21S -<32321> +proj=utm +zone=21 +south +ellps=WGS72 +units=m +no_defs <> +<32321> +proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 22S -<32322> +proj=utm +zone=22 +south +ellps=WGS72 +units=m +no_defs <> +<32322> +proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 23S -<32323> +proj=utm +zone=23 +south +ellps=WGS72 +units=m +no_defs <> +<32323> +proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 24S -<32324> +proj=utm +zone=24 +south +ellps=WGS72 +units=m +no_defs <> +<32324> +proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 25S -<32325> +proj=utm +zone=25 +south +ellps=WGS72 +units=m +no_defs <> +<32325> +proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 26S -<32326> +proj=utm +zone=26 +south +ellps=WGS72 +units=m +no_defs <> +<32326> +proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 27S -<32327> +proj=utm +zone=27 +south +ellps=WGS72 +units=m +no_defs <> +<32327> +proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 28S -<32328> +proj=utm +zone=28 +south +ellps=WGS72 +units=m +no_defs <> +<32328> +proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 29S -<32329> +proj=utm +zone=29 +south +ellps=WGS72 +units=m +no_defs <> +<32329> +proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 30S -<32330> +proj=utm +zone=30 +south +ellps=WGS72 +units=m +no_defs <> +<32330> +proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 31S -<32331> +proj=utm +zone=31 +south +ellps=WGS72 +units=m +no_defs <> +<32331> +proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 32S -<32332> +proj=utm +zone=32 +south +ellps=WGS72 +units=m +no_defs <> +<32332> +proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 33S -<32333> +proj=utm +zone=33 +south +ellps=WGS72 +units=m +no_defs <> +<32333> +proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 34S -<32334> +proj=utm +zone=34 +south +ellps=WGS72 +units=m +no_defs <> +<32334> +proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 35S -<32335> +proj=utm +zone=35 +south +ellps=WGS72 +units=m +no_defs <> +<32335> +proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 36S -<32336> +proj=utm +zone=36 +south +ellps=WGS72 +units=m +no_defs <> +<32336> +proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 37S -<32337> +proj=utm +zone=37 +south +ellps=WGS72 +units=m +no_defs <> +<32337> +proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 38S -<32338> +proj=utm +zone=38 +south +ellps=WGS72 +units=m +no_defs <> +<32338> +proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 39S -<32339> +proj=utm +zone=39 +south +ellps=WGS72 +units=m +no_defs <> +<32339> +proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 40S -<32340> +proj=utm +zone=40 +south +ellps=WGS72 +units=m +no_defs <> +<32340> +proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 41S -<32341> +proj=utm +zone=41 +south +ellps=WGS72 +units=m +no_defs <> +<32341> +proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 42S -<32342> +proj=utm +zone=42 +south +ellps=WGS72 +units=m +no_defs <> +<32342> +proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 43S -<32343> +proj=utm +zone=43 +south +ellps=WGS72 +units=m +no_defs <> +<32343> +proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 44S -<32344> +proj=utm +zone=44 +south +ellps=WGS72 +units=m +no_defs <> +<32344> +proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 45S -<32345> +proj=utm +zone=45 +south +ellps=WGS72 +units=m +no_defs <> +<32345> +proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 46S -<32346> +proj=utm +zone=46 +south +ellps=WGS72 +units=m +no_defs <> +<32346> +proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 47S -<32347> +proj=utm +zone=47 +south +ellps=WGS72 +units=m +no_defs <> +<32347> +proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 48S -<32348> +proj=utm +zone=48 +south +ellps=WGS72 +units=m +no_defs <> +<32348> +proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 49S -<32349> +proj=utm +zone=49 +south +ellps=WGS72 +units=m +no_defs <> +<32349> +proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 50S -<32350> +proj=utm +zone=50 +south +ellps=WGS72 +units=m +no_defs <> +<32350> +proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 51S -<32351> +proj=utm +zone=51 +south +ellps=WGS72 +units=m +no_defs <> +<32351> +proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 52S -<32352> +proj=utm +zone=52 +south +ellps=WGS72 +units=m +no_defs <> +<32352> +proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 53S -<32353> +proj=utm +zone=53 +south +ellps=WGS72 +units=m +no_defs <> +<32353> +proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 54S -<32354> +proj=utm +zone=54 +south +ellps=WGS72 +units=m +no_defs <> +<32354> +proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 55S -<32355> +proj=utm +zone=55 +south +ellps=WGS72 +units=m +no_defs <> +<32355> +proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 56S -<32356> +proj=utm +zone=56 +south +ellps=WGS72 +units=m +no_defs <> +<32356> +proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 57S -<32357> +proj=utm +zone=57 +south +ellps=WGS72 +units=m +no_defs <> +<32357> +proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 58S -<32358> +proj=utm +zone=58 +south +ellps=WGS72 +units=m +no_defs <> +<32358> +proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 59S -<32359> +proj=utm +zone=59 +south +ellps=WGS72 +units=m +no_defs <> +<32359> +proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72 / UTM zone 60S -<32360> +proj=utm +zone=60 +south +ellps=WGS72 +units=m +no_defs <> +<32360> +proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs <> # WGS 72BE / UTM zone 1N <32401> +proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 2N @@ -7368,264 +8201,264 @@ # Unable to translate coordinate system EPSG:32600 into PROJ.4 format. # # WGS 84 / UTM zone 1N -<32601> +proj=utm +zone=1 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32601> +proj=utm +zone=1 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 2N -<32602> +proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32602> +proj=utm +zone=2 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 3N -<32603> +proj=utm +zone=3 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32603> +proj=utm +zone=3 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 4N -<32604> +proj=utm +zone=4 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32604> +proj=utm +zone=4 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 5N -<32605> +proj=utm +zone=5 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32605> +proj=utm +zone=5 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 6N -<32606> +proj=utm +zone=6 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32606> +proj=utm +zone=6 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 7N -<32607> +proj=utm +zone=7 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32607> +proj=utm +zone=7 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 8N -<32608> +proj=utm +zone=8 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32608> +proj=utm +zone=8 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 9N -<32609> +proj=utm +zone=9 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32609> +proj=utm +zone=9 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 10N -<32610> +proj=utm +zone=10 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32610> +proj=utm +zone=10 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 11N -<32611> +proj=utm +zone=11 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32611> +proj=utm +zone=11 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 12N -<32612> +proj=utm +zone=12 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32612> +proj=utm +zone=12 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 13N -<32613> +proj=utm +zone=13 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32613> +proj=utm +zone=13 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 14N -<32614> +proj=utm +zone=14 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32614> +proj=utm +zone=14 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 15N -<32615> +proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32615> +proj=utm +zone=15 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 16N -<32616> +proj=utm +zone=16 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32616> +proj=utm +zone=16 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 17N -<32617> +proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32617> +proj=utm +zone=17 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 18N -<32618> +proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32618> +proj=utm +zone=18 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 19N -<32619> +proj=utm +zone=19 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32619> +proj=utm +zone=19 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 20N -<32620> +proj=utm +zone=20 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32620> +proj=utm +zone=20 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 21N -<32621> +proj=utm +zone=21 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32621> +proj=utm +zone=21 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 22N -<32622> +proj=utm +zone=22 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32622> +proj=utm +zone=22 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 23N -<32623> +proj=utm +zone=23 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32623> +proj=utm +zone=23 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 24N -<32624> +proj=utm +zone=24 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32624> +proj=utm +zone=24 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 25N -<32625> +proj=utm +zone=25 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32625> +proj=utm +zone=25 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 26N -<32626> +proj=utm +zone=26 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32626> +proj=utm +zone=26 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 27N -<32627> +proj=utm +zone=27 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32627> +proj=utm +zone=27 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 28N -<32628> +proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32628> +proj=utm +zone=28 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 29N -<32629> +proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32629> +proj=utm +zone=29 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 30N -<32630> +proj=utm +zone=30 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32630> +proj=utm +zone=30 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 31N -<32631> +proj=utm +zone=31 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32631> +proj=utm +zone=31 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 32N -<32632> +proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32632> +proj=utm +zone=32 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 33N -<32633> +proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32633> +proj=utm +zone=33 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 34N -<32634> +proj=utm +zone=34 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32634> +proj=utm +zone=34 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 35N -<32635> +proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32635> +proj=utm +zone=35 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 36N -<32636> +proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32636> +proj=utm +zone=36 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 37N -<32637> +proj=utm +zone=37 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32637> +proj=utm +zone=37 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 38N -<32638> +proj=utm +zone=38 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32638> +proj=utm +zone=38 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 39N -<32639> +proj=utm +zone=39 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32639> +proj=utm +zone=39 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 40N -<32640> +proj=utm +zone=40 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32640> +proj=utm +zone=40 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 41N -<32641> +proj=utm +zone=41 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32641> +proj=utm +zone=41 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 42N -<32642> +proj=utm +zone=42 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32642> +proj=utm +zone=42 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 43N -<32643> +proj=utm +zone=43 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32643> +proj=utm +zone=43 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 44N -<32644> +proj=utm +zone=44 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32644> +proj=utm +zone=44 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 45N -<32645> +proj=utm +zone=45 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32645> +proj=utm +zone=45 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 46N -<32646> +proj=utm +zone=46 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32646> +proj=utm +zone=46 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 47N -<32647> +proj=utm +zone=47 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32647> +proj=utm +zone=47 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 48N -<32648> +proj=utm +zone=48 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32648> +proj=utm +zone=48 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 49N -<32649> +proj=utm +zone=49 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32649> +proj=utm +zone=49 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 50N -<32650> +proj=utm +zone=50 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32650> +proj=utm +zone=50 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 51N -<32651> +proj=utm +zone=51 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32651> +proj=utm +zone=51 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 52N -<32652> +proj=utm +zone=52 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32652> +proj=utm +zone=52 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 53N -<32653> +proj=utm +zone=53 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32653> +proj=utm +zone=53 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 54N -<32654> +proj=utm +zone=54 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32654> +proj=utm +zone=54 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 55N -<32655> +proj=utm +zone=55 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32655> +proj=utm +zone=55 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 56N -<32656> +proj=utm +zone=56 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32656> +proj=utm +zone=56 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 57N -<32657> +proj=utm +zone=57 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32657> +proj=utm +zone=57 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 58N -<32658> +proj=utm +zone=58 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32658> +proj=utm +zone=58 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 59N -<32659> +proj=utm +zone=59 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32659> +proj=utm +zone=59 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 60N -<32660> +proj=utm +zone=60 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UPS North -<32661> +proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32660> +proj=utm +zone=60 +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UPS North (N,E) +<32661> +proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs <> # WGS 84 / Plate Carree (deprecated) -<32662> +proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32662> +proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs <> # WGS 84 / World Equidistant Cylindrical (deprecated) # Unable to translate coordinate system EPSG:32663 into PROJ.4 format. # # WGS 84 / BLM 14N (ftUS) -<32664> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +no_defs <> +<32664> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs <> # WGS 84 / BLM 15N (ftUS) -<32665> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +no_defs <> +<32665> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs <> # WGS 84 / BLM 16N (ftUS) -<32666> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +no_defs <> +<32666> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs <> # WGS 84 / BLM 17N (ftUS) -<32667> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +no_defs <> +<32667> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs <> # WGS 84 / UTM grid system (southern hemisphere) # Unable to translate coordinate system EPSG:32700 into PROJ.4 format. # # WGS 84 / UTM zone 1S -<32701> +proj=utm +zone=1 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32701> +proj=utm +zone=1 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 2S -<32702> +proj=utm +zone=2 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32702> +proj=utm +zone=2 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 3S -<32703> +proj=utm +zone=3 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32703> +proj=utm +zone=3 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 4S -<32704> +proj=utm +zone=4 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32704> +proj=utm +zone=4 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 5S -<32705> +proj=utm +zone=5 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32705> +proj=utm +zone=5 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 6S -<32706> +proj=utm +zone=6 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32706> +proj=utm +zone=6 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 7S -<32707> +proj=utm +zone=7 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32707> +proj=utm +zone=7 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 8S -<32708> +proj=utm +zone=8 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32708> +proj=utm +zone=8 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 9S -<32709> +proj=utm +zone=9 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32709> +proj=utm +zone=9 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 10S -<32710> +proj=utm +zone=10 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32710> +proj=utm +zone=10 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 11S -<32711> +proj=utm +zone=11 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32711> +proj=utm +zone=11 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 12S -<32712> +proj=utm +zone=12 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32712> +proj=utm +zone=12 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 13S -<32713> +proj=utm +zone=13 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32713> +proj=utm +zone=13 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 14S -<32714> +proj=utm +zone=14 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32714> +proj=utm +zone=14 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 15S -<32715> +proj=utm +zone=15 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32715> +proj=utm +zone=15 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 16S -<32716> +proj=utm +zone=16 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32716> +proj=utm +zone=16 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 17S -<32717> +proj=utm +zone=17 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32717> +proj=utm +zone=17 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 18S -<32718> +proj=utm +zone=18 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32718> +proj=utm +zone=18 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 19S -<32719> +proj=utm +zone=19 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32719> +proj=utm +zone=19 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 20S -<32720> +proj=utm +zone=20 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32720> +proj=utm +zone=20 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 21S -<32721> +proj=utm +zone=21 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32721> +proj=utm +zone=21 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 22S -<32722> +proj=utm +zone=22 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32722> +proj=utm +zone=22 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 23S -<32723> +proj=utm +zone=23 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32723> +proj=utm +zone=23 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 24S -<32724> +proj=utm +zone=24 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32724> +proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 25S -<32725> +proj=utm +zone=25 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32725> +proj=utm +zone=25 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 26S -<32726> +proj=utm +zone=26 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32726> +proj=utm +zone=26 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 27S -<32727> +proj=utm +zone=27 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32727> +proj=utm +zone=27 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 28S -<32728> +proj=utm +zone=28 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32728> +proj=utm +zone=28 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 29S -<32729> +proj=utm +zone=29 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32729> +proj=utm +zone=29 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 30S -<32730> +proj=utm +zone=30 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32730> +proj=utm +zone=30 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 31S -<32731> +proj=utm +zone=31 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32731> +proj=utm +zone=31 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 32S -<32732> +proj=utm +zone=32 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32732> +proj=utm +zone=32 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 33S -<32733> +proj=utm +zone=33 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32733> +proj=utm +zone=33 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 34S -<32734> +proj=utm +zone=34 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32734> +proj=utm +zone=34 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 35S -<32735> +proj=utm +zone=35 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32735> +proj=utm +zone=35 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 36S -<32736> +proj=utm +zone=36 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32736> +proj=utm +zone=36 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 37S -<32737> +proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32737> +proj=utm +zone=37 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 38S -<32738> +proj=utm +zone=38 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32738> +proj=utm +zone=38 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 39S -<32739> +proj=utm +zone=39 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32739> +proj=utm +zone=39 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 40S -<32740> +proj=utm +zone=40 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32740> +proj=utm +zone=40 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 41S -<32741> +proj=utm +zone=41 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32741> +proj=utm +zone=41 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 42S -<32742> +proj=utm +zone=42 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32742> +proj=utm +zone=42 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 43S -<32743> +proj=utm +zone=43 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32743> +proj=utm +zone=43 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 44S -<32744> +proj=utm +zone=44 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32744> +proj=utm +zone=44 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 45S -<32745> +proj=utm +zone=45 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32745> +proj=utm +zone=45 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 46S -<32746> +proj=utm +zone=46 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32746> +proj=utm +zone=46 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 47S -<32747> +proj=utm +zone=47 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32747> +proj=utm +zone=47 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 48S -<32748> +proj=utm +zone=48 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32748> +proj=utm +zone=48 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 49S -<32749> +proj=utm +zone=49 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32749> +proj=utm +zone=49 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 50S -<32750> +proj=utm +zone=50 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32750> +proj=utm +zone=50 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 51S -<32751> +proj=utm +zone=51 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32751> +proj=utm +zone=51 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 52S -<32752> +proj=utm +zone=52 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32752> +proj=utm +zone=52 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 53S -<32753> +proj=utm +zone=53 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32753> +proj=utm +zone=53 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 54S -<32754> +proj=utm +zone=54 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32754> +proj=utm +zone=54 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 55S -<32755> +proj=utm +zone=55 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32755> +proj=utm +zone=55 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 56S -<32756> +proj=utm +zone=56 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32756> +proj=utm +zone=56 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 57S -<32757> +proj=utm +zone=57 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32757> +proj=utm +zone=57 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 58S -<32758> +proj=utm +zone=58 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32758> +proj=utm +zone=58 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 59S -<32759> +proj=utm +zone=59 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32759> +proj=utm +zone=59 +south +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 60S -<32760> +proj=utm +zone=60 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> -# WGS 84 / UPS South -<32761> +proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32760> +proj=utm +zone=60 +south +datum=WGS84 +units=m +no_defs <> +# WGS 84 / UPS South (N,E) +<32761> +proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs <> # WGS 84 / TM 36 SE -<32766> +proj=tmerc +lat_0=0 +lon_0=36 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> +<32766> +proj=tmerc +lat_0=0 +lon_0=36 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs <> diff --git a/lib/mpl_toolkits/basemap/data/esri.extra b/lib/mpl_toolkits/basemap/data/esri.extra index 2514b33c9..611dd660d 100644 --- a/lib/mpl_toolkits/basemap/data/esri.extra +++ b/lib/mpl_toolkits/basemap/data/esri.extra @@ -946,7 +946,3 @@ <104304> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <> # GCS Voirol Unifie 1960 Degree <104305> +proj=longlat +ellps=clrk80 no_defs <> -# -# Chris' funny epsgish code for the google mercator -# -<900913> +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs <> diff --git a/lib/mpl_toolkits/basemap/data/other.extra b/lib/mpl_toolkits/basemap/data/other.extra index 168525d22..39c27e273 100644 --- a/lib/mpl_toolkits/basemap/data/other.extra +++ b/lib/mpl_toolkits/basemap/data/other.extra @@ -47,3 +47,7 @@ <42310> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0 +ellps=GRS80 +datum=WGS84 +units=m +no_defs no_defs <> # NAD83 / LCC Statcan <42311> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666700000001 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> +# +# Funny epsgish code for google mercator - you should really use EPSG:3857 +# +<900913> +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs <> diff --git a/lib/mpl_toolkits/basemap/data/test27 b/lib/mpl_toolkits/basemap/data/test27 index cd25621db..583f6032f 100755 --- a/lib/mpl_toolkits/basemap/data/test27 +++ b/lib/mpl_toolkits/basemap/data/test27 @@ -16,13 +16,12 @@ usage() } if test -z "${EXE}"; then - echo "*** ERROR: Missing path to 'proj' program." - usage -else - if test ! -x ${EXE}; then - echo "*** ERROR: Can not find '${EXE}' program!" - exit 1 - fi + EXE=../src/cs2cs +fi + +if test ! -x ${EXE}; then + echo "*** ERROR: Can not find '${EXE}' program!" + exit 1 fi echo "============================================" diff --git a/lib/mpl_toolkits/basemap/data/test83 b/lib/mpl_toolkits/basemap/data/test83 index 2927dc76d..2de16ab7a 100755 --- a/lib/mpl_toolkits/basemap/data/test83 +++ b/lib/mpl_toolkits/basemap/data/test83 @@ -17,13 +17,12 @@ usage() } if test -z "${EXE}"; then - echo "*** ERROR: Missing path to 'proj' program." - usage -else - if test ! -x ${EXE}; then - echo "*** ERROR: Can not find '${EXE}' program!" - exit 1 - fi + EXE=../src/cs2cs +fi + +if test ! -x ${EXE}; then + echo "*** ERROR: Can not find '${EXE}' program!" + exit 1 fi echo "============================================" diff --git a/lib/mpl_toolkits/basemap/data/testntv2 b/lib/mpl_toolkits/basemap/data/testntv2 index 096f4bbbe..4a4cfb28c 100755 --- a/lib/mpl_toolkits/basemap/data/testntv2 +++ b/lib/mpl_toolkits/basemap/data/testntv2 @@ -13,13 +13,12 @@ usage() } if test -z "${EXE}"; then - echo "*** ERROR: Missing path to 'cs2cs' program." - usage -else - if test ! -x ${EXE}; then - echo "*** ERROR: Can not find '${EXE}' program!" - exit 1 - fi + EXE=../src/cs2cs +fi + +if test ! -x ${EXE}; then + echo "*** ERROR: Can not find '${EXE}' program!" + exit 1 fi echo "============================================" diff --git a/lib/mpl_toolkits/basemap/data/testvarious b/lib/mpl_toolkits/basemap/data/testvarious index e329778bc..3505dd165 100755 --- a/lib/mpl_toolkits/basemap/data/testvarious +++ b/lib/mpl_toolkits/basemap/data/testvarious @@ -13,13 +13,12 @@ usage() } if test -z "${EXE}"; then - echo "*** ERROR: Missing path to 'cs2cs' program." - usage -else - if test ! -x ${EXE}; then - echo "*** ERROR: Can not find '${EXE}' program!" - exit 1 - fi + EXE=../src/cs2cs +fi + +if test ! -x ${EXE}; then + echo "*** ERROR: Can not find '${EXE}' program!" + exit 1 fi echo "============================================" @@ -82,6 +81,22 @@ $EXE +proj=latlong +datum=WGS84 +pm=greenwich \ EOF # echo "##############################################################" >> ${OUT} +echo Test support for the lon_wrap switch. >> ${OUT} +# +$EXE +proj=latlong +datum=WGS84 \ + +to +proj=latlong +datum=WGS84 +lon_wrap=180 \ + -E >>${OUT} <> ${OUT} echo Test simple prime meridian handling within a projection. >> ${OUT} # $EXE +proj=utm +zone=11 +datum=WGS84 +pm=3 \ @@ -95,10 +110,10 @@ echo Test geocentric x/y/z generation. >> ${OUT} $EXE +proj=latlong +datum=WGS84 \ +to +proj=geocent +datum=WGS84 \ -E >>${OUT} <> ${OUT} @@ -151,6 +166,136 @@ $EXE +proj=kav5 +ellps=WGS84 +units=m \ 383646.088858 5997047.888175 EOF # +echo "##############################################################" >> ${OUT} +echo "Test RSO Borneo projection (re: ticket 62)" >> ${OUT} +# +$EXE +proj=latlong +a=6377298.556 +rf=300.8017 \ + +to +proj=omerc +a=6377298.556 +rf=300.8017 +lat_0=4 +lonc=115 \ + +alpha=53d18\'56.9537 +gamma=53d7\'48.3685 +k_0=0.99984 \ + +x_0=590476.87 +y_0=442857.65 \ + -E >>${OUT} <> ${OUT} +echo "Test extended transverse mercator (#97)" >> ${OUT} +# +$EXE +proj=etmerc +k=0.998 +lon_0=-20 +datum=WGS84 +x_0=10000 +y_0=20000 \ + +to +proj=latlong +datum=WGS84 \ + -E >>${OUT} <> ${OUT} +echo "Test extended transverse mercator inverse (#97)" >> ${OUT} +# +$EXE +proj=latlong +datum=WGS84 \ + +to +proj=etmerc +k=0.998 +lon_0=-20 +datum=WGS84 +x_0=10000 +y_0=20000 \ + -E >>${OUT} <> ${OUT} +echo "Test transverse mercator (#97)" >> ${OUT} +# +$EXE +proj=tmerc +k=0.998 +lon_0=-20 +datum=WGS84 +x_0=10000 +y_0=20000 \ + +to +proj=latlong +datum=WGS84 \ + -E >>${OUT} <> ${OUT} +echo "Test transverse mercator inverse (#97)" >> ${OUT} +# +$EXE +proj=latlong +datum=WGS84 \ + +to +proj=tmerc +k=0.998 +lon_0=-20 +datum=WGS84 +x_0=10000 +y_0=20000 \ + -E >>${OUT} <> ${OUT} +echo "Test robinson projection (#113)" >> ${OUT} +# +$EXE +proj=latlong +datum=WGS84 \ + +to +proj=robin +datum=WGS84 \ + -E >>${OUT} <> ${OUT} +echo "Test forward projection on sphere" >> ${OUT} +$EXE +proj=latlong +a=1 +lon_0=0 \ + +to +proj=healpix +a=1 +lon_0=0 -f '%.'5'f' \ + -E >>${OUT} <> ${OUT} +$EXE +proj=latlong +a=1 +lon_0=0 \ + +to +proj=healpix +a=1 +lon_0=0 -f '%.'5'f' -I\ + -E >>${OUT} <> ${OUT} +$EXE +proj=latlong +a=1 +lon_0=0 +ellps=WGS84 \ + +to +proj=healpix +a=1 +lon_0=0 +ellps=WGS84 -f '%.'5'f' \ + -E >>${OUT} <> ${OUT} +$EXE +proj=latlong +a=1 +lon_0=0 +ellps=WGS84 \ + +to +proj=healpix +a=1 +lon_0=0 +ellps=WGS84 -f '%.'5'f' -I\ + -E >>${OUT} <> ${OUT} +echo "Test forward projection on sphere" >> ${OUT} +$EXE +proj=latlong +a=1 +lon_0=0 \ + +to +proj=rhealpix +a=1 +lon_0=0 +npole=0 +spole=0 -f '%.'5'f' \ + -E >>${OUT} <> ${OUT} +$EXE +proj=latlong +a=1 +lon_0=0 \ + +to +proj=rhealpix +a=1 +lon_0=0 +npole=0 +spole=0 -f '%.'5'f' -I\ + -E >>${OUT} <> ${OUT} +$EXE +proj=latlong +a=1 +lon_0=0 +ellps=WGS84 \ + +to +proj=rhealpix +a=1 +lon_0=0 +ellps=WGS84 +npole=0 +spole=0 -f '%.'5'f' \ + -E >>${OUT} <> ${OUT} +$EXE +proj=latlong +a=1 +lon_0=0 +ellps=WGS84 \ + +to +proj=rhealpix +a=1 +lon_0=0 -I +ellps=WGS84 +npole=0 +spole=0 -f '%.'5'f'\ + -E >>${OUT} < Date: Fri, 16 Dec 2011 10:02:32 -0700 Subject: [PATCH 04/14] update to pyproj 1.9.0 --- lib/mpl_toolkits/basemap/data/IGNF | 487 ++++++++++++++++++ lib/mpl_toolkits/basemap/data/ntf_r93.gsb | Bin 0 -> 277424 bytes lib/mpl_toolkits/basemap/data/ntv1_can.dat | Bin 0 -> 1113184 bytes .../basemap/data/nzgd2kgrid0005.gsb | Bin 0 -> 318464 bytes .../basemap/data/proj_outIGNF.dist | 40 ++ lib/mpl_toolkits/basemap/data/testIGNF | 166 ++++++ lib/mpl_toolkits/basemap/data/testdatumfile | 88 ++++ lib/mpl_toolkits/basemap/data/tv_out.dist | 112 ++++ 8 files changed, 893 insertions(+) create mode 100644 lib/mpl_toolkits/basemap/data/IGNF create mode 100644 lib/mpl_toolkits/basemap/data/ntf_r93.gsb create mode 100644 lib/mpl_toolkits/basemap/data/ntv1_can.dat create mode 100644 lib/mpl_toolkits/basemap/data/nzgd2kgrid0005.gsb create mode 100644 lib/mpl_toolkits/basemap/data/proj_outIGNF.dist create mode 100755 lib/mpl_toolkits/basemap/data/testIGNF create mode 100755 lib/mpl_toolkits/basemap/data/testdatumfile create mode 100644 lib/mpl_toolkits/basemap/data/tv_out.dist diff --git a/lib/mpl_toolkits/basemap/data/IGNF b/lib/mpl_toolkits/basemap/data/IGNF new file mode 100644 index 000000000..5a5d559ad --- /dev/null +++ b/lib/mpl_toolkits/basemap/data/IGNF @@ -0,0 +1,487 @@ +# W [AMANU49] +# W [AMANU63] + +title=Ile d'Amsterdam 1963 +proj=geocent +towgs84=109.7530,-528.1330,-362.2440 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [ANAA47] + +title=MOP92 (Anaa) Tuamotu +proj=geocent +towgs84=1.5000,3.8400,4.8100 +a=6378137.0000 +rf=298.2572235630000 +units=m +no_defs <> +# W [APAT48] +# W [APAT49] + +title=MOP86 (Apataki, Rapa, Hao) Tuamotu +proj=geocent +towgs84=216.8400,118.8100,19.6100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Ancienne Triangulation des Ingenieurs +proj=geocent +towgs84=1127.0000,22.0000,57.0000 +a=6376523.0000 +rf=308.6400000000000 +units=m +no_defs <> +# W [BASSAS] +# W [BIEN55] + +title=Cadastre 1997 +proj=geocent +towgs84=-381.7880,-57.5010,-256.6730 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [CADA80] +# W [CASS1733] + +title=CIO-BIH +proj=geocent +towgs84=0.0000,0.0000,0.5000,0.0000,0.0000,0.0140,-0.100000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> +# W [CLIP67] + +title=Crozet 1963 +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Guyane CSG67 +proj=geocent +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=ED50 +proj=geocent +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=EFATE-IGN 1957 +proj=geocent +towgs84=-127.0000,-769.0000,472.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Systeme de reference terrestre Europeen (1989) +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> +# W [EUROPA54] +# W [FAKA50] +# W [FANGA50] +# W [FANGA64] +# W [FANGA651] +# W [FANGA652] +# W [FANGA66] + +title=MOP84 (Fangataufa 1984) +proj=geocent +towgs84=150.5700,158.3300,118.3200 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [GLOR77CAR] + +title=Guadeloupe Ste Anne +proj=geocent +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Guadeloupe Fort Marigot +proj=geocent +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [HAO49] +# W [HAO58] +# W [HAO67] +# W [HARA49] +# W [HIKU50] +# W [HIVA60] +# W [HIVA67] + +title=IGN 1963 (Hiva Oa, Tahuata, Mohotani) +proj=geocent +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=IGN 1972 Grande-Terre / Ile des Pins +proj=geocent +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [JULES55] + +title=MHPF70 (Kauehi) Tuamotu +proj=geocent +towgs84=126.7400,300.1000,-75.4900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Kerguelen - K0 +proj=geocent +towgs84=144.8990,-186.7700,100.9230 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Lifou - Iles Loyaute (IGN56) +proj=geocent +towgs84=336.0000,223.0000,-231.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Nouvelle Triangulation du Grand Duche du Luxembourg +proj=geocent +towgs84=-192.9860,13.6730,-39.3090,-0.4099,-2.9332,2.6881,0.430000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [MAKE50] +# W [MANGA51] + +title=Mare - Iles Loyaute (IGN53) +proj=geocent +towgs84=287.0000,178.0000,-136.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=IGN 1972 (Eiao, Hiva Oa, Mohotani) Marquises +proj=geocent +towgs84=327.8400,-14.9600,59.3300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Martinique Fort-Desaix +proj=geocent +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [MAUPITI] + +title=Mayotte Combani +proj=geocent +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=MHEFO 1955 (Fatu Huku) +proj=geocent +towgs84=347.1030,1078.1250,2623.9220,33.8875,-70.6773,9.3943,186.074000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [MHEFO55M] + +title=MHPF67 (Mangareva, Agakauitai, Aukena, Mekiro) Gambiers (Iles) +proj=geocent +towgs84=338.0800,212.5800,-296.1700 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Moorea 1987 +proj=geocent +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=MOP90 (Tetiaroa) Iles de la Societe +proj=geocent +towgs84=217.0370,86.9590,23.9560 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [MURU51] +# W [MURU59] +# W [MURU62] +# W [MURU78] +# W [NC51] +# W [NOVA53] + +title=Nouvelle Triangulation Francaise +proj=geocent +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +units=m +no_defs <> + +title=IGN 1972 Nuku Hiva +proj=geocent +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=SAT94 (Nukutavake) Tuamotu +proj=geocent +towgs84=197.1600,200.1700,-48.0800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Ouvea - Iles Loyaute (MHNC 1972 - OUVEA) +proj=geocent +towgs84=-13.0000,-348.0000,292.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Petrels - IGN 1972 +proj=geocent +towgs84=365.0000,194.0000,166.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [PMAR55] + +title=IGN53 (IGN Raiatea-Tahaa) Raiatea-Tahaa-Bora Bora-Huahine +proj=geocent +towgs84=65.0300,341.5500,76.6700 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [RAIV54] +# W [RAIV66] +# W [RANGI47] +# W [RANGI59] +# W [RANGI68] +# W [RAPA55] +# W [RAPA80] + +title=Reunion 1947 +proj=geocent +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [REUN49] +# W [REUN92] + +title=Reseau geodesique francais 1993 +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=Reseau geodesique francais de Guyane 1995 +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=RGM04 (Reseau Geodesique de Mayotte 2004) +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=Reseau Geodesique de Nouvelle-Caledonie +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=RGPF (Reseau Geodesique de Polynesie Francaise) +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=Reseau geodesique Reunion 1992 +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=Reseau Geodesique Saint-Pierre-et-Miquelon (2006) +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=Reseau Geodesique des TAAF (2007) +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=RRAF 1991 (Reseau de Reference des Antilles Francaises) +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=SAT84 (Rurutu) Iles Australes +proj=geocent +towgs84=202.1300,174.6000,-15.7400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=SHOM 1984 Martinique Montagne Du Vauclin +proj=geocent +towgs84=189.5060,486.5470,148.7830 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Ile de Saint-Paul 1969 +proj=geocent +towgs84=225.5710,-346.6080,-46.5670 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=St Pierre et Miquelon 1950 +proj=geocent +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +units=m +no_defs <> +# W [SYSLNCAR] + +title=Raiatea - Tahaa 51-54 (Tahaa, Base Terme Est) +proj=geocent +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Tahiti-Terme Nord 1951 +proj=geocent +towgs84=162.0000,117.0000,154.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=IGN79 (Tahiti) Iles de la Societe +proj=geocent +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [TAKA69] + +title=Tanna Bloc Sud +proj=geocent +towgs84=-139.0000,-967.0000,436.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Pointe Geologie - Perroud 1950 +proj=geocent +towgs84=324.9120,153.2820,172.0260 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [TIKE50] +# W [TIKE60] +# W [TROM56] + +title=MHPF 1969 (Tubuai) Iles Australes +proj=geocent +towgs84=237.1700,171.6100,-77.8400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [TURI69] +# W [WALL76] + +title=Wallis-Uvea 1978 (MOP78) +proj=geocent +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=World Geodetic System 1972 +proj=geocent +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +units=m +no_defs <> + +title=World Geodetic System 1984 +proj=geocent +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> +# W [AMANU49GEO] +# W [AMANU63GEO] + +title=Ile d'Amsterdam 1963 +proj=longlat +towgs84=109.7530,-528.1330,-362.2440 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [ANAA47GEO] + +title=MOP92 (Anaa) Tuamotu +proj=longlat +towgs84=1.5000,3.8400,4.8100 +a=6378137.0000 +rf=298.2572235630000 +units=m +no_defs <> +# W [APAT48GEO] +# W [APAT49GEO] + +title=MOP86 (Apataki, Rapa, Hao) Tuamotu +proj=longlat +towgs84=216.8400,118.8100,19.6100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Ancienne Triangulation des Ingenieurs +proj=longlat +towgs84=1127.0000,22.0000,57.0000 +a=6376523.0000 +rf=308.6400000000000 +units=m +no_defs <> +# W [BASSASGEO] +# W [BIEN55GEO] + +title=Cadastre 1997 +proj=longlat +towgs84=-381.7880,-57.5010,-256.6730 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [CADA80GEO] +# W [CASS1733GEO] +# W [CLIP67GEO] + +title=Crozet 1963 +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Guyane CSG67 +proj=longlat +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=ED50 +proj=longlat +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=EFATE-IGN 1957 +proj=longlat +towgs84=-127.0000,-769.0000,472.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=ETRS89 geographiques (dms) +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> +# W [EUROPA54GEO] +# W [FAKA50GEO] +# W [FANGA50GEO] +# W [FANGA64GEO] +# W [FANGA651GEO] +# W [FANGA652GEO] +# W [FANGA66GEO] + +title=MOP84 (Fangataufa 1984) +proj=longlat +towgs84=150.5700,158.3300,118.3200 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [GLOR77GEO] + +title=Guadeloupe Ste Anne +proj=longlat +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Guadeloupe Fort Marigot +proj=longlat +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [HAO49GEO] +# W [HAO58GEO] +# W [HAO67GEO] +# W [HARA49GEO] +# W [HIKU50GEO] +# W [HIVA60GEO] +# W [HIVA67GEO] + +title=IGN 1963 (Hiva Oa, Tahuata, Mohotani) +proj=longlat +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=IGN 1972 Grande-Terre / Ile des Pins +proj=longlat +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [JULES55GEO] + +title=MHPF70 (Kauehi) Tuamotu +proj=longlat +towgs84=126.7400,300.1000,-75.4900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Kerguelen - K0 +proj=longlat +towgs84=144.8990,-186.7700,100.9230 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Lifou - Iles Loyaute (IGN56) +proj=longlat +towgs84=336.0000,223.0000,-231.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Nouvelle Triangulation du Grand Duche du Luxembourg +proj=longlat +towgs84=-192.9860,13.6730,-39.3090,-0.4099,-2.9332,2.6881,0.430000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [MAKE50GEO] +# W [MANGA51GEO] + +title=Mare - Iles Loyaute (IGN53) +proj=longlat +towgs84=287.0000,178.0000,-136.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=IGN 1972 (Eiao, Hiva Oa, Mohotani) Marquises +proj=longlat +towgs84=327.8400,-14.9600,59.3300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Martinique Fort-Desaix +proj=longlat +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [MAUPITIGEO] + +title=Mayotte Combani +proj=longlat +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=MHEFO 1955 (Fatu Huku) +proj=longlat +towgs84=347.1030,1078.1250,2623.9220,33.8875,-70.6773,9.3943,186.074000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [MHEFO55MGEO] + +title=MHPF67 (Mangareva, Agakauitai, Aukena, Mekiro) Gambiers (Iles) +proj=longlat +towgs84=338.0800,212.5800,-296.1700 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Moorea 1987 +proj=longlat +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=MOP90 (Tetiaroa) Iles de la Societe +proj=longlat +towgs84=217.0370,86.9590,23.9560 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [MURU51GEO] +# W [MURU59GEO] +# W [MURU62GEO] +# W [MURU78GEO] +# W [NC51GEO] +# W [NOVA53GEO] + +title=Nouvelle Triangulation Francaise Greenwich degres sexagesimaux +proj=longlat +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +units=m +no_defs <> + +title=Nouvelle Triangulation Francaise Paris grades +proj=longlat +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +units=m +no_defs <> + +title=IGN 1972 Nuku Hiva +proj=longlat +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=SAT94 (Nukutavake) Tuamotu +proj=longlat +towgs84=197.1600,200.1700,-48.0800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Ouvea - Iles Loyaute (MHNC 1972 - OUVEA) +proj=longlat +towgs84=-13.0000,-348.0000,292.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [PMAR55GEO] + +title=IGN53 (IGN Raiatea-Tahaa) Raiatea-Tahaa-Bora Bora-Huahine +proj=longlat +towgs84=65.0300,341.5500,76.6700 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [RAIV54GEO] +# W [RAIV66GEO] +# W [RANGI47GEO] +# W [RANGI59GEO] +# W [RANGI68GEO] +# W [RAPA55GEO] +# W [RAPA80GEO] + +title=Reunion 1947 +proj=longlat +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [REUN49GEO] +# W [REUN92GEO] + +title=Reseau geodesique francais 1993 +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=Reseau geodesique francais de Guyane 1995 +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=RGM04 (Reseau Geodesique de Mayotte 2004) +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=Reseau Geodesique de Nouvelle-Caledonie +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=RGPF (Reseau Geodesique de Polynesie Francaise) +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=Reseau geodesique de la Reunion 1992 +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=Saint-Pierre-et-Miquelon (2006) +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=Reseau Geodesique des TAAF (2007) (dms) +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=SAT84 (Rurutu) Iles Australes +proj=longlat +towgs84=202.1300,174.6000,-15.7400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=SHOM 1984 Martinique Montagne Du Vauclin +proj=longlat +towgs84=189.5060,486.5470,148.7830 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Ile de Saint-Paul 1969 +proj=longlat +towgs84=225.5710,-346.6080,-46.5670 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=St Pierre et Miquelon 1950 +proj=longlat +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +units=m +no_defs <> +# W [SYSLNGEO] + +title=Raiatea - Tahaa 51-54 (Tahaa, Base Terme Est) +proj=longlat +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Tahiti-Terme Nord 1951 +proj=longlat +towgs84=162.0000,117.0000,154.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=IGN79 (Tahiti) Iles de la Societe +proj=longlat +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [TAKA69GEO] + +title=Tanna Bloc Sud +proj=longlat +towgs84=-139.0000,-967.0000,436.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=Pointe Geologie - Perroud 1950 +proj=longlat +towgs84=324.9120,153.2820,172.0260 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [TIKE50GEO] +# W [TIKE60GEO] +# W [TROM56GEO] + +title=MHPF 1969 (Tubuai) Iles Australes +proj=longlat +towgs84=237.1700,171.6100,-77.8400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> +# W [TURI69GEO] +# W [VAITAPEGEO] +# W [WALL76GEO] + +title=Wallis - Uvea 1978 (MOP78) +proj=longlat +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <> + +title=WGS72 +proj=longlat +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +units=m +no_defs <> + +title=World Geodetic System 1984 +proj=longlat +a=6378137.0000 +rf=298.2572221010000 +units=m +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +no_defs <> + +title=Reseau de reference des Antilles francaises (1988-1991) +proj=longlat +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> + +title=Systeme CIO-BIH +proj=longlat +towgs84=0.0000,0.0000,0.5000,0.0000,0.0000,0.0140,-0.100000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <> +# W [AMANU63UTM7S] + +title=Amsterdam 1963 +proj=tmerc +towgs84=109.7530,-528.1330,-362.2440 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> +# W [ANAA47UTM6S] + +title=MOP92 (Anaa) Tuamotu - UTM fuseau 6 Sud +proj=tmerc +towgs84=1.5000,3.8400,4.8100 +a=6378137.0000 +rf=298.2572235630000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=MOP86 (Apataki, Rapa, Hao) Tuamotu - UTM fuseau 6 Sud +proj=tmerc +towgs84=216.8400,118.8100,19.6100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=MOP86 (Apataki, Rapa, Hao) Tuamotu - UTM fuseau 7 Sud +proj=tmerc +towgs84=216.8400,118.8100,19.6100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> +# W [BASSASUTM37S] + +title=Cadastre 1997 - UTM fuseau 38 Sud +proj=tmerc +towgs84=-381.7880,-57.5010,-256.6730 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> +# W [CADA80UTM7S] +# W [CLIP57UTM12] + +title=Crozet 1963 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Guyane CSG67 UTM fuseau 21 +proj=tmerc +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Guyane CSG67 UTM fuseau 22 +proj=tmerc +towgs84=-193.0660,236.9930,105.4470,0.4814,-0.8074,0.1276,1.564900 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=EFATE-IGN 1957 - UTM fuseau 59 Sud +proj=tmerc +towgs84=-127.0000,-769.0000,472.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=ETRS89 Lambert Azimutal Equal Area +proj=laea +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=52.000000000 +lon_0=10.000000000 +x_0=4321000.000 +y_0=3210000.000 +units=m +no_defs <> + +title=ETRS89 Lambert Conformal Conic +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=52.000000000 +lon_0=9.999999995 +lat_1=35.000000000 +lat_2=65.000000000 +x_0=4000000.000 +y_0=2800000.000 +units=m +no_defs <> +# W [FAKA50UTM6S] +# W [FANGA64UTM7S] +# W [FANGA651U7S] +# W [FANGA652U7S] +# W [FANGA66UTM7S] + +title=Fangataufa 1984 - UTM fuseau 7 Sud +proj=tmerc +towgs84=150.5700,158.3300,118.3200 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Geoportail - Antilles francaises +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Geoportail - Amsterdam et Saint-Paul +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-38.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Geoportail - Crozet +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-46.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Geoportail - France metropolitaine +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=46.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Geoportail - Guyane +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=4.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Geoportail - Kerguelen +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-49.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Geoportail - Mayotte +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-12.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Geoportail - Nouvelle-Caledonie +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-22.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Geoportail - Polynesie francaise +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-15.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Geoportail - Reunion et dependances +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-21.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Geoportail - Saint-Pierre et Miquelon +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=47.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Geoportail - Wallis et Futuna +proj=eqc +nadgrids=null +wktext +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=0.000000000 +lat_ts=-14.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> +# W [GLOR77UTM38S] + +title=Guadeloupe Ste Anne +proj=tmerc +towgs84=-472.2900,-5.6300,-304.1200,0.4362,-0.8374,0.2563,1.898400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Guadeloupe Fort Marigot +proj=tmerc +towgs84=136.5960,248.1480,-429.7890 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> +# W [HAO58UTM7S] +# W [HAO67UTM7S] +# W [HARA49UTM7S] +# W [HIKU50UTM7S] +# W [HIVA60UTM7S] +# W [HIVA67UTM7S] + +title=IGN 1963 - Hiva Oa, Tahuata, Mohotani - UTM fuseau 7 Sud +proj=tmerc +towgs84=410.7210,55.0490,80.7460,-2.5779,-2.3514,-0.6664,17.331100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=IGN 1972 - Lambert Nouvelle Caledonie +proj=lcc +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-21.499999999 +lon_0=166.000000000 +lat_1=-20.666666667 +lat_2=-22.333333333 +x_0=400000.000 +y_0=300000.000 +units=m +no_defs <> + +title=IGN 1972 - UTM fuseau 58 Sud +proj=tmerc +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=MHPF70 (Kauehi) Tuamotu - UTM fuseau 6 Sud +proj=tmerc +towgs84=126.7400,300.1000,-75.4900 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Kerguelen 1962 +proj=tmerc +towgs84=144.8990,-186.7700,100.9230 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Lambert I +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=49.500000000 +lon_0=0.000000000 +k_0=0.99987734 +lat_1=49.500000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs <> + +title=Lambert I Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=49.500000000 +lon_0=0.000000000 +k_0=0.99987734 +lat_1=49.500000000 +x_0=600000.000 +y_0=1200000.000 +units=m +no_defs <> + +title=Lambert II +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs <> + +title=Lambert II Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=2200000.000 +units=m +no_defs <> + +title=Lambert III +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=44.100000000 +lon_0=0.000000000 +k_0=0.99987750 +lat_1=44.100000000 +x_0=600000.000 +y_0=200000.000 +units=m +no_defs <> + +title=Lambert III Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=44.100000000 +lon_0=0.000000000 +k_0=0.99987750 +lat_1=44.100000000 +x_0=600000.000 +y_0=3200000.000 +units=m +no_defs <> + +title=Lambert IV +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=42.165000000 +lon_0=0.000000000 +k_0=0.99994471 +lat_1=42.165000000 +x_0=234.358 +y_0=185861.369 +units=m +no_defs <> + +title=Lambert IV Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=42.165000000 +lon_0=0.000000000 +k_0=0.99994471 +lat_1=42.165000000 +x_0=234.358 +y_0=4185861.369 +units=m +no_defs <> + +title=Lambert 93 +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=46.500000000 +lon_0=3.000000000 +lat_1=44.000000000 +lat_2=49.000000000 +x_0=700000.000 +y_0=6600000.000 +units=m +no_defs <> + +title=Lambert II etendu +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=2200000.000 +units=m +no_defs <> + +title=Lambert grand champ +proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=47.000000000 +lon_0=0.000000000 +lat_1=45.000000000 +lat_2=49.000000000 +x_0=600000.000 +y_0=600000.000 +units=m +no_defs <> + +title=Luxembourg 1929 +proj=tmerc +towgs84=-192.9860,13.6730,-39.3090,-0.4099,-2.9332,2.6881,0.430000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=49.833333333 +lon_0=6.166666667 +k_0=1.00000000 +x_0=80000.000 +y_0=100000.000 +units=m +no_defs <> +# W [MAKE50UTM7S] +# W [MANGA51U8S] + +title=Mare - Iles Loyaute - UTM fuseau 58 Sud +proj=tmerc +towgs84=287.0000,178.0000,-136.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Martinique Fort-Desaix +proj=tmerc +towgs84=126.9260,547.9390,130.4090,-2.7867,5.1612,-0.8584,13.822650 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> +# W [MAUPITIUTM5S] + +title=Mayotte Combani +proj=tmerc +towgs84=-599.9280,-275.5520,-195.6650,-0.0835,-0.4715,0.0602,49.281400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=MHPF67 (Mangareva, Agakauitai, Aukena, Mekiro) Gambiers (Iles) - UTM 8 S +proj=tmerc +towgs84=338.0800,212.5800,-296.1700 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Geoportail - Monde +proj=mill +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lon_0=0.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <> + +title=Moorea 1987 - UTM fuseau 6 Sud +proj=tmerc +towgs84=215.9820,149.5930,176.2290,3.2624,1.6920,1.1571,10.477300 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=MOP90 (Tetiaroa) Iles de la Societe - UTM fuseau 6 Sud +proj=tmerc +towgs84=217.0370,86.9590,23.9560 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> +# W [MURU59UTM7S] +# W [MURU62UTM7S] +# W [MURU78UTM7S] +# W [NC51UTM58S] +# W [NOVA53UTM38S] + +title=IGN 1972 Nuku Hiva - UTM fuseau 7 Sud +proj=tmerc +towgs84=165.7320,216.7200,180.5050,-0.6434,-0.4512,-0.0791,7.420400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=IGN 1994 Nuku Hiva - UTM fuseau 7 Sud +proj=tmerc +towgs84=197.1600,200.1700,-48.0800 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Ouvea - Iles Loyaute - UTM fuseau 58 Sud +proj=tmerc +towgs84=-13.0000,-348.0000,292.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=IGN53 (IGN Raiatea-Tahaa) Raiatea-Tahaa-Bora Bora-Huahine - UTM fuseau 5 +proj=tmerc +towgs84=65.0300,341.5500,76.6700 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> +# W [RAIV54UTM6S] +# W [RAIV66UTM6S] +# W [RANGI47U6S] +# W [RANGI59U6S] +# W [RANGI68U6S] + +title=Reunion Gauss Laborde +proj=gstmerc +towgs84=789.5240,-626.4860,-89.9040,0.6006,76.7946,-10.5788,-32.324100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-21.116666667 +lon_0=55.533333333 +k_0=1.00000000 +x_0=160000.000 +y_0=50000.000 +units=m +no_defs <> + +title=Projection conique conforme Zone 1 +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=42.000000000 +lon_0=3.000000000 +lat_1=41.250000000 +lat_2=42.750000000 +x_0=1700000.000 +y_0=1200000.000 +units=m +no_defs <> + +title=Projection conique conforme Zone 2 +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=43.000000000 +lon_0=3.000000000 +lat_1=42.250000000 +lat_2=43.750000000 +x_0=1700000.000 +y_0=2200000.000 +units=m +no_defs <> + +title=Projection conique conforme Zone 3 +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=44.000000000 +lon_0=3.000000000 +lat_1=43.250000000 +lat_2=44.750000000 +x_0=1700000.000 +y_0=3200000.000 +units=m +no_defs <> + +title=Projection conique conforme Zone 4 +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=45.000000000 +lon_0=3.000000000 +lat_1=44.250000000 +lat_2=45.750000000 +x_0=1700000.000 +y_0=4200000.000 +units=m +no_defs <> + +title=Projection conique conforme Zone 5 +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=46.000000000 +lon_0=3.000000000 +lat_1=45.250000000 +lat_2=46.750000000 +x_0=1700000.000 +y_0=5200000.000 +units=m +no_defs <> + +title=Projection conique conforme Zone 6 +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=47.000000000 +lon_0=3.000000000 +lat_1=46.250000000 +lat_2=47.750000000 +x_0=1700000.000 +y_0=6200000.000 +units=m +no_defs <> + +title=Projection conique conforme Zone 7 +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=48.000000000 +lon_0=3.000000000 +lat_1=47.250000000 +lat_2=48.750000000 +x_0=1700000.000 +y_0=7200000.000 +units=m +no_defs <> + +title=Projection conique conforme Zone 8 +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=49.000000000 +lon_0=3.000000000 +lat_1=48.250000000 +lat_2=49.750000000 +x_0=1700000.000 +y_0=8200000.000 +units=m +no_defs <> + +title=Projection conique conforme Zone 9 +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=50.000000000 +lon_0=3.000000000 +lat_1=49.250000000 +lat_2=50.750000000 +x_0=1700000.000 +y_0=9200000.000 +units=m +no_defs <> + +title=UTM fuseau 38 Sud (Reseau Geodesique de Mayotte 2004) +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Reseau Geodesique de Nouvelle-Caledonie - Lambert Nouvelle Caledonie +proj=lcc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=-21.499999999 +lon_0=166.000000000 +lat_1=-20.666666667 +lat_2=-22.333333333 +x_0=400000.000 +y_0=300000.000 +units=m +no_defs <> + +title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 57 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 58 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 59 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=RGPF - UTM fuseau 5 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=RGPF - UTM fuseau 6 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=RGPF - UTM fuseau 7 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=RGR92 UTM fuseau 40 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Saint-Pierre-et-Miquelon (2006) UTM Fuseau 21 Nord +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=SAT84 (Rurutu) Iles Australes - UTM fuseau 5 Sud +proj=tmerc +towgs84=202.1300,174.6000,-15.7400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Saint-Paul 1969 +proj=tmerc +towgs84=225.5710,-346.6080,-46.5670 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=St Pierre et Miquelon 1950 +proj=tmerc +towgs84=-95.5930,573.7630,173.4420,-0.9602,1.2510,-1.3918,42.626500 +a=6378206.4000 +rf=294.9786982000000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Tahaa 1951 +proj=tmerc +towgs84=72.4380,345.9180,79.4860,-1.6045,-0.8823,-0.5565,1.374600 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Tahiti-Terme Nord UTM fuseau 6 Sud +proj=tmerc +towgs84=162.0000,117.0000,154.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Tahiti 1979 +proj=tmerc +towgs84=221.5250,152.9480,176.7680,2.3847,1.3896,0.8770,11.474100 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> +# W [TAKA69UTM6S] + +title=Tanna Bloc Sud - UTM fuseau 59 Sud +proj=tmerc +towgs84=-139.0000,-967.0000,436.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=Terre Adelie 1950 +proj=stere +towgs84=324.9120,153.2820,172.0260 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-90.000000000 +lon_0=140.000000000 +lat_ts=-67.000000000 +k=0.96027295 +x_0=300000.000 +y_0=-2299363.482 +units=m +no_defs <> +# W [TIKE50UTM6S] +# W [TIKE60UTM6S] + +title=Tubuai - Iles Australes - UTM fuseau 6 Sud +proj=tmerc +towgs84=237.1700,171.6100,-77.8400 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> +# W [TURI69UTM7S] + +title=World Geodetic System 1972 UTM fuseau 01 Sud +proj=tmerc +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 01 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 01 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 02 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 02 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 03 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 03 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 04 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 04 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 05 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 05 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 06 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 06 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 07 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 07 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 08 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 08 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 09 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-129.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 09 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-129.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 10 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-123.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 10 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-123.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 11 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-117.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 11 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-117.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 12 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-111.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 12 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-111.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 13 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-105.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 13 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-105.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 14 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-99.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 14 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-99.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 15 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-93.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 15 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-93.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 16 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-87.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 16 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-87.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 17 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-81.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 17 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-81.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 18 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 18 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 19 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 19 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 20 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 20 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 20 Nord-Guadeloupe +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 20 Nord-Martinique +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 21 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 21 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=RGFG95 UTM fuseau 22 Nord-Guyane +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 22 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 22 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 23 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 23 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 24 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 24 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 25 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 25 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 30d a 24d Ouest +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 26 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 26 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 24d a 18d Ouest +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 27 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 27 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 18d a 12d Ouest +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 28 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 28 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 12d a 6d Ouest +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 29 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 29 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=European Datum 1950 UTM fuseau 30 +proj=tmerc +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de -6d a 0d Ouest +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=RGF93 UTM fuseau 30 +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 30 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1972 UTM fuseau 30 +proj=tmerc +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 30 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=European Datum 1950 UTM fuseau 31 +proj=tmerc +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 0d a 6d Est +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=RGF93 UTM fuseau 31 +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 31 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1972 UTM fuseau 31 +proj=tmerc +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 31 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=European Datum 1950 UTM fuseau 32 +proj=tmerc +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 6d a 12d Est +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=RGF93 UTM fuseau 32 +proj=tmerc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 32 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1972 UTM fuseau 32 +proj=tmerc +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 32 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 12d a 18d Est +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 33 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 33 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 18d a 24d Est +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 34 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 34 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 24d a 30d Est +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 35 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 35 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 30d a 36d Est +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 36 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 36 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 36d a 42d Est +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 37 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 37 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=Europe - de 42d a 48d Est +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 38 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 38 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 39 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 39 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 40 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 40 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 41 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 41 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 42 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 42 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 43 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 43 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 44 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=81.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 44 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=81.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 45 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=87.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 45 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=87.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 46 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=93.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 46 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=93.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 47 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=99.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 47 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=99.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 48 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=105.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 48 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=105.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 49 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=111.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 49 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=111.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 50 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=117.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 50 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=117.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 51 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=123.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 51 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=123.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 52 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=129.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 52 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=129.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 53 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 53 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 54 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 54 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 55 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 55 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 56 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 56 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 57 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 57 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 58 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 58 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 59 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 59 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 60 Sud +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> + +title=World Geodetic System 1984 UTM fuseau 60 +proj=tmerc +nadgrids=@null +wktext +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=0.000000000 +lon_0=177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <> +# W [VAITAPEUTM5S] +# W [WALL76UTM1S] + +title=Wallis-Uvea 1978 (MOP78) UTM 1 SUD +proj=tmerc +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=0.000000000 +lon_0=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <> diff --git a/lib/mpl_toolkits/basemap/data/ntf_r93.gsb b/lib/mpl_toolkits/basemap/data/ntf_r93.gsb new file mode 100644 index 0000000000000000000000000000000000000000..07e34fcb027910c1a42cda7f9b6a7e414f9c6723 GIT binary patch literal 277424 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 z zp25$5?oRM!wN)B7&E>)i#_jMGyWIQiLdNZn8@R;feyrg4Z^YMNdlQ#C&%o#0VKIq& zT(03Icjb=I-y6E8i2}J}qSyi+ebNm*8~*5y2E6ZwhR=5!c)Tt)&V+E>k}_NqTP_RF z1#Sub!mK>>XIh?IAqkjvm(?X-~bF02j%zN_kb;! z#W!Mn3$DkWK>7{l;oy4Y@O}D!HE`F<^@kY8&8MReD}UWQUE)Kq4+__Vo8!~57vj2* z=TAS-9$;JxzokzxDi~)M0-tfKicTNpdG;DS+h^Q+us*qYuGUY_{L^Qci1}Cc z$iMlFz#;MA;rWasbZ}bCULV^(_WF#NoqO2#_aQdxy5s`($bkr-$j-a$;aT*N>DYgG zwXr@byrMDK_juD9i{JT4yC|^7bKOU-GR{1Ei%nlHz77*zus`=cy>apycTxRpL5#U5llLvBaAe15mj2>bP7)vm?F zcm9k0#-;yYd`2I66aB*?cn5t1`F$>e7t*IA7tRHkC-@KeSA~akpqjRLV%W!|G>KI!GMy(JH|*}ghsJ!$ z_vT6Camcgzl>gcuf^Cbu-$tKuB>IsfR@)xgC%0qY@w#cFPw~ltKlO-MKxB^YlkdDi z3W6~v{Z} z%5Voyu_k@+pCzQ#Q-ICq88#NvodMMdk2s%J0uUC$vD|(tH28!6!c|*Shcf zXn}6e_a7kTSPRzE0_1OG{%?bF@lTlN&<|W>y?Ck!KAC~v=q6<~%gjM<#y$oA-tE4V zl%aY7?cjHCU-rqSk&*i_=Eky*0MBt4I4VB*sayG`r(fpBONCjc;*LMl{UVq^{!+n9{J{k8H-fHWX-Dnc# zuH0w%=^->p|M+v)aNqqm9Cnf0k0u9hcCSE{B~n6@EJk!D_dX;P^_@#-GIHYFn{0hl z3Vk8&JmgZxx!JT2wRw}n_-TQXR_IhsBS5&_9{NDs6$DM(%R37{gTgED8 zeiy3HG~}}v^A^Qi4)jzJdQ+S2x_uQ@;C{`U@t&vnHzpwBjr{C{5eUwd#Q=32ZLsLEmyCvgot zP*ep!Gp{l{_dZl5%ctG5-sOMcZx+9|q#V=od1bZ$Os?u5mB@f-BLxpiSVK3lGHlv(yxLAf=dx z&^q+6xzsRrr_p+R-ncaMj5c7;&81;3z0uZNF)qF5Tq*7^qD|O`aw&30)VzmYEFR~w zz`faopEvPk*qn&gjs(vluKLgq7gNKJxk@(Riap+z6K5hdf)m1JhS`0F8t{GM`S!=W zjT*w|tO(v{Y80!YB;Yt7eoI=br=Gn$=Y?L;y71i02QQyCgnwVYZtH0RZPMG{?R#>* z)*L(ErRL)mJiUzb!*i&4CH&L<{^)Rz<~(q|sLf)67jV9gS3hIw3_eQ^`TWgxJ-VF# z1UH{L!n~dBaU^|=a37xoUO#o42K-F^1M^qvzQu}q{85xuB0CLROvH3 P1vkA$pM;!4Z)A*oCnwX# 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

U<2#bdCpk%6q_KKK?wM19@|_ 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

r1jTj2K3wBNZ?{hhe2p6u-ZT>u?!AKc1Q#58~o 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

x zS8aDbio%`RH|wC*QM#?)40~AL&mG#^GQ-^auS2<~rszTe@X`LBwmZknFhyU3kweT;nisp4k ze8ynNU!XsaQq70nWPC44&k!Q47q4nDBR?d{`N*@O!|e-3Ojj{&*zJc#Ow##voBUY* zWk%G?K?B)WZOY^wU^+ZcD5Y&2z>r=;_?JP(a0SNCjf64M-JJmUn^0_*v-asRi*(=53{ zSg%|^Q+|&GJ)l+UoqL*!JvcaeJ*?xk(J`w{MLj=A|A4j1OCuljH%yF!HH_JP;V?~%fB zhi2y&9^5}PpCCX7wmvVd-ukB9}i}~ zhepkdk-u6N`OqLg2J%fb%X}N^bxvr!t}j)u{Y~;aXx^fZsrg49O#2Ao7Qjm71sLD) zEI9fY*rUN6BaY;^m}VDSOmB*S?(^MxVT_;t^U4b+mMqdxf}5Del_<9kk?2N>6Wu<_k47fFoDSo>ebH$w{E z*tz|EHcc7-W75+ZoWIdNf`!W=?2@r{vGFSp4Z9?cLw%GEH=kq50`Z0d!;hkycpAH$ ze+(hA$T-dLhslMW6p0Lyj}R#n9$q~`LcyiiU~dU znBckmVyhq@gzm?KlfUJYCng<_KR8(mEacynz>EpH`DM!G_k&-ti0>XuX31%T4zExb8)){vrox^*M#oni%tr&KkNQJbn6AwwAhB( zl=?J6&kL6dd-#-*JIaJmxI@^pL<)YU((OljqO#W|Uxgf~u~+jnrc!hB*sB~y+Aj$2 z6?>(2c%G>`N%(TuD_WpSO_lpR^ez&Qr>WBSEcSjXfCb`5$@dO>H3wrVH?oFwU+mje z{WF!BfANAE`yQ3&tf{Kt#bJQ@6MXPJf%XsDcj|Y2wdz6+tjxwfY_nIokE`RzR_7CnC?js%GwAXOJqy5BcuB9$+!~s1=n3{6QJK=!l z(@f1VQuM`v+k{hSYMxeJ{(y|-hM1b)r7w&FdND9HDSnZUrG16uzf7%PyeBxYN&4BQ z_9*RJZIHiBv8g>t|M?rAJ)J<=ubbLJ>B-=h_YD=_x=hU!DJ0=m#~-ZG`x|bZAwW=5 zbEllQF~e`4dpFn+e+-sC87z-L31=hMLKCrtA3rEiH1F-3ahX5yK#0PGyOrZ>gZj_KZtZ2;;2iOe z5to1if-`LJ6S+uYoMY*eR@mV4vX92N<~MBc4)xi`Bf>k^{m5=MaJ29W$VWZ? zqhwy64eatHoBuG(pw1FXVKf|zcsjNRLFLIQ1^>cOBznHA*NBo3soGRR-%=*7} z{s*QBA3n9wcni`;pIw){95@l*s`DGa}RBTZ>zFp&nwR&ti3v0Hc|O5Va@H@vi*cBPkAMo zJKK?AUKN_%u5VKMp7MRe*L{8LyuUKG z)Xg8m1m`|@_g8Gmmois|up(C zTuDAV*72QShfUW$NK3N>zK!8O z%b*d$qV2re4!`n2ZX7^Z^Qv}unVdtRUGq}5Xf_X`DSxN;S6eh`=K&OPg--Q>+F@^q z=N{q`%RJi_ERcH$#JR>YZjmiG=%L{>3WkK9k8J(|vYFoV8zkO*jBlJa{}u+VcaYCP zdLuT!Qb3N-?R@n^wTBJe&fhWgY~@#Vs~^D*QLYelyWigs$06y~xrNPZXK+gpx}9Go z?=l9HoJ%|+dRtWdZgX2c-bPOZ=$0DN2{!jM(nIg{Ep$7cTFxxVl|Z-V>uks5|00(?DHO`p>X~)+e7(SW)hQ~pA&^N6;2}m!zhZ{81zfe9^+W92v-(s}l>qxeC40CdY^`ykAyrwzK5ABrjcp3v`43L=;sFJO2` zYW@Th>S=@Ie&XH4xb9IQsr*@t(dmYauaML^97dG03Q7GrW0&T>AjxstjkB;*dwh`O zno{jY*sh;DNVZ8}5W~u$g(SbdZhIZqt0w|de9a2Z!F4WwpVGZ1wg`^=Qb?U7AX!|c zIa%m(pO1u_19xej3*&BI)Wv$Zo8G{v-c!lDtG)h+<1KadFQ5e1Y1pNnFPi5|02(`3 zm)f`jBKrQpcCvBP2?Zki^B>?&Y-2q+i4!99;l1+08eFTK4~R?@ z&k(M5|GbFk8g{`Zm%EOz4((RjM{qplqpu;N{R3RNhb(L%;(D%s^LS~;e255^{!m<~ z-aYaW$lxCT(7i51^!bM~X=?v}?~p%1c_;Webp;?Lb8H zSMa0T-$va3YaItaLXu``ioksJEeTe`SvP@+- z`V9Jg%KjL7&XGAD{k}!W0KJZf6VZJm^v+~(&&d$s*l~O*^tm~>^CLo+dT1eYn4DuF zs^@g-pUJ`y!ZL2V7!pe*7X$5%HdZ z#HTfUP=qLNDaNgXg!-mvkE4C6gyw4@;rM9@y}v`Z_KxZA#~SRbA?f@ViRX1MozyuU zBqkmh-Ff~|kR2|APe@SvhX33>*J@rMQNzHYZ=rWT7SG=ei9F%RLhnKmLqJ^pUeGsB zipvn!`5^QQwtg7I83X-~r(s}U+MXRlf319G80gZ^Yh2c`$HE5I9lk_-MD54HM&bPDp z!MI-l+m64O63?eY%>6vJ@1}gn7-Jf35_S|xpBZAJQ`jGNET;c;cN$`@=d|-S(mag+ z7-AQGd-smaM3duqmd-b2a_*8rJj7gHJE!Ff8c>absAyvfO|J8EMJ2X&vdMKmsHpN? zO`iKXM~Qm1@#C1uyNrto#LJ=&4<%7e-fVe})AyY8$*4mPY9F}Hu<{=M*t$u zKb(KxO=Lj57rN9lW%3i^@qsSEWSnIRu992^bg2i!6f75?Cv>b8?zJgAbSA&~pq*p6 z&%9#_9S<%ny3&zmnCn-zJ6_DNDQ-W(vDf?GGDWhsI~F>*?%Vv0Dbjlqbntp-{v)PH zd+*S$d;wGP1X*Uu$K0lSW>dD8fPA4%d$p$Q3iXA>mEECmaW%7I?(m74N{g|7_# zk2831qp5gL=Dg6qUcNuZ`;p}EV1U92M;VmR z4;xvR_W1Xv+<8@8Pso&?BE4nkf1WQ;`KElR@{4+|SV@HK>y77e4z4~9>vjKZMp{~n z+_(T*)#GEzT7|y>t;%08o>KK`w7PwW=XA|4wK9%AFxPk{59OOFtaJHtk8+M-E!XTW zf8Kc3%O3<*%Gl?AQ=Z4*shgmcYqW9tdHljbz#h=L>P6I-kogJS7bS3QDvIgr@=+36 zG@oE94kS?C%Q>*x`9CVAv9`J#R`Yo8odNPwGkE7=Sj{oV)%B)g{atk7J&L?MJmC0} z`Vst~xEPvw?6TWVKaJP*tsC?{ZM@$wkn((J&^)5?QeuKQ#!ydo==HyjHeU6R zLA~ZZj5ncqih9;sJv`6&hKgqe>fHC==X{NIvNkx&_zshUBdnC`dBFI_Pv8M0tduov zA<23b=jpGB9|D#;UcYaS1ovPm*GevU#`w~tU1(bjOI*LhUqkJ|{g=QJop+E= znqPz`!%FS98Q*gC;?z5yo9}7m;;ka<0v*|m&*cjniDEqL@!`fdR({X0^c>l97~enm zqWu=k(>x&k-_z;jv|O0OmZYJyA8>xA?{!{aT%HtORX#B74|oB(J94X=_?*T!PxJK1 zx0Nd|Bwx1l)o_t=0gdliE}~GLQ{u1J8{ZM6-&xd$%axO0eCLT61Y2Y*JIeU3(>!Zf z&*8?8e1NIN4t>5Ge}l}mu|xBm#^0;+)ppJI8h=#44cH;rwPF*<=XK@3uv0muCa|aE zbg|RzTLUKvFBrR|R^>GTckk*Fth7W`dgkBpww50RKsS2<0`!G*4!Nw|QvOHW%Zvww+*tlL@oX_ADkCi?{#J zCis}#w=uyfmt%&R;Cr-%J}Qdc`aU+n=^T9i6T4Xh{M%F${EQD`Ct|nenN9FR+*jKsZXK2q@?=ROsGJ7mzdJ~jtT81c@9ibN^{@OXvjIwQ!T({Q(3Tqgc6Tn4`V4FAb<53DUxE3+pkpKE%Orc z`0)#FS5x_daMG~-6#3_nuYuz>M_{|=NKDlyk|V_)J>QzDdjsu$&XfW3~7RjKy@ z?7K!IyZR$8q~C!3{4skbOMQedxluy*bm`rgn%86yLOdw>g_)XV zd_nsf2RQXp1Ex0THhSQ7P+x*C5PO>1gWh7^H4Y$+!;bGVwdW#}4sk&H&ZhR!^XTSw z2yW1Mp{adaK6to+YXi?kP3`>*!ng=Ge<|l8Q@85TV*pEAHXm1XVt-=IRqv+q*hDLCq|7DE3zCv(7 zy?Zf^$1VQD2G>eI5@Xs6wZXZRVi|e^`5^d!JKhFA*Zog)oCK9@@J0PTMU;bPgSUqn zpo0#LJrG&T^dh)6cpM^w-7jAyW3@auP2-zz842jDQQb3SR` zWZ|OWO2@zQoh2MlTp_=dY_^x!Kg-D;C#m3t0^uIzu|o4wOX&{D{vlfjjnvtdi8#Qf2i-y zR_tipn-XD&+Ecd`j<5Ec<{WJWZ4W5wfxjvr(^gEQW9D<@T~v;cEq_Y;t1Zf7u;o|s zVAKn1@SM!&FsYi2-^(4zXwene8VwGP}uX}P^BI}x?piSqSw&XN<5JOmS zJtJ%}*TtJt5N0~^J)hd*Pig8g{#W{aFs9`JTRdL<4(;??qMoE3zDfBa?X0o+Fl&du z!C%A^q22X;hL5GER8ADy-Mqdisrlp%*M}QET)8HlJT@SIO)1KUAvxHmP);!_%AVimeWt$IB**S%#%s$^8zLxhLWO%K=y&ng1IgooeWE?-pox32TUI6TK z`<09w0}sMJ?d3y8?<3gjcr6(|20!`|_9zz+GLK095wqNaq`pT=j#c+!_FD0lKvJ}f za{bADiHN z+ktK8>is{pSh(i6PHI53KhnG+u5mo}6u;(aPu|S2jw#PWnsr>y|B4MnKjVF&^HAUl z#yHl$36Uv3^F|M2&KDlh_b*0R*Z5gCL^LmeU4!#&uB$Bj7CZT$a?pJcVLZ&*1=v0~ z&*t^+%Udz5xxT@9I zY>1B4_vT9VibGUt$>VUToBKz}s!LIRTr}t_kYmo-IM?ypqb_IjYtQvOxqv8N`~Pae zuO&`$59OzMQMD^R<9K*c?IXeaZvPdftsx<};Rp5dK$Pohb}szRI+~Z7D32|DWcV}A zy7dPj>iG1FwI@P;V&N#j3f;p)l=U5rTcA#A=66F>Ui0P9s9X_%k<=R1Xn%pxX>iFYPsf`^8F`9lJ{lcj<*XIFMG3|-fM;+Dk9dz?J{I16#s?SSs z_gaYZ+L88{Y3Ct`>i!)v>UD$YC9=?j>R;{F`#eOL{x<$a+D}Wc2BON5fo`{diaGykxB8$Uu3j1F z*5?a!k3za&?@xU<;b=h8@t?Xi4+Lq=kwZ79moM50S=STjE|lOX^qj?*hr=Nu$D!k) z*Y)WVdR~CucO|b#`w{W>(Y}U*#t%WleSZ6|7`v0yC6I7?%z=P_LLs63Y#4C+jD+iP zZFpGbFpwytqRNCE*m#%((;@D>Mw>!%&?PSh2V8fBO`6Yvxb6dBv+~d(E_%qrVTCV`iM#jO_JgYBCK@Mb`l##w3p-qYBJMmzJKcUe?s647 zXUcsN;`*F5IRSoNApb*oZh{-)&&YcibPnpU6UV2y%%Nb9m zkrzx};9W|#j)bWC!c5*HEO-e*RQp9HPv?jbC5i~G(9DoAve<#B^D7T|r-)DXwEvJE zfEk)2pbLn){lU8X>}3&{b&tY+$DRleVcJ0TTLK$aW1s%M; zp8TvC=00y7>H{&u9+f#ibZTD56uCZeC;ym6#EHkG&)-h%`)=Nr#AQ%TIa3#6|TL8S5Q&X`vEJjmMObW`@4<5{V1 z(Ue`UeeLz~V<|G8J^12q2DIvXh5kIsM{AYXi`RI55fB9BpM)1{JiWIy(&`ji*&0~T zZpy2b_qy&KDP)=Q6NFCz>o|@$a)l}XJwXlIqbZLjdqz`1(nI#&t>Ku+Z@-(0gQd^~ zYxtUU{U%c}LGN!ZvX=U{sd!m=W-aRLF%>KI{j^&5i^l7G7A<6b&Gbw&6*}jH)yvPL zV$cNR4ar;)RO^Bq z^Zb{notJYCtYjU|O^+JiHykv31y&xTeq7&D_2{e^>|dny;IKk@u*P2^AZ%EnxfkOP z3P2v}l&@%f8NOE5K%@2=Y5va_>+@li&H;??e({z=lgl6bJ|sQ$)@@Ml{PVsp;eo?a z?Z+A468Yf3eC% z)I1&+DIePS%9ZcET<;ggS1b1mtkeFU@trBTNNiTmnDIR#dqHgBPty?UvwSH2O>A?0 z5&tIjHH0OuP+$UkD~C4h`c?tGFJe36z`t%Xfg{vU-9FfNxIjKH*sgv-6L>=Al-Mac zhSSI&p?TX*##^?=$Y(A7LhK?t_@dT*O(4SHtw*tou?qWsVS>X%Sc6?|-xTD>&zF7J zrQAsqyo~fdZ+(HTPiunDd_+l%i5TPS;B{Y{;QOpI$i=wwBu(&}1DO1eamEq9)NO)` zZsC6cjB7r`1R0yr^$aEi({`o_ZrXiz@{37jyQfdy~vP zOz3MFIAGfCS3`d&Zzt{gexdhe-;3F-EX+-CrEsk=tDIO9x=DD_m>tiUBidK&fDR`(rbylz65)l_y_1Q)%j#0E1Qm+E|odCshv)3 z?7YKq)4k$5Hnm@HENO4t===}0?&rI~^&x9rUuvLwCr>y{t@f?350#HqeIys38nMsi z52`lE^AP)V&Sa{U&w~BxZ#LB%OU_uHOfoD zfwNf*w57o+CL_OtUtu|9e|`3||PQVoGzuwsJ4I z_+!fDe=C)jjY+8yUt~i%f5L9fbJ@^3^#^n-@6Cq(&+{W;#wcAv$a`-?`)VI8O0;eI z0osuABru})G8-IV@d@$aIA#%imH1P#cfu~^_t_wdhXlLad@-o^%E5iB4L-?%%ZIUp zTd=1-YJ=BHun!0M??D-l)?zzj5R+e$KZ6GoXHm{jUNAQ3;|Es@hDAF*miSWAN5-)B z_ibQ}+`F(%_enM|M|=X<#Oo;1rKW+oZ zix_}%i)8h@dx8xp{~6b~{C}W876;fO$LW2jf1%I&)q*>F(E1n3JsF#|zi0iQ$pIBt z>G{<9pW=f_FE(*3YWJ2PkB`e|v=?TjA5N4SZHb1Z1rUXCqG9LpCtnC9oVbQdJ z9r-o`OZS8@W4(@=V@LWX@S76a*=CTTl&|1bn~u< zcIBbl(z|rO(60PgThgO_f>zD@+TqFth9;gio>OXvsn8UfoG+!o-Pc!TWN&Ws_Y)8? zG&vt~zMH=`X-?l3@Q?TD#n7bw9$PR~`kb&z=XJK=IQ3c7y(Kw4JEBVcv-Qevw52Zp zSMT-(rOqeWa3_DjezT>cu zZ-)=azLxyYjP0thg{#GL0ZI4y%GdonBz4|s^Go>$cNgso7~8Om9r~fnO(FT$pVVm1 z*r7*raCA>d${3A!P4yhK*#ap__x?QZPCLZq;ZlM#oMiI^hqWL14Hz(gzs-A0Jb{q9 zkp*n|HgBl=Yd*HkebMIrM;6VH(({DP`A+@tDaSS3>E>T)^{?Shrb_?kb4crc9CsWm zdp=0(ei*mEB%TOJ>;40`HAv10(i{()*N@vAk14JGaNMe#PRJ$Y@R*H!If>GIDG_8aFw(q_AeGs1Z15bpkKLfkX23(_BkF?mP#S?X2)LV z%gvroap=E)!5%k{&MJQldrp$S0i?;ExL0#CW?c?Abr3J?sxYfP5lB&~fkx1nRt_7a zc#VJKJDAd57o?Pnk4fzbK}yfdn9v*)@utK}k8$OCL5j9V{9JaqT1at?``R9i=s5(^ zeg?3dLiZQ}Wz#;0@L}se#t!8|LR!Wa=VH6d%cpe?if!tZfVBFpu=Q=_rKi8+f#m17 z#&P1)ZXeL>=ARkoHEU2#BV-uw{rU!6;rzTA<cTu{5p!vfb4#(rMd{8=i~L_1Y{4Byd=D*IReN!FTfA_xrV5$(RRgk4cF5I z_CFAHe&`mtE+0EMkHco=fI(Drprg=np~=tN!GTk(8|3-xo(h+1&W89d`refm^JP0A zru$Qz=X?<{&6D77{8Oj)MvPl;CA;DbYBSUMndV!vI6$5z(SHJBpSxmLctiJ^5IaHl z=-+7$g?KXzP<$Qc=w1q9&R6iKa)cq~xP*VX&u7eeRhPf(_%jy?rx@x!Q$Kr5d2oYs z6o_fQ5t{X!4KdL+PJlHo=O4RNy;7|N8RPj^O#5TdCgUkT#GHpC?EEt^H=pgGPx;%O zOChFt2IzGDikR}O$wMqb6NqX52cmQfBwi-OPJD`P2+a`Val@?dA*Sa8Na&mfVn;qf zLBJm9<~sLLTOoEJ15v6$bqc#dZ11ya<9QXNb#4JMm*>yQIJN|0jti8fmLQ=`AbXUZlA4Es3|~h_HA2$m zgtHRoz6846_on9vUKrCpUi;F}(=Xgl=;p@{%}sm15H2`$tKS~_ZsGv`?Zg)p@DB8! zss8V7*KZiuSA7KCns0^y!Ht{(-4ZW92R67KN5Xl5HlD1!sRaEYN5$`fO^l=a;$uiK zE$rx}u*vzo6FR?#Eu1nUUsjxt<l2Rr7GP5bo!LR_v9C&12cC8rJX#gbbz zIm#b~IFI>9e`RuJ>*qPH{zH@dPX_0tAif(fjJBKH*9GJVvCR??Fu6NrAvee`GkFvA z^BLpq@%T+9@3WERbML(ZVs2iR=YCEx^-7o_tWi9c`WyPWHbc0DKH>|A{UTogGt}*2 zV$RPx)cH_fg-Z-Xv3PaU>Yf1jPs|2kZ1A~n#Z`5jYYWbY51j*niloW2EncR{CMa!O6R^pMiW8EIKQnY zM}jAikTK7NrtGs?7S59YUBpkO>{1cwK?m1V?unSPBd(x^_j}aKlIO4~yG=wI(55*? z-oue zuap-lG_$pN)D6b#`oXSmZoIGX!E_s};&f_-G2R*K8*g&oH!ok?N)`>~zl=8}Jx*xU z_ptG~^GTzg2aNB)M(K|?2nOsj<2zqGoX~JcEs4?2r1`$=d7xf7e#SRdIA&1qc>2DN zImY6H`g>%dZhSw;=K$)R-_^H3^4w4-^}EB2uZ@cXFF>911^Biqk7^~aMW#J${1wu3 zC;v9lwx(QR{2>YIL;b5Fpf>(u0fs^YV<5sA%m3|Xe5=%N*W~t9zU7j0hDO)_ z@aw!9>hyhO{Evv=7FO_a_Ko+9|3%^I!r$rvH2#}(pEFaAi(q`}K?aE@wN5p@`NA*8 z8E)U@`%3#0KPwN#`2OHv*|WGrxrxU2H^(I}#(Kw}@ek#T$&=XN_+|bw;VI)<^$Qw* zQoc91zJNbKADF;i!Y#zMVNzf7!#@=MUtkmLLnprB-!@32DCtzMXmLMEq2P37*gzr(cS+f^Q<`QePq-&YX&o`U*;M}Y>?2dAPsgl#pH{}@ zqCmb0{XSKd>3%7z{!>$RI0t*)#~zqX1k)N*bp;Qq*J00{vNttVj|l(=d%pdeCX~6R zio#>m|HK~U^O~wP;=RXSiLpLls!O;zlpv3w2%pF|&B4!mvG;M(Rh=^3RO?)o{1Z9+ z6*AQm_vJ4%ZV+wxZl>l1@ebie8IuJ~&0HBY;D&LMBQQ17x6y*;S?rg1-f^ZzeU{jN z$^NgZ};r(Ik|6C3vv_H6&n||1@zB<}Z zNU#|P96zu2Wsb+)f&d7YeLD-YRnV`kyUm^fN`sdmtp9(VK5${ecE&F#Rr-otFDiw9qi zVN9R@)YlNNGDbVw`4?wHGh}{)QT4aj&@{=DVMOmew9iofS%lN<1xsz{Qt?S)mvV${ z=-9D*vcfLW+g@x#qa;v^owEM8%Z7@iABP>9gCyRRem^_3KWl^f{Kxi2IY8T>#H-H4 zc0FI);55k>VOVoPuRi5U*S4^e%gQ)9xkqRKI6c2ey~^J8r^@={z4u+*fR1Zda*CE zfk_{+5fN9rKYw7HtJ_`F|6^-w82i{cYln(u#}OmUq=O>r;L+{zcUD2X-7{eah{@g@Q@E-TMBc zzNh)3(;91ivVIwX^Ys2=eS3xbpja1-)@)1sP)R%dmsEo z_i)xbO@6QVll%O5C(9rXzt?<#^`0tydt|y$ddXJn-AB3CpE&=qcL@JF4#D?Xmzz^( zD_TigynQjg!nKnd*Vu|*8I1EF-Zr?On93Kc)8QdLcAwK~D{kV!==m^>vF#gTw&LFb zB2>H$)0K~FEB25t3Vf>EW?R0U;_oN?4PPrC-IlKs4my0VTr6Auoy_^*C#g>jvE|PY zX5_V%@XH}045I!92Zt@pcD{r1V`Tpbzq@@yx&LJb+kySBwF3x<@CWk z_1js`^j&GQb_C2PDit+=t>+%i<1OIz`CQtkI3M6b_viQgQ~E9Br`?mjQ5V<|BgGp6 z9hx7urFcz0RXYcLc((NBy{bb;9|avURxh!owX%o=t#h7hhdnJ9Q)rYr+g)~;;P$Bx zq5V}`sLxesqK6bE4{f3D$)Jv;ASX}x+m3ud{jhcOgxh3C>N%S7H}X8TBUVfB6dHz~ zO(3_l9r2{_*Pvn0k3mwu>ql8=WL!aa+Lnf;NCu61ezm2}=h-9}sWWZqQCwVj1KJte zb>BK$l9Jp$vASKDI^-CUYm27~ z$cuct()Y8)VfE*ADu2h8Zs%Ct?$9Y3my_)X=Q-`texog2z*LjO8jxoUlbj+C3h+>D(Rj-!yeZ;VNzl~m)iW#lz)}d zxth%vead-|a{l_E;fLvgH6BtjmcPahy`765A3@6TxP}%>a34}!k38UeJLKiivcieC z5Z7DwoOa0Wavp%R`dMwBa_}Lo`AM61pmJE!ToY|ToBQreGEE!$uWm_>a8 zJ}#~L-sU`{{>ilRG;GdDy)R^VZMx_$+)0)o%HKeSF}>fufIEJW?-gVw3vds&yZb;! z`CGXC9~>O6hs;8m%i}h#?NJ^pqy978D#w$nAk)>#Phi|KPxFi!&G+J#BRLpK`-80J zKsGxcN|v#@A3chj2Bb#^SvT+9bddHxvdYWFjW-KN8M3;6B_Fo(I;~EU zcyMgV6IPeXVY; z1F4}NvIcrRvhaf+-5k8{7n#fAYl0U%5c=rpNd$i5>1C=k5K(Jw%X?9223f_mlLLQ4Dn&~)hQOcJ902~Be+Z5i}* zLW)yuN7ccaP2$U={*fG@pjG#ZkaFJiHu+i)ft1UIw=<=$A{SDcZ-5So<&uxUJs0cv z_4MP15SPc^@zAKA7jXGFXm)e_xWtDqg*B|@Ag^znv5vG?T&MRd`tR#rux;?~=e*2e z&Amcg`zX*MSW+*K%oc`qCi9I}uoUBZ=YIvQuCJ34eeVQl zQ$7Ik>9nWS?tCdJ)@VK54;>QErr+PWGIxM3H~&se63-$;lp_MEKYSd3g9yh54%!SU ziSykBQRSl3^G0*Uv00Z=gCz|q(WvA@La;>#K+5F;x?O)IrFjBKx${Db@r?})ka2sS zl=E+AuM$omBt&doCSM3q2KMh zlI}e@pt%+D4e^2bY8cQSC?rqdfYIZy;pYo^vjIuxCE0i*9}HvAt$7aEw7bqfyS0A@ zo22f0AoVw7UIv?$;|vMW9G(JOqUrhI!*;nA z6hODmk6?RS9+Ot-@6Y1rNwDKb;#o1EWShy=oHWE;zCEvs3&TG^{AS5{n7rF$F;6}Z&70@_O4F^$ zlOXQqXG8Kdj~pk8<2R9m%@D^|i|hTs4B=D0?=gb0MBTon@Ft=tkDUM!%~P4eI?1I%Ct0rxdyg^0j@XTEva6uuM;V}-VQ&ej96IFd zaDXW)lY=j`yZ^lC0rB`iyI`4bHAO4buhT)dZK^1l;iB)@1-f{hvvIi@-X`7$h{)Lb zI8%JO`hugZDV+YCDOPSIBt&0upD8|z#Z@~X#jUi!qh`3vi)560W{SDqQ2PS(KEp+` zH%v)_A1{|d503?BEi|Q1N`9I8L-hK6r_GEkB+AJxS3yMg;b!CwaxsA}?SGq*Z>gWI zlczMJUpFIvaLDgWzHy5Q{t>pwYy8Yb76^0AeO~qaUqKEa4H&niv#xuKSpe-mp zXj6W+1Vv%xAiwE+zL-pbb-cz(tTWzID8+#BzK@{52LJ!jBgE1z|>^4W}+wXE-c56#OYS8cr4^TG8VXy)tQ z`5zhYbNt{mu!^r=OI|VFPyS1RWDhjO7|eN+@%~QK)!ie|q+TfFRsJ?K$y)I?;x&oy z7aFB5ejf3e^u5sF^4PvxgewCLGUlCRd~a~Q{X}R`o}}@8t3Iy==S%l3kaILNNbLUz z+D8Z|1L`@}dD3IXw_Wa4Q15&${-DfFp+P;c#$P4pPH1B4<7v6Zw^a%#(CqeKz6iBi z?tCAb^`2;aaqTfS=-kQpM=1Ytg?hw{e~ftBV43D*jsGw{@Er)tINlt2!uZu&0xP)v z3ZEMPRLL>J0_`sw|NGhx{8`Vr#{Vn>8GpcAf*kZIHU7g%H+<-$_=EBwjsI2U5&fq9 ze&hd6`Zl=Y3=v)$|JxT+6Z;2jU>nX+QR82(K7nSAr+@OS2?T}Lg=@K{o}Fg`7tJS< z+n%^?co%`uMw!5);#tIXZvGkgPUd;<**qvr;(EcGo?rs2v{&1v^B5Cw{EBv_ z2HhMr!INdrf$fWBAZ&tn%ib6}{w;+c6MTcQFPCG7a$-#ISDn{&YQD$>*DK$pQ`We( zCRD}&rE{^%J#Ru|`M~-LcFC{xFcTUp0cniznB(vc69PWq=3>P8-9zKV(~A+uy9-^R zz2YdxHoePD=z5~&k9v*xFT&3>p(o@%f-&{9o6yHH0K=Huw}cj|=P&O5eM9YQCe6;@ zigBiW?*0!`DeI`on9z9*^%F#3hY7B`&Rc9M4;KD0b}M()RGuWD98BuD+*Dp9K^odm zNFmo$-YfG6Oc8X3jSHCnhjnEjH*g6oo|Y61)G z9>y$xeD->r_)5|X#OzL4?3$`4gddGPhv~kc>fKge2x0ad^(j>;ha9u=_1(i%ZB`#| z&sfRFnCfc&8(xe(V}%26s>ev*3wzXSXsS<vTO>e{JV5%RGVjlLs#Rs(Erh0~) z)3NspDG-`!vX6iGqs`5gPs8cju^`KD$v2XI5!r+GC~Gn+mRTawtP_kL5ecKWkTm*0*3 z>iIJ@+b^Jo-B{Xp@PqybQ|tC)eO&@HGqrojK^OZ+^2H_3)E+MLKJ3@|g{i%QMUe+% z|MH(`5Plxgc4eRBO|e_^6}EDJ0u;#^V zaLo-Yn87xEzu4e!@`J@T#$mjeu|eJI<9g-SS#D{D-+md_>3PEjCn`5%t=q>0L3on5 z#_f-SyJ#P*Mc>~xuv7lUakZYiZJ<^C3C)6=$gu&kCGD7T2dKd>;N58)NXMpM z#6wT~D9KA>qx<;=E>eF)!!H7aw}H`;G{kzT!5(V^dal4a<>OiZ1};YYhAa8Cvd0GN zZ(tG9>9|7ogVz7Oh*WX8@}RB%MagyHQjRyLKeYZEWRHYP^nPajr^w<9|I%DL^)005 zkBcpp4;br1v?7Y^(!<_{j$8iD{X~( z2H-uNr`U?0xv1R?|5Z+pt$0cNNbr@^8iKasIz7L9r~PV3ghxckjaeV^L$ zfp_T-a4pPo-@o!@B2>Su(j_?rR?-Tue(t9;+#ubUYxx5#>2KX$RsU#;g_ z%@_Wyb1v(l8#DEiV5$0ht%sz}p{w?T<=VfsWohB`!wThy*s}R@v4RykN3~_|i0Bbk z>V3qP-Nr!&;%;#4Ej8Pgox%t2`=L$u`L=A9^s6AO&r@6WxaM)&wNGoyrpR6&8sr-0 zvm;MZUqhqwbByTc0n3xn#4YwAC)p7noVf7HZ*m}_=RI3CS^Mv+XgES(S6jMKa^KL* z>-_h(+tLpu_yx`G_g8wlfFH>}Cxuj7vRQ(i(4pRCTk<)5dXGs%htAh*$vK44x(uO{ z=}O1#up=K8!!FHfgzITX?mv*fV#@{4rS~a2Lg&8F#qsr-4R*xCJiz=6B03MTr5`J2 zJ<3-2nr*hk@jBu>Jvyn%7SE>E_@ouktvnH1^s#V_Af>)OTNvcPaw(+llXH$OaD1+m zbh(s@Y+5AFTEI?W`Iet5oKfc#2p+3S7`~2K|vmGk&jGG{> z{0ckdM;TN?+VQA{jFCYVr2mk7g3V*g$Hgllt#c)tcl8c_(?Uk`@HTg+@`y9C*1o{z zYAyycx@WMtnva2u=1XkO$Lij zs*j0)xPxPFVwaTC`;oFTn-tXmtnWg1t23B?$MZVe4&i)w=gC+$U7k;F`{u86>ak!kl~o#!WS{3+*RV{ z^XuaV?EK_Z{x^nfo^m8RNJ8L0NZ%L3j#HoAUx2Z=Ug~L=LRK`{ci>w6<3aWg zE(raO&5nDLeM1I}*r4|e;^4?$5mzvtE%_Q`7f9Y6m#8Nivg%pI1x#~1>uboyxS;e7 zTIDiAcAGo^@n`T70X+|Tf<*s2`$3fT3FSR|G$)JCx!+gM11xBN6`mcOn~Kiqc6h__ zw0inPcmnSUhUq%!b=jz}zc=#`9RxcoAhjD?J zxZAo{hm6z{PJ&kTc0iiP5=VRhZOUzc^sL+H$+!~Q^?MI#^*KU^jE4?|G{^TIUqHPu z{e7neBXTxG2Kz4@YyV*j#5f+-^97^_bKmL_h4fq*fIvdMoedoZow;6Li{s5m!#b9FYfjTX^9;l0CDHJ&hl&R#I=yo`424PKlP2|n-Q$|Ww65S z%Q9}i;=EyymgDm{XmUOj*q=yCf-rAJ&M!tL9 zZ?rrAb=vs{I{A8V_BKc}K74KmbP49@Wa1{#w{qV&MCI4^Anhypg?K!~)N=!Arq+)9 z1RN)U_LbVZi@TmmnxuR5e*y{3(LtKWsM{Aq@{!!76W=6`mBc^~hP39=X#XXJW5{am z15z9ZocR!Bmy7TLQqHf?^QHC~QoQxLlKK!&GhpWgNVz>s-^p@+CBKa38v64zf1Mhw zbJTu)4nj(>wZ$+%R&`2H)Bawbudsoi%EuG`&h4=_3yGWdg}`*Ux0d&(s1<9_OeErOMp0Li$Y_DU`;5_J7o-OQnlNZt%=ypGsoyYOO-w)k7PlTQN9))g+<@-#| zr6MeWg!=7FF2`d>#Ua6K^v;h>?$dJ5rM|`kU!1Y{IFlO{5F8{NzasC1OPKr)3H2G7 zy!Qlz3klZ!^=>gk0)*iWtbznlFewpYhHyOW%V!{Qd<8WIXg|>_;A%*WlK_YrdWS6f zA))?4Gc=-p@r0~hZZ!GFsuv{A_Mr<7H~AbJ*pY#_#M8!@{EYJ7n|}}6TmSr>Y=0a(!3=wZ zg(_!3r+)9vFwIXwvV}`qYP`C1wP03RJ!BM`3e#lfwGb6&%n}K%C zE18i5T{tf9M`(9GgON*E?64=aU-a5O^#3(wLH;6+fOf{hWS%xL@ugG|Is#m66K86<>kAnT7U21+M z#`B>(@FDE-)gJY3Kv;Qz#*<-v=dI++lfsoL_tT$d+SrbAWRWR7vJRay1qR~UtYHk8d=BJ@v8A1z=Pj0(8%M|!XJ$9IO%mjBWtMFy$>FLYy9rKymDVz zP#J&M$)EqW{Zv?_y;0*|FF^+Qndz|SpJDtz=(+A&-4D}W%l!gBlDgIL#vhYl1kQ3k z>_CqA-*AC?-Aq7zHModqaCDC{fk#*$7Q$7^cQt{pWUz+KQma1J1ZHk!!78>m|4e|O zjimO$wfbHopR|C4aGmR;1=aV2trAKS=PG^}H#?cIPV(HcNgB+ui;tI3R^UY?tHl+0#rUCg}j43bDRPHJJH;k(n$yAP$ zg9gSmw_qwKs&6>1JYZ9K=T1&$U_!lm#7B}M7WFBluxKhjRh~+B-(4);B|Z|puIFyT zr0Ww_rgfg>@`0vun+#qtMRo@IN|-9`ykCycqP5FI%`*rs@@wlszjHWgISj^s4kPfCuUqftojh~5u)hZs+&ypNy34^Y~_Ae69Uy# zU#Pz4>{+@$s=iVA_}Qllxe0Bmr(DK@B+Mc`2Hst0s$b^fUnOyibzfAyUOjxh1pB$+ z+2c*M>yh^g#^pd$Qy>=$+Fwvj<+V>uP4H{JNMf(fo5)`+K@99|eVPgJrsg!lp45MX zy?VbgHCKK{Nzf;-ub2z_NmHZ0XY6BI^0BK;?HJ)(VxRJA$rqtMk-p_z03?6JmHQLv z@pSB0pQow4m9=b#VZZtXO|AN-u>U^sB%9h7qRUCnGR`^=2c%9i!qjSkA5+>d zv{f^u$Ban{aQ|(q-c`SJQtz?0>QOoW4fcC%)pZ{(`|6wb-n=IvX4--*a50JPsSI zUO*Fw0&E)eX>XO>GBye}@(>$Xt^39X&F|R2OzERyJ;&&qp0j~zIwz^)xOeIk8{p%^ zo=@XSUQc$fwt+K+LyIdeOmjff2KE;Z5-yW^fZqm&%g^n9erbPHbH9s;MoGPD>z^k8 zTIxGUZqNEZkb^req`w*Mm8ow*bj9(@aK31Ha;*P+-3QI%f6aHvk8!BZ-TsicG5Nhm zst*SBUTb~bjGHdP*=%z+S6bf!*1`1iuGlH>6PVE>9v@pFwTUV4 zqt5Yc#dpdpnt8S4NNmM36KMi+Kg?piNnn+&xSS~mTVami2hX(?N6TCo>}2WP*@_DN z_xVG6>bBg?zvex~0kRRce4cm^V7}nc?y%(?m$|7M7C0YzIZyR3XoW>Ohq2|SXny)H z+REPb=Owm$_ak|8155P&XFZ$MH}SXLXRT+240K?r`t*n|MJdXnhhaHW77y;Xo(J{5 zxPmqF4PRK#xxDz^2rG$-e(&FBSkJz)e}t88-{r}p)Y3`wpze0rd)l&Q$qhr8t#1GN z+IrLz4q?`U`n8Kysq& zIc?E5lB)*i>$OD_LK`Y-RCuTiRQPm0pUE@+-vxOu^;ho zB(Q07i?|p$39{oPuV-_<6u>xS$4dc+_7mcjgseWlaHrK^MV8Yh#WQioY7x6Y_GSjU ze1+S0sLvxig(%^*N8xsmxj1BBmV;>w)7Km%QoSbLUtw9 zG#=TGTeR0s^J;42O*|1dpP~HPo}738ebyuY&(nFwM_FxaIH80D2&QLh02_$Cp~u47 zb_FZ;f(08W_Ab~P_Fh26uArbu6-3vjD!nD41V~RNZRY!CLT_i4jrX7X^Lj1^$jtZc zz1I6a&(FAnbruiq06!=^6Wp$Uui&fi3%4y1&K3By?I4glZr#tCl54=%eJyTvIeMQ@ z0S{b-?fRYuKT~_8snwDr1g|>-Kn}&!X*%~!@MHI*4VZNM)r1@~@1Y*8fWaW4d_DAg zKTgf@YDjQAVHWjx$!>Q{#SBQu8aN*lcgg=ig1@$>Ca_JeJ7*CuMh2|ZOXiEu{lq6? zVbihLqTCAbly{F!x~HPPfp|PHCRnmd!FyG`YYmQ<-m;`)pYPCeL{)e8^{+e zgFo;zkBZfd%RIi0=8*C|!OCj&m3j?STU$B@D|jt9{a^5y0#85Rb;NWW?0mmwbfcg&d0>oE;*9AlJV!7Yps27VC6(0N(%}pg=fzRr> z29knNGjNpVav;fR)yKAjqz^9p8j_A1Jwfk}knGQZ;6Gu;_i|naU-!RY)w>72^V%$O z?>B#t&fAx>cC^!e@H?0Ae>1G+>EKNb;Qga}^HS%j_C6r$$|Lu|I;j_DgQvVds9}Sq<4Wtx^iEB+7;?fN^^+Q-xBqoV5ZKYAg=jsnCmglX>`-KEs;~pOb)s9P)kTv@ds8LTXI369;$=9|YBp5Fq`vB^h&VA(yNJRL9 zOCApGc|k(^V$=)a;O0*dcYToN1D*`cA4041-^9l&*RYMJ8-s3!xZ{2$dP=?v;_BA~ z@7xmz82=i?`I_*{H1Gt^_6)?`pTido@HG%uzB?pu)qHK7W8HVOLCSfgqysPBN;ean9?&km7FW}-V@d_Q+ zZ3jstX_O9a+@9-mH|&_^`b83Zy%TmiuS1)}Jnn#9eHhF!8`|{#PW=esXhIuVEuNb( z7Ir(2N}D?;?NLq(v~Cm6DeOI5_e`ytSAxCqi3G^(39YQPdv7A_Q{No4DxV+ryPtcj z_B~BnNbVWXqUTeS#@Dz%$3Tl<`umu)jYPfeLwSf7<$`9?b#DMI&R?7UlltCU4(uax zgwFxZ+eO%7I%u8~S~NdmI$p`e%hAx{_{<&Sl6!&{ImSL~I`Me2rUhDLjCPXgY%w#+wgDYs# zzaNvanCnWoNhAj(Y=}Ts+i0LJ!o^d6B;x}VKQ}ILq2ZtTbZm(E}jjA2A2oVdP)wY&>%71 zM@-gMJ&zyYmvp^V#B$J}&neS&irm+sf!p0j3^ZLehX4(Fel*>pqfaM<8u^Ljylc8$ zC&e;oW;{jmPt%QY8fQ&~MC=P@>ZZ`zHmHD&gs&tflB2Zo9wH!x3@{p$EL>vDh97n-m}SRks?0S$}#<9lY0#> z7Vd&t$H&Umc^TBoxa(+>`&l~)U_XaieO{Q{TV#<0wVG!!xueAE3blIQrTqifh3@XIc49%`=FF-xeLo_|4>4k#-UIu z$F;*u(Zj-NhP8TLHAUm3PzI&EK0W(4Q}mtm1)$9Bn~LsI4q~b1c}i&rw+%$pCbSu9o9~ZcMf1ryTAaJ?ns!ZU2;!nht&hH)Ia`2z) zv78?>JC>TjIl>vh^=I%4g?!OBNT3QgNSv$01RmuB(|1^*xtsrd(3PyUK4y~%1Zh3> zQ5>t?{J&Uxw^&W^A^PZ$??HTwSVgIU`EPbM0Um$snupc;`!K;G#=ISk)!LIb!4ri; zfHm3+GQlg9t6JmuYrzMF2Z^;DyIZ;61mCayY2){Mu~zE8{m8!{oM5b@^wK+D-Anu< z83bTmi2nj_HNpA1PpBif;pG<=n_!uoYp_mzRVL^OSPbhq?yz{F2^}N_2W-&ZH}x4v zoBnzwHmFz5ga#}Bs8M_7#6wb_Yhx)30e6u9Sr&~Lb9}$hPh>wG_9Zq6hU^p*(w->I zZv~8NLQQghz-HyYn{Wp%t_85!@$JHg5RJLu2W*kC%_tM*r}g<$D8DXq66z~RzYJTY zHhhu^-%Ty*o+)f|`?K&f;={r=!B1RHK4~uCmt&l3Gv|M4!jojMgmLxEnebf68DfHu zamzQGufG;obE7q^}+fpk-{N51FSs^4E5(f25}YJSj0cltfAl9Cs?>f*9l^S&$6-Tr>0@>DTUaL=rSoj)TM^k}t@G`MUVdoWlV=}~ zwfQ0_v!OeQD&B1y);K?NNV#BG?SB8EKC%bFYV{7ey|5_;hJ~b`!@JmGY^DuGq0rw`8KHBP~4;*LmNC__k9&S&K&){ z4IU=IB@J)kkphm!oxK8`IHels@g5{cbv4L?M%Pqk&{`mD@bnaS-%N-x3__bAhQpTnKim=iaYfcFlJKuS+5db&-qka`z9F`Xi zF4BFjE!xgN{TEPieAnBeHR7$ndHTMxMZX@-=pD4m*|tTm3+D{~Vk&6x3iT@yX;Fp4z zqW#1RWDP%~KfWuNxTkF4jdDN58>m%EH*Q;alJq2DG`9r$9Y_9c*&D$auFb~Zwgrvy zoPh5%k4XCp7Rx;hKRfOJulKLpf8FhIhgm-CNk)d(@Y`mbYiO^`$Awh{pPSoBOnIBcYL~dJl|0*5+Q3 z8cNYhXp{vz`NiFwB&PWpo0}^+IcQQZ9r?rMeGW~UTeUgmR6~4uD>RX9nG7>F=QsI_ zf=$ZHCm+R`To8m!%5${Y59_>tvtW2Gw%H-BA$5fTK)uvw{gJ|%+ z5n!@Ss~N_^Zpycdm(r$<;>F`rG_U4hbSIl8HK_=A3-!IUU-w|(5&e=Lytt3A)n*&< zYb4i&d#8%W8hmakrKRDX1P}bv!Ph(7hsaDUXf41Qyw!WU7y7} zj|j ztH3`}Ks|Ks5g38)BpGwZXqn?!VaJ_zk}LGqLWJ?rb&%|K7+sNB!_L z*6_GDV>|eF$siIddChh5U*JD1g?p?ZxPH$;J?ZaP_N=&`HP(Op2|l-fkLZS_wC$Mo z_UVw+ydE(_GXg|TY^DJ28JO=(aUO)5% z#m%1&zT>#BRxSwmCCd3O6`VnkzAs#;y9w5DoOSDb@aD;412!u6k-ne84}r~&+vL3} zz7nWX?+$p%LxvhXe^FjndHJ=h5xIzb2v^B{59%|=cA)AQ@y%Gk_8Bzjy&k;2FEV%q zoEL-sS^EY}`d+8~huqttMb9nt&pIbVbEd^x7fL>mkJvn8)>-iJyZf@zE<`FUqYq!?CI}M&fQRbynIl=bGh{zS{Bozj`o}4 z(Sy1!;x_}Yqb!)9USeC_AmMsFjgAYI;Pl?b>mbI*qTBzW{m}5%qw4O2X3fz+Li4cD zI!O2lwC~W*Pn+ZaB)B%c{$+4`R7f~qw0Dd4Hxr^+ItYBtwL`-7IDPd-QU8t?eYud- z9u)0^qz?(H8(7yplJ@O#0EKqGUI)fg|Lc1;en7kC6d|tXaoDP!Ux+KO8@BN=@#Fop zKavL+Y}dIQ#Q7Li_9JXh33nUf@_HEzI|TpJ1L6_~9|${hl)oNVpDFAdC&dDYYu*8N zaXjsrk0Gvkc-S44b0)+&R<`jy*i9BJ?yt7V$7e9?`CHCy&?eg1OJMIr8mB+g1Z|?n z7z+FD*8F(e1;0|T?n2mqxz5Ymw0CIIx)Ofu)z6^S@fgx>(!EmauN>TLFln>pz6h;+ z%{z{K5#hnSVS!e``aWXPpVae5tM)%kdYSkI4{*s$hXEYy?FB9F*XuAvf~U~J81~C6 zOvi{EoS}uWkl%WyC{1j8PGB>mp6{4(@c4RL(3;3Xf>VlMc@D} znl~_=pAyg&v`Ecji0NFTe5_{21Ijp&AA2L9S@T3D!+GVK^Fl;s8*DPQn<(+t9&o6JLa0s1;LYR}zdKF-C+Txf8< z%S<|~^c!{D0O6ea<#2C(mS&HGcey_d?_AUlXbB zHj`B+0Ay%X{+8+5mjxTMpi!UurYl=l$T!h=gA@`>w}G!R2@V=%ZFPm|_N#C#ph3MG zrhB?_)*97!Z@QnQ{~Y77|5!BLl?wv(`!N-o z+cUWxMQ{MM@-aWj?cs;Dh|% zP%ZIn;zPAbUWYYXmMPNeeoq1^5B3LoQZ z>2N4pDx4Kl_=TR2%Xkbw;}ui5hVV<{=0mB@SBTFf^IIt8+T?^irYI=9aagN!R#SAb zdVES*S6{K!6e))YN|gs;ie6B@ZmDt`Owk0sww?Q*-@0gvyeO#eFYjAZY$U%5tGMPg zz?$Oc<%13Xu;%#T&xvpJ8QmThLSGj#pV3ZU^u+-)I1CMhs^+haG zezpmGD02i{FJpP~JCA$yr892rh#QorXaZIOL0F+ZcoV47`PU}VJ`OVf<$ae)pv(mI z9*>oBt-Q$u&yoQPR>?8zeiOWf7ddrUMK+7C{(iy)pOO6~R-Z3i4)QT<;R-SF*k$2i zf)iz*ht=u}Gr{qaf5U3N#-F^$1X1}+HJX1j!41+U!y1VVWtiYLsz09lC)S?HAlsM; zX}<{T^ge7thA{X|?_eF{ZhrcL`V8tLsCWIU(7Oz>djuPFo@qkga*%v5HfS!$gjPxM z6&pX0y#(zOSlsvqHY(rNgo`v^8*}}fu=+tUCh@0Y6BZnMCu~w5m>=2EH4FE)neaz9(?EU`HZvvl$fL*?P5SpMYq5oG7Kc1#!W<8$o_>qwb4^%t z{n#osoKsDByUyd=G(T-3$_v1_^59LRx6XItnp-lF6Qlr)abDvLtTK^{`HTHKddi0< z-jXch(HkY+YZK|j$EHH`7(2Ibp@|$W;B@pV#Q$a@=PBB(RY5N$Zjd5qt7L|X zemzWTPTE9Iqm=E4>6qlT(f4aj^jQ&8U{cSeG9?+xaY$)D+?4cTU`-CTJ3mg(EUsyEKj4)#Jx`YW6K-|y zgPvUT`0;COar3aqZw%Tf!4~D>+Q^4;{=sJDMBB&{gy-Bi8=G^4t7juOGF~MMoAmu^ zBLhftU-mx6G*4qAy=BpbG3^W6NGBG7AvS8S)P~hJiH+)~vEjwiFT)1)Oxf@+$}z5I zyx50ZXrD2kJ|JgeJ%y;B9o5B#ACQ9?)@km>hA*eJQR{xJb3TLc@r;2!8Ef@kX2W^B zsHnsm6&l)5>H!|uV2%3!Y)D>5Cs2P&@)0&PO}{VI+E2Bi59Ps!Rf4lU(S|gif>lyO zp|tyzauCBx=id!E?)GM`slN1s4awN=0o=rE)Pm;`Om@e^r(A-NJP*YlDM9xA_#&Nq+2XO1hs6c@y|%@V zQLE{we4Hnb{YR;9aqVh~N~2Y-gDpOiMZqKSZ>Hh(B;Q46nOov)H@`2cl!H9Z(EO1t zn$=7I^KLjb9MMlgp**t{c@x3Wg! zLZ{l?ed>c)`!R#H|FXGqFgpQCFA~AF&7E)sZ5q2nDQkttw@{x#cxX`Pcxib}`s>vR z*7hNrH%GmVb+pB$=8nyi_3i^uulYHfcc=b5>NVGD^ZHk0(`pSG^n69XAN}&>q3lvApC=4Qbb9$|CFD0iZHrS#Zs&JFIq%)iT+IW8Tx=CclH+yP!&H;1}5LE>~K`^sYzvAV8z!I* zNJ!1*TAS(k4++iH(td&mmT!{pKzjVtpP-h}$Z-dFMYhWqWcwI41-z3Opo_MPkvr2A#>IR!0rxxpkMExI z`>M~R2grlqGp_2;skkpFo?`GH5a25Ab@N`IV@$~(anER-kNTfbjQz)U+|9JiYd-|v z?TvS74hQ_X!o$H`ti7sS0lviWy5Ua82l4s!xal?A;rzNu-Iw8ZuJir02$H?!;DXzn zZ!me>T7KfCXoqv3bKc{)J2q`h;IQ^dXhcNZX3?jJC z1z+=Nm~2vBvj4E;%rJS01iQfhPJk=uJHNL-Q+*9y8G}fVr9Oaoo9Wz0xV>33XkQ}x zVT>zB4Sd~?qnmqyuk##iaa{OhC(X??Yfk`@GB)UpF^;32`8gz&4~-4CYv143=O5M` z_Yr?%z}LAq^&`~B;ct?;7FNn@;1Ni6=fdj>tZ?)2q|SA4z4qiFsr!5^Rqi9CI_S@L z^#$S^gA}KL`+kedsAWKgGf4f9fju*Dk*xQghLrN-(K;S?N*)_$;LJ_}R)v&)Zg2w8 zD6+?#52-7ppoIEgcM7Dg|A-Rkx8c*uWrWmI;)6x~l=d`J%9LT5)<$nm?p zG2o|UK>^G7xVEDbeExdP*$b;>t)2tEu~4tQ zDcU#k_2pq`a6Jf5@2L<|t|53_!@B+rXwsZ3`BRju-okOrH(mqp?FX)+h#~dRMC1V8 zTY@QrxWuWb&!hcMNW3pEV(x_g>%t@q>V()3}p(Z8u_|n}oz?-T$?=t6W@`&n0o;g^r9D48sqj?cjxZa01T?WdqMXv8* z`t>CD0#(lQ;kmt8jdIk%dsF5qP$znXk+iQ=4^V^lqQK*0(g)k2Q8^#9FOh*DG;uwD z!g%80X-}i&2oaH!A6|rV&`RwV`e;Hz`_~W`EOqcd-dBR-q%VF93D+y~-c?a(f*-%B zt>BY2=p?dJ`m^_kQdB zZ&PDu2_!VH4cpv2HX$F&!(f{h(;(q~F5BN=LCQ2p@Ve~Nw_(Sr@6p16{ygq;wj<7Z zbmGyePXTr+XP10O!a;>ynq!8zT!XKH-F(emGZo^jd-M0fo|^;|3URk*-K)7L$&5hT9w~wI-ak-hSrNDH)=Zmd>RD?wD2;ydXVG zXqMOh@g}2G^ZU(YgP@U~>C#XA#Z8Xq-{mDPrp%)r6d#DTn=Vy6==uj@zl(s)WV*aW zOmNpnm`vAeim6B0WIDf2jK@qBOHI}g>FGjj123FCleJCr3mT(+(sX^3acx5&=6t$c zm3sh9y6-pLPSbo;v-ayv)=C~+N1^qMBrW8dOjd#1zu`dtCCl-u60FU*@dc9^WYO6( zkdQj&r6$w)ks34?U=Hd@R`uY!5Ys)r>G4@BlYO8`&zmOuBH4>To14dWOVaD)v)7@8 zF6WotiKg4-IuvEobC8Vjh+nGTXLHam0@5QMm3YcbPK9_Upkb8E-A&G1eUCIN zpTOiEC&F*2(>a;R-7TPFsH1Jhi+{gma=%gUO`YbqOztv$e$x;z)#~%#CZD&lf4H3cs3P@z0KQ{eb+8{Iyn zut@tG8+6}p3Qtpy(*~)FA8rcCQb~^jSWoHpdp=B=!Z!qf2kUu#p8F5&8-$+$<$A6% zg&!-wtK9i63csgu#nazHnes7A;ifYQKw_XwY5;krD6fzbAVDb8bDSwUQHlmo>VCbV zD<0-1B9!X6&J>NHmdvR)K`GZLE?;DdUe$eBsbG9YnxbD%HuC@z?@xzcN{l z6}OncysEEa!%l*?21`!V1hz0(yaP@;U%VG4&`33=*!BRXk>YdxZ(S zr}LyWdfzdDPh>BTrJV9DKGphij%ceFUvGk6>HM`)^R?uE zmVgOXY3`r;3w*JDndX7Y3ktgVY?a#|26w4fu8JvhLk}`Rm*=il{(%Xpw*{-Ur)feb z$)Xf%q`rN!30)<9F07SnH2Iu$4~ezT-xB&t@|0Moxik}6B%gn*S09xLCFQ(~_4@ud z;jZ$2!Ump7v#+_Y`U)Bj^bxKb&6723WZKY^N1O1Aa-YXW{#bYZz=XB;iZRw&Y@TGo zR{1P3z4uW+LHdZ;q&!p;ZsX$cQf$^emWgy!-bpi4GY`MkM0)jnj7GKC{IPuD$hRQ( zLu}zS-mouCgxi5MFK!ln&Gjat&tGg-zkrEMS$kvR2NS==GEUh>5sdoOg}xt0N;Nw@>^h;T8~Ii66I7^c)W{ zGUj9kc%fIdkIAkkGK=sLFN{G?uAk>pUqSAJ=pDl!r^if`(su-yL{EF{CVCAoj_yWJ z27F1&Uz1;sy z^mf9$FPw{h4aYW4HqocJX8$ZEBRo#(Y@(kCClHfY^8#a#iT)}BX!177p2S3z(}+pu z4=L%$Mb@2|biS#QUg|4Ox&C0!Yx#hX#MHww_%=Q7Vxa3lOfBLI?_H)R)ZF~*wB_kXgH&qY*=jrx7Dk!K`Gjtv`RAz&l7D8H?Nuiwl6wGp$L zo4{DFy>1&hSbSmRo0forjdUdZ;axw__m3A2!)>^BHj{9$R$iObpCHO1^`WUBB@aj& z{+Uua;(z)iVb&= zy&G04m)C}>#2bfO9IqsV%4^!Jxk4NI@}I-zZ;9b1?d{so$YwGd(@0qJ5H@r@*Dbr@ zMx8T|%2)eu8yufJR6zQq^S;IPoQAz(o((3sFjR%*z5vB+aHZs&P-8TR z&cu~^p0^VD!EjrAiuS`MJKt_`uJ9%BfX|^wIllM}V=~@+k@!&BH~UC*HdouCFJ$k9 zPda~X(W5$tcwW7+w&;?9{2PK#MznJ?-xeJvAZ7Sgy{NWuul)RBf?QXgw1s8D0fEVy zFR+D^G#@fm^c|Pk!dFPgmGceEaJ>3Lmp`AaoF?j5XrAdW3inf=jCfFb54WRa;79%n z*=xeQ-qO<`-?sR#VZQPaZ2^US2_*yz)!%3f?po4u!Q`(%u6MJi*n%_VeGLB!w(tsD zkk43vdtnKu5xd@P^P4y>+Xt4ip62R}HXj-68-?YXU$prjt8Z-u|FYx8*!+8`miqNd zSf$=hn}3$i%P`;5T~Oyia7%4{KeY zChy)MY|4aEqKq6F@&S+%BIJoA;pdzhjOcm+N@)%^YKVdZx|IRv%=O z;PcP3c|D1SapX17M6%ciPup$tGDH*x&3Z1O{fP`-pqbYu-KuTwSO)o>1I=!~m#ce4 zXx4m^&Fv?mbZFtV+|%FMoS5|VLFnK^s%_2$nX5y~HC%xB+UAU)ap~BPp=FeO@oWy` z*8Zx47PtRAD5dxBYMsZ~>{Is9=IThOR^Ec`zDeF=Q0@3z-9@iLdE>EM09tLcUeo-w z_m>E(Y!*L;@OSWZuWmCnXHD}yxd7SBN9BVCH9Tg?^=;Rg(z}N?9emo1NsJMC9NPFX zyYDrdaRt{n9)LL4jIqLYZr8uBxN>uB=T8N|LwQ|Z|DItx>E4@o+;ly9>I0khgZ8)E zG^dOE2Z{&^+Fq9&8}3){6XiL@dtlS}u{-x8NbCka(b_cEukg0Z@6)EOQNM$)ekz;x zfxHMHdAxAjZQ5EMG!;QodF?j+a28_>1pgU%&f4^zxqQK({egJhY}&#@=!O3`_|7kq zc4wDfq{smOOV-v5uxW1J;ZKo!GwxS!3HTD*8jAZy$w3u-?Qh}UKLk_+zVh{Pk6?U> z=bs_GKiqSa_<117IH(zIxO<3zEa>;oFVgY2OTCSdyo3ctXW~xx_n92dgZ8z!L%FPw zRKF)~-z_;PNNWBDxAXD0Z51S4FL2wt(%XgPa{cwT^`&&tqx~SM93ARUOlRR9B=voY z?Qxy2C8f490^9YT1<9~*;4t-=+*4@3arFtejf!AWxvP*oj0@p^qwn}2N!=@<_oEcR zz$eKlHR3R#Tro&y@&)4pjBBop{`}grZk5{VJ&?RfdzdZG50KQK7dEs0v%CtDcQY^| zg)!y)LGm)zUO$5M5)1AG$y1#tui|39snG9N`Y>3ny#h$;{tm1Dr*rJ&b24Z|{kjc< zr0%bAgX5m0j@I6Cne)b`Zj*~PuDP#-A83%Gwi+R$a7C%??I5LdRb0%Ln?r@47+dnXAH;qMX;c@|Qd7sRjCD+(#+0eNFzls3{IKuYsG@SFCgAh|{6Uoc0# zn6#hJ+~opKeMHIgxuClNmg;?tKHt}K(Gga;d89AvrmLaU`A2-6FTuK-C659Av+_WL zjZ$~d1^+gFK+-;f+V*?CKN9?bbebiPOqFsWz&}+uw@@v3n2zB0`)*QT%`KE$75^dl z>cfHhbn&)<&r{E{#zBMQB>ArQ6w48wCHTs%geI3m_d84A6Ix_!K>Vm}98k=IR>wi| z+LfCY*PavkGZ-&;A90R|9(!gc`B?Pt#ruQ{8w0_UapU#iUnj*(;)AuHM9o2*=X|i< za>*^=Y}YsOHZo|x4{ALA8t{~l2(Qt$w6To%?c3yj2frytn126+&rDkbe=6S@e8zVD z*bWPnLk@ma{-R;2%X9m^g@XyJ-SgG&#X$3app?JH;f>%s&i^|1zVjo>E!oJJp--#n z@ADYGXu@XN0uB0NCiwCie~9K{E66B)ANUx6%nO0AHcTe-qka9j6&vD+{`87cPC+}G0 zaJ4rHhyc7^>IvS;AH$nBgXcJ5+nlG{)AKWIKUjR0;0lxVbko)`5 zJTmM&MRJXhQ2sRRVx7ah9gt9NDeP9SB=Pe21u_$M^L3DTQ3>Ufz#iprK!T@XXTA!1 zhiQK%A=kb^u&g#RpK8*&aS@38Aub=7HcY&= z2l$RAZJ`uWA@1_&=?4qPfPC}fsWj=&Ld$DSR~!f&CAGfbDRTrBPb%>-2&b;APF#r^ypug!FsrF_X|%?FswljR-_O?*tg z_$8BB_535(HarAP$^|!BM{_XyOlWfc=&T3BObUh=pBCm$Lvx=ctIZYH6F*CG%hY!e zVHPwA&Uci_{a*5c(5k)|lV=&&_Y1TrH_+sLC}09;;F$lfADG;j@IRnIeK98Qf|L2d z1oel?3)>vXXVq~F?8%NM?;+(i)k(~)zsVaTgH5Q_oUX|uNDrY&6FRi~I8xEZ6n1j z@{Tq!2K|zlDLh;6&lPUITR2pomm694ecm!t_>$yQVWaX3P2tzuxDWvw7-Rdw7*qIz z?jP4H@6Qx|s^_hBj>l8@Jsq=7-wx%EJ=M2r@kUd)gtenxp`2?H^H!K5*Ox8ln8jzW zo1#Nl zz$DE}y7`Les{+D|CsG1dawm#A+A%XRK%f=99zaR{z+{gmL1B9_MW zjH5lT+5{!WGz2%gepc`c*$?3+iBDZ_f-B`ci<=$qESM55Fm4geL&$`*M}w7a9~tV) zBKtC|BpEqPx=iRy9#8Z-kTWu&%jx!gb_A<5KW9Qi)ZbgBpIZ}pLi4}XZr>exRs2F& zqd5l?`bq>{SmX8^p=H`zKj7OAr^^Kq>m0u=e3T6GXg|T2P2wkAN^#Jq8nB*Y<+HY$ z@V&w(#d^&&jyJ$WJBzm!o8;PgrHLNQTCS6@S^3*0dM;Uk zGmpn6y?2=CaN!$blje%3FQ7T97Uz?Xo+`aZOt^h#ME6XX;QITL{U)+pc|VDp)z1)d z^HGmqJD*K8k+^tw(D@;$A0d1}^gz6#=D>X2Qw}Kg8H8(z-glDQru~J^o4pmneKAqx zOrytin^2{R-Y23o^r`erQ5zF|UiU-(1>z$!(XW+@?5hvbM5oYN+0H{>b7CgCQ05`% z?-Z|?iLRH$CvgX!dxA##CfXuj986xT`?Qi1h5w03f<40BTTRJ5^8BJ);JJ678hzH3 zGzmu(Q#$`OJ^%QOnl*ore}aR*Uznb*Z;+}MK(6Uo&LFUX*nXT8CQZ*8*(+i*k4HYJ zu~FTpVw2|HZ1g?Jmts?i@B(b~Vg6uNVoWf0*V*V*;;F($$NP!Oy6A3flOAMqB%`n<5gxC}&a4Q~f>zqG+6!i~k%tP$?J z%m#m;l;62`<0{ur3BDj89$e1)lyg3@LFKsPQcm0Sn@|33-9Ig+_WB)Ty4awM)B58- zyk_}5ZUYk6e+n12@BzNn1{P)0WcX{GulGS4_*%|iIG3pd_n&J6%7aF$?{6EpQu@m{ zNBvIJw-CNQ{-OOZ8_19xK2FpAoh`0ZAIxON_3fK%i~kT#CQeX)sx5wB`mgvcuZib< zZ;OXZ9tJ--{V+O6-E4~~tw~R0d{)*N=h)(q@Cjj*a)E7;;|G82eCfxtg(wT!N@1)F3s4F57Vb{Y98rYN6s3D-Z{N819It6U~y>$7da5b?(V zTOJPkwZRsgsQrYMtc!~_+Ja2+xxgx3HlOR9H|>Vi{QrIYPMiN) zf`LM?M!mZ>UvrqS_I3v76xn>2iz_8~RnFG1&F?I^c_`KVfX&+|y=^FCJb8SZ&HGh+ zHBipl?nNKkycf$4dHcJ0&?t|qXKgmw56J)pjXZX*CBL%n1M26sQSc@gDTH!C;9=DIvmGp_;q{Yw1_4ouY3enBoQHuoXE zSO=j+UfV-#uKIbP#qIBMr0$jnEt;>iIe&3+{a|QOE~d?KdE!>bugkeX0M5{=^Glm^ zr0@cvmEcc@Ci~ihc5$(Z`rmYVre255K3DV8o_ZK97ShbAUVtA))*Oo7qu%)WqY~&vTct za;}0lsT*{+U5ZEN{=VTzXk$9T|IV=)*Uckx({m8#n8s)S+Rm(jr%g#*@0+&MKOA&< zfqbR%p0J&|E#i?I)GNQoX7*9uwf~E7W^Kn2x*zj-jbHnr?LZdfiZ>@hQesCZ*ba`P zl5~B$4r4U$l~Ny`?eLwP<009H*Ih^1bUi15zcQOntf$*_<+g#}DBO3O)Pp`AEy3Cahiz<+^)GLNDWnP;F+@DW8wXxYIXM)?!l=aBwSk9tX?DVC&?lLsx+5J`$59YJ+}<18OuXHQvZGR z{nqNa6MV<_spsR|{5QeZ{Sq{|{)7LNT=*fT=Q84z>Cd@|miOcfqy40E)>;^AH2zcK zdr2S>T1C%ZL_QX}zWwzcw7KVzf1~cXS{O5XNDcUc%es|32$~=FuMprr^$}nop|uxN-o%AI=4wBj6|9+yD3bo#o!&2mU{4Duc zgi8v|+6yG!mwG^29LLDprreHJ(FM}}XCwayr$d}|)93z4eGlPEK!T6s9N3$K-saPyzEMt)En zMg9+2#G3R&rMM4q)(0H&ok_n#MDq}5o$;KtCVhqkLm=+vQ|XO^X~S|S#2rt+Lq876 zoDFfF4xT^IblA=!qS+81D4b8z@c|b3z6Wu~d+E4Xeh}m*XHfe&)Q1pWG4ZE3uu^C` zz5D`wLpMPiP5FtCYdSUS=dz9L>9IM*rt@{YV3`H2dqp&6I=lTytM+G1#>J8^gI0pv z(4^F4EY-e2tHf}6nJ!0iG4e2IC1@iJMopJ7>RW4ZdFn2^jwOE0r~S!fn~;gcp?bBz#_Yw4*b z`$L_#HYxAGWOvl(d6UGj&Nkf_iMI)wxaRr6JEr>@eLl4CcyjVrCVQ~k_q{~%sLwW= z>}~SG0dKQ#S4@u!&+qwF`XAt{ugYW}_-}(Z%n}k7OM`0N*V8;PyGkh z21B-^YLK$Nirqh0+K)eG`=K2Oj7YZl>)=2#0W>a*d zUUp5(n?wlnxZWXF24@e&KF>wDekC$zopuHG{q0m z?drK|n5Q`z6F5xv2Y~MHGw`VXe&%R@(FE|i)2{rZ9>0+B#;qoB7U6(ie-nQYUF;bq zFib$A_zRDhK7PRjzSI2YKMJTYfeQp!fs37gB%pmiTq>`ZQ%rzp`Uk!DDXt;Q*-w+F znV>#zajm}h$tTSXHdWJ z7SYAtVL~4X?~dk)a-TM#AEdX6m22nUmTxXIp_$4fuX4Wl&|L9WVl~I?$9`-=93NZu z9acM^PAH-C$C@Eru)V>AkCWge);=!J6%)Qmz(`nkym&)R_#OU$|B7|WpD^Kx5=6jy zo%fjVA_)*iJUBa z4s2Bau8CYC{bOuY{bbD}<|PBCjeRsgdiezi%M_0vFk4Va)XzBEN~B2V?I0 z5?RAv#68&L_+*itQXIf0vKtcj!bFRt0E;ovhWwA_`?HCR{|v@lpD8N(>5&-Y_|Ayw zCVI8(1u?e4FtN}?pLmQ0HstSCUW|$MznaM1$6%}GyJ`QR{@XUzJH1BxlRC){U|cXD zq_ttMKf{$gKy=q9>X_zURs$L0DrOi7Ud z9?);lK1>N~XQ`i%>@OT}Q!;=--DhBuv12ovOvxp}vBTtW0g#)LU&L#RNw;q(srZE^ zf0>x-&kvmSre`e|X|`ZWu)lpwFYSL}%K6uO1!S>??b=tsiKr+c{+ zVr}$M7R8g< zsdur4YpYMZVk4`SKUZ@!15G>I$YeQ~VYSW$Y~&ruSK@)ZZ)60El`^o(@pU2t<$Q>h z$`iMdzLJ~3E&BIwBb|9LJP0={cai!SEYx@%H(elsa~oE^KUOg1{OQ|m_zREz2AAW; zu3SKk+wfCzzrgjHqqE_wsU~^aU${=^0XBSs`pC6de6jgDx@~my>8u2{fD#oae+-yU~tG|7Pa%XI) zo4mMjnfl^wu;F43oZu4O*V&+Y>G5C2zSWf5;8>Yo;v(ga+u)-D^2P<)-?hO@BtL=k zZraWxBRGfSQm=ez0~^%W@Q2QaY+#B6u5h~YKW*R*YI&ZR zg};-*uNDipwHE7ZR?)Ac!uc-%&PhuP}$v_&Hs;PMIlt^G|~G+20dV5wb5968!oXx?j{ z==~nCh5KZ%01NbcX$v*j01LUMJnA=FD2tbF@Q=`=7SQD-0^GfJTY`J!N|w zBOGCHyj+{TUhjV~#zEgP#%9032lojO)BeBB?kmN4Xr_<=jcjc9k7RBK3FW`r>}Tbm z2(1+QzwuhIIc~n%Dj3pRY!09HPtT!#x%5PA&K5qloKC!95&GENiOcAJmLKTj+uV0# zZVRn6_5XC)X~bt@adFU0zAk%bXyIDY#p}pFL3o9!>K(_cFey*Hgc} zKO5+5ZqLg(xd*N4Q?)q>;T}S(&Z%q;uhr?#+s0bEYg%m12QpxUHl6F)oI8~7TjTQl zJ-XB5`jshAtDYj8{j2hJhVmF!eJels{>^>+h5Dr@YYm&1R0( z-@hkVs(Wmg&GK9)9(shpOv7y#*2vn=Affyi+vU1PsIW}_QQofIwbEw9WKRq6GdJ+y z-)1}^&jo06f4X!qY z46|uNXpNTn+kyGDP0NRe6@Qf7hI$nHkAeguB z|Hhr8q}L6pmp>u1F5(Ws)E)(?@#<09?&ifQ_xs&WKO|}*LQ3>hBXR2p^}8o^zJN)` zC-*Cbzk#0a8NhdZd(U}}{jIY1Lr>}z#}PkC25;!8|LMQJM?!maki1hpdvU?Tg(3O* zLu`1$Htmr?at_yeZp2pS0Z#rS{BmrOdgz6aTq@jnY;wG$q~@tGrh5%YZejsUGdAe= z2$F6;Qt#%gN!B1&Z^SyXZFBxF)lvMVSflr7NNN8EtCi~pDLt=Z)!WKPPHDajw@hN; zOcSK^=Z2fYC%k#ztF4gwS#v8J2C(>U38Y#Dl#Av3b*8>e`%yBe#kD8*Pca3%g*uJ`@+?V9tN@AyIO zv(zg%yIlQ2?V>Tb5r5I%60`@^kA5dpY>u4=sd>UHgbDKc9R-e03bXGX+Jk_&w2zS@ z1kBgx4kW92z+XP6E`RQmw6S@^)ldM){(wUJ`|2S^=Lxt_KE&N<+jdoJrZB@VmQI^+kMu8 z*H6RI{5U>>_Rl)sh3^jixBs0*72q#nKxS9+kL&xx*Zu{})4eeGrDw5m82+6r7d`M@ zuV&?$(xdzD-%IUp1nqD3NPiF3xqQ9P@#lY2u+i-|{kHs%XygZ*B`$aj@z&^Ac<&CV z;>Tr*{(OuhNc#|KzR*6O@AfctVuFnn)Ou-3dga5gn%Nlh~L;EHDc{h<=l={`w zSK}|*UC`_}N5177tqUKtImz-eaqPH z-mvXQdGAo)gRug4!}b|cOr!k>=@MfZfz z>_1wcU*55D05EB3{9u2Z`W+G|F=^_}rM{!QI853qoXWf7Uvu2Hdqc67g$B3Z$^MKFz+XTU z|FzXEH`%>pZvxJ2{7am1Fw3W!Y#D10hc<5GT)W%!cwFXJ&}=`Wi@`%C=PLQY zLK9K)XdrBIrfDCjN!D7|o1A*>*EXp?#pJqPRuix1A75;8Wn7&JF>YP;-fwb;t3M(} z+kmET7n$7OzP{odd>CRb@0`0|&Na~J=D~TV@L=^QXw-eB$-7eeHWU%-}snzEi}5%b6%+o5};8zY$k8F`qUd8pC{W(Lu>$l`@5w9ZD(^ilRR|TD9UJ7;2*HLf+ z2mbazt((^tJkEN>T&R&X<`t&kddaCkjow?y2O+sRsG%XmA^)3e3NB`W{qIn7<@Ob{ znl%MCojQ5oj4n{EzBE(ts^&SW_4jQG{?vYMwd*Go)Tvjg%K6I+Gqs;pHHa6?pPIsB zNgp-uT@cOTJ71Z?YZ=sV6l`(6`NHRf`vaThzy3(tCs4bA{D7M~Di5u2f$%n9ldS#8 zcP$u!p-^#%=F1DK^UbB-Pk@b#U!7J>`vn<%!v>;fQjVT{*772N_0A_;l*z&U^I;up z7wPv?bSRz9vMiMAeZ>@=E#PD*KSY2qrsxjI`9Z1c^Avp|;5=BnY86dvt};csw}CZ! z-Y`Y+FW5YPfPZX?10v#p)sEj)e8kV(ushIOG{u*Y1^tQNV1e>GP4PGe2Ty`|$`dig z%Sb=A^LLoRb=CJKnn1et9$%H?)m^-n};BeC02gz}KPv^h(A>dY>`@zRmS{AD0k>or*#x5K|ubD#6hdnc$(U)4K;( z%UWib37(^T@KVN|Oq*$fv-lV2i=}#gFu`*1&10E*0!?s-yjZYI=M^TDDG4Mj*FLKW z_2j_NwYXl6?Ik93#idM8#*LzTOE;l6#IKGO+5Jc%}vGSbtmojS27K7hxZ) zV;aH5^GqZkt6&;&bzl|}?xtWM^!^j6fv4j<`m}r33Uv+ryFDE%lD9c348$?hcWj)jEdGN1Dlki zYoZxact*!fHPLL@%V5j97to+L06IGu) zCe+_*qUr^pz6EPIPN9D<{Y&&Rgx6xCzn|6XMjN7ih3pln&mbT>^qk)#+9WB-T#*9$1|e3dED_Xzq-i$CRH zQ!>N(BedsfO8!>7_<%Ludm;bM%@ZGt>0wq%-|OR-Tu&$i?v>50+jM+&UA zs{WzB%d#UMOY^qhzDt(A^91s(_F2Mu3k-F z=>AwsRxBdn*y!YkGj9xBjkO#{>H5BnzN7u38qHVPsGgUJwCScMNxakk+ z<5M4l0TO+&Le@ak?@)gcZglgm$O$?>-@q}RU$)pt4~{YPqJ69Uz1eV+`Y_gUi@Ng> z=R>cLqyRIi@Vl}v-Ztdc&-%9mTVgD;j@9iX9usu@^*9tf*Ly z*s!Aq1hIiAMTEVjcM=F81wwjHX6Bhm=G)TO z-tWanx4_O@y%T7lo(7BfI2dod!z3@g)bjYf$8%o{mVewyhEd}=Ai1=E==$GWY&=E6 z4Ol_-9`9?$WAiPmUZRCT0q!gK`3-9*cCrWi7sG|Su$C$EPA6r7!&R##DUt4&~B{G*ct|2^Uh8@DGFs@t% z4?(Hq%}h=k2XkO2YcJD~|HSWmJdd%@(&R`k3>xJ=VKU$5?-Mi<4e;#KOy-@~wiuZR zjkLA8be+kxoR22C51Gs){=PvI$IYKG8S|;QI|rHxxAWK6Cd1CVo2~ym{Rs0ep?NDE zIMS2v!RWD%vYd4;$sZFltCL!!$<8k*&ZCrF7JYN z$txf)ia;J=Xs5MH`X?sqFZKi=&zNHOPvHJR=Gz^-rn=r_4R1O+>Vli0gRVR4{xDeq z0t-!mb~%sY{zLLJt+F>XnKyCp5IPut_l(JWK)B}Z);E%w!ub=tfBl1R_VY~oIdf>D z2yM2{lU9P;;V0jOI?2zO^a(HQ!VN3#2be2p(rsQkgzaIBM49xyESiLn@Fh)}cyN%f zeIuG8@=e+}T0{&${sg_QpEhZU(pL`CarDkjruRiMzYYLZc*HVB={a~hLE z#|-@ybn?giag+Qt@8KXM96^(8c~hM-FEmNhdEXA5UMf((YLb`p9s>QH9E3MLhmOPv zA@Z=PuAWhkzZM^3$ohy<>sed|Vb(#OZ&L5$9v(Qdzc-2RGY1MB;c}RSM};@<@O5*n ziQg-HE64Ut;y>hp7tXtR-euxX;{z!;Xy-;xq>0;%ajz-O=nLlah>3dy)2d^B2d9+- zN+zx+2Tjorz#LE0<44IQM+ry&#J8r0czqxmM?vX#O%Lgff+Ob#6aOTAJ$w+6`It!< z^%?;V!6EDDt!|TWjDO_gg0+d?^b1}j|^!O#E1?7h(TFe94(*Nw;KzrWFI3O#Pv4#pERL|9bbfjwf|Ke&wq z0WTq6iA3l(fg`*{-A-GG5zD}7XRfjCke(RsV>pPfJ4k!82l++;o@?rM+h>oS$Uhg| z){lY$dmt)YGu_%#?sHLEBTmxVdNk3$z_~=-#Q(EF5WQ<1C5&~WomWO5^({&Nu}L>r zo>O$P(AJQ@IH4rV|7 z@DyCBLG%yi=)w}|O+%E&0LQ^f;dY{bf}bz2fn(gb4?IKzl24$>^4J|a|K83x*g|j? zuy6-Ti7s;q_KAeI1{K!#?ods|?1bI6hu~QML^ZW@UU0yXJPXu_*9!Yb!udG1k8tF^ z1r0p5I2rdJEI5Kj$@PK5THSM?S$gKkLt}wGv`{VUjz)aGNG`Mu>H5f30_O_hxK#2w zC-z$vI0nxtnE90?uhXP||CtRr>U7aHNl_ zmrL&#oI#f%=ysEyPddC1{(0qlr9Y%Ni?0s*UNn%r8opz#$VuRc7ZMhdweiAX$Wz-- zn`&4ga}sb|6hL#qdi%U`tY5lFILzQAalj9@+xfH8Q+kM{;{5{WE&>`ALglgl{;_7F0P*Mz9Dxrcq0C_mUXBe4vX&~Z1eSTqlMQWw)=!Q!v{GC zU&h=n6<-zSi7#qV7eKiTd(EMGl7D*LrCX{}%0q!NVR3}NBDsf0Bo9y=96@*GwP z`>;0Ka|eVNNAFXKlBRyj|!#)`ysb*qQxd=ny}VO3je` zNe8WA(zQx`N%Alq(u-B8hbQ9?s2Ms~!`Vmme3aJV`OqO8Kh^Vq^d~x`@2Yx@k-cxb z{5`5(mS5D4bX_F(tKR2vPZ&A~E3s#v>TUOW?f5psSDot9LwGjrl#)L6Yt`pI5=Z|B zI#^3RNcEY@o?mFPy!DP1q_uu_V#zF4IL)(qaIZ&B{r7zPeds~%hJt?i$r=2;QIgHRc zj1KTWtIXZP`)alG#jJq5XIkuhENd7SC!j@ogevR5avyEM=|8SCRMy`N3WJv8UyrS6 ztWa4|9M`4nhGyX$s_YZwdE3lm4D?6eLj@MxU&wh|Wq)xaH6@^#V#kFcl`SA$Xr|+w z>o1kPpZ8kOZ0CVF$1C=cG^g=BPvzVs{<0?V*Q=aY7^DhK^7p24L>r(%dKtjQP}1YxA|PkHwc)D>((_`WwgD z_i zjr(`uu~ylAqq~BF(;cwe&O6;lj{1<$4!alwJ3@JayvKveIXpL49+}@lg}k@WPfan; z{!l?SwRO*AC%I^Ci02$bP4Zp zhwU49UF=INn9FkJ)PXt=>B6zpa<=rSf(! zKojC1Si@SVB$X?9WmqacFYH6eeQ>_;HB_!Vr(p(KiEwa^J_tSs>CYGN_f+NnKt-Q2 zJ&$V>IV!hCctd{)pH%sBnd5*w4aD1DyHNQ~=S7)bB|HP=8z#Pp->k3PpDFXF1!OBZ ztEcjx!F)%((C$b4H}ZT!7u)_$UXR&ykkQ-h&p%Ic1$sMDRbJZKs`4)3LZU8_bCJrs zgZUDA2jg}|sk|4M%cFPL=XIX=E_I3Ik5%4q;hC4pJO=j>e9qH5g@2&(mP`J;9PRbb zADFK4LhP5)6|6TsTlxF(MO;_dzMOvu2l4eT>mTwz!Fe!UCEQo#mt29a#+E2nE|g#T zaJri6@8`}?{_-2hEUIg0d~)h8LcLC#GoFjw;7O~R{2{?Z3T1l5i9^BPR1LUFck;<4RhDtHF>0(7ICmsAia z5V1}-k_PL(_mFQi08dtnbR$hy`Ycev$C+2Io8%s-f=|o*y2yB|^!8g1BSre9i&bFnDmtj^HhwLhqJr__i)a(i7y73; zx1if?KPFhnAO+n{+t!ogRq)zO6o?Jf9g;+%3liPxRem#JeoxYoUs>>~3i@&nSv$h1PzBO+(vEmKRl)rvraD7A_B>KB7gJ09 z@7500EJJUrg4x`I($1&cTT%rp`FWzFUrC>}@PW}tV$RV~#%y1z3MW&1`#jymagAq9 z!39V?A9=ZMl6<5o@X-eqd16RK9JTlalfRF77`kCSd%I2k&TlDsq#IZ>G|A*IWdE41 zm;F5MGbn~IPS;7_$K*fB0zF;Fe{8?WA1?i(T8=?rALG>PC;*^q^RB}H;y{z%oA>p) z#?E(w&9bkornD^b=Yy+-KUY1xCxO6B@O#O9?xEUC_6ifEx<~ELx{5JB*O=gF_UY=~ zT;CmSg4WkiNvY!(-@rZw-&1klNf+e{Od!OALR~KVbraaYb0S?v_1w$8Fo9XjE7dz~ ze38W=s60Izxnk0UNLfpeH|sY~$7jo)w+$Rw-K`+A$?Y>dD4T_OnTVtId} z4}*hQy2#F}{NIRwdaL-djQ=^#=j+Y%*P7jK{5Q%zZKIv{`A?#v!{vJYaon3Re(6=~ zwc_72dAr!-tXD~|+T{IFg(R*U^a|QOo;Ba(y~kW#ZR~tI?}2x>p@LB_qgvKO-DQNJQNPvh%L>$p6a$m7}bP3~R>%fKgGi@(w2ZeflPd@t`y zlRI+;f_2Y;AEobTawke|Yu>B@WWY1I!#UUrf5`sdC2SL(sc}EfU`*J~k2{ZX zUoO0y63b(9Ti?SD@ueD<^mkxKD+j2I>u-)%PY*NDgIZ z(jafPaan$CnVmPg?7X~O=0+x`oVlFPXg~j1iR|ftCh=yP%;HU$TsRC(biBM~mdX5| z@I9NTrnKpOlQ{w7k9{0ymj1TM{AAY}L^eR%9Yss=Nno;X`7f^0Dxlr=hq5z6|0wS>o|Rt^)gA(J#$=4(JfRC;t1H^Md&{q?e33 z-eeDWjSig9E`48<{d$l{2GBt@#l=fa)=cr8cksA*vdJ1H`^g|!5{N0Ak@qpE|YPLH_iC&VJ3YwKktw`L0{mBCjC*#+l0AhJ<6o#@dq2iQ+AVx z#H4My0?j5V=$D{^=ya3z%oX$iK%T|L_=K2c(&8j98(z#g9nLF5wB))tuL?-{%UVLSg%IX188 z#rF);^8|jMpdW&BdM5QK?{6WT#rzeMI!*F?Vd2=A)N}0bUpxyYWjY6Yz`5;5GFX^I z%QJ8!$7td!`Me6z96CODO#B4q0^`PR4mB#jpG8kZ``y@4!Ap-9~tjoxh_W zLp(@LS90M3BAW@%nxq>nhd8>k&fY^6DFV*i@A4BXqzTm~e1qSj+$@68aUYsGcDpor3Sm*f6N{D`n!IPlm%k@+TuoUd(@dxhXcr2C+)r>`X92{QD4S^cD=YUfzd&fG(yH%hOx`z>cO6-mz1f63eftcOMaD!E7ewcNvBp;MY~2{<-)IZM1h=!;=4Ei9%u z)XR&|?;+3O71Fx`$A0eD3wIv>`$$30{uPRZdk4<5;-%OwpJQ+y9aHd5&jctX*j`Z) z?mJ~pT`n9Ka7a^!eSj*$(R4I`W8dS|!pT8@3mwZwLapuZIM>p6;xee0dkr`sxrYYf zB;Y=Sj;Z6J$@WW~Gce89?3&%r|Eb#Y-84vX&* zBK-Bf6^@Aa7WXggzl5W1s@bDgoiN=n4URSlZ!IF{Q`JNE3g`!64z2337+ZdT{loZM z=3(Vj#rarZ1mO<$kRbOn2mA~~c1bi@m9b08!fE0tVM z7nOw&VjOiJl`?1qCi|X)&~Pr=sTA=#VjhD%S}LVG8J`5@&}n%SskbrL2RbFMqf#{w zLZDO5->T;T4i=+dg9fgjsGf6~6M=mVUL2}k$1kUY6Li@5ZLilU2IoQ^CikCIF9)fH z?mf^c`)So{zvP=br3a&W3&#a`n{vT2)%#;S6`e2?LX?8`+^KqZO20NFzAn{gg5*s? z!pl`@F7_TG=Zx=>D($5~_hB*tLR6!jwpgWo^Zq@PpBe=XHlLbyD__*0lxzCqR8Kyh z-2m-e+e%j%og7q!c9hN|8AfFu&%6U@xAT%r;dMZp<=tn_=#M8;^u!2nQDv^scet*1zPB|mDH%Rhw?rf3p+$Pq zD#!l)wO|+=&)X_z1oI@I+4@p)US|F~G=Iw;QI+!x^T(mt`fGD`V;rb>6Exd>i7Smk zhtMQFH08PkaR56$L>?~l2GK7q`J5){jJIDm=L=qBY!llJX2>ZaeH|ZC`@&3}rqJ?8emQ%in#c zJhtz)%lex=(V;j;6#ne5`zpoO9G0ZQm`=C%pL0!hcnH z(qqxZ)~As-g}vo^o9zqbk+y5^UwS*ejZR&Q{^)0sES;sdi}zRM?V|Diae6zYL?1h( z@^&9N6IYYE$odKLB!8ugSwD4+$~(mSf4!6bwM(j%|5`ra=`#Dg_diPYi&46a*DIGH zZ|P1Vi|I}*?R-B_$@gSkZ+-N^49@53M#)vFpmt6rYUl;F$P8 zm7gZ_(@x0|sr)lZG_z87N)KA)k7hra4%vQUzIbSKIFBwGm#h3o@U^wOU5ACcukxSZ z4>o!fnX{|%UuTbkj_}y!e3dW#YaNk!yDB(?do?=JOtG++Rl#GjuZq~`TfsY|>FuQ* z@h+-@1y2%yPdg{F&{Gxco`r_CXSE~TQ&n)7K_EIxPnB~wsKQzD^Nk8mMHT+ReP7)u z`&3i#kMQ0a`L%V2DVRYQswZ{BIR4z5f|vNbr|Ye+wqW!jOrSll>#;45Pi9kaKKDg+ zoz1%!c#tYT=@ebdaq){xzTA&>t@X9$7t4OH=1-mzn*3jc_fuo}?)mR9mt0p4YcujCW1vNq%VItHRGQl0}@6wglj~kqa zy75VKb@?$q6vrv=(q(r38GL}}1$rlI+R*Qf?K|pIl*-=R1oKGGJV5Udo+bLe*)yn1 zxK;)xu!YZGn(0%XH6}1e`bgVszBTX)f6#T2?V|*4=Q)zzD*G}MI6MBjvnuxM&AeXD zHi14Yg3=o~9(J?wH?ZGJuje{ozVR;?AInbTZ~Xb}#nQ`!%V6@lm^-7F$a~A=ZRUG`{!{v`CT}M5{%kb!2(WKKK+&i4OVVdIz8(DE135O`VSGQy z`9UxnHyGb5_$|MC75q=~aK?8ldof@xUt1qGzCn`rpD+G)a&3R}AK~?(&qDlZD`jqLa(hsW_-0s5+WJZ8 z#~M<$Sfn&dc2&Qjug89P^jBWgiYZh4*UQgL%#dJ0;(2+}4LyCg&03 zsuZ7s?WY>oFNlA+cpg+7<2${Kx~wz)3l)r~%QP`_pwWI-zF!< zz!ca`HKu2yCTBGd6ro*wkS3>!J$L`|igM<0;1=3x3>)~_5%=u$$5y+9}u$qxtw|~4naufShydN`(k(?bFYmnjR(45^LZwxnYlC&rl;NuZ=0N@ zv`G3C&%f*`LVvb+S!?C}gS;kwkwGWNv@bGQmN(OBpC4IoGS?3}Nmt`EAfHM6)1BgZ zG+9~v97Mmu&BqqI`0=@Gg%v$6elRkzPK#xE~?qw$ZLD}DhTbL_l(x1HkwFhr}6z2u( zc{1sjG8X|N()TuLd|W>pBEnBLX>YUW3?jEPf7_&8PwQBm*I2(!+B6cstVBNm7ottZ zAjum#_cJ&HfB#hQxCHac*oGgQWHR2QpfdVfYpcI)e)w$DTkg#e9zs8$?@TY?JO+fX zU5FR?0jB3d<{YAr6zRi#zA-%+SBE@pxi6Vi;b!6df`DKRCUq>&c_Ca(vCDH!YCP$( z9)(Cc@6k=l&l?8e8w?^R%ltm&8a!pC^nr-*%1yHMJz8I^Np9f1D1>8t4l~Je4#0n( z?2nTDlBHANu0&NAfwk zQ+kRx59E8RZkx*g2XOA87jT_!Ial`4&T~}9K1Db2^?DLGxI{*zxNfxE6sJjYJI!*> zgXnNtM?S7QkZOWo2#C&NUlejVX#wyb^et0-q^FLE_YIe!I-v49z0N1k%dQ!ZFUDq}HZ-nV{vC7;d6fo?dV%#k$J%&a zr9a}eQ5wYTy!(6kdxY2xhw9vEzrrH*J&`IPmLWOd74n>g=q~md!g`AH4E_N76eNfl z3PoHG#(u@e1PsxzooY15=a0&L{TK%jd0~7HgmR*~76u_Ynrb`!VK-fuNB(oH-vZU= z^TG=EhrAzy8p{ics@JHI3U#b;7>#@_nLE|lxvWzvp5k)JrD4B_^Rjv&AE$AjAkQ6L z`Wr8v!FfV*CFRHR{;zWXQ17glzM~^PDqSKTQ2hQPt~Bu#z0K}(q6s{}(M1&JF2Vl5 z8oIDPsMnS;&lsZVJZRM`rRR+OAI_EPrN@5Fc(|AKFFRykALW?;c>U6&9I(g#Jr&S4 z!VesGJP)F&9O#85a<73XTA3f5bt9}qThHXTaG!aQ7T|Zm2Es+{!Tk!y@y0_DP8Z3a z>xg#@w)0x|1aJt`j2!fx!o@)T8Q=4vf*vpAbFti}s7-*Dx0P^p|579(%tCxO2UySVeTI8G!&IiIpX?ueg zBFN8^oJ$AcHLpZJ$@8=z=>wfShPw!y$E61wmK-Dgn!uD#pii8I$GC4HVCQY%sMAiH z{xtSq?qi@QL?w5PeH!7KMJ+$dksdh2mePL?`!RO!&}I2wj`ezV+x)#_y+(WO{?_sF zKos`n3NPKUy^4Lpl|jB8)smlu{p+y~FlZtARv0`22cqm11BdH!H^ZTmB(LuDpnA&9 zaM*g|BldH5coTsZ`XO&jIP6EJaWEGmYcL+uu@sKp#^3_vi%}r`C)LA+t@y{rA|H`^ zqN>Lv3L;~F?u|7>h*CYOc`gEx$7!+io{F>kw+PijW527onJl7$$Vk$LWvlq>#H$e* zM!?kns`ysU8)CnN^BXGRh6@_ssC*70$KkEbyFw)(GzpVsxEDgZ=WTze#6H5)3`aP3 zq!Pz*&IZD=e^iO<<$WHOKB`JOkwx4P7A~Snn#$lK2uqGdC3VvUKL+9Hgj;-BB|k6o z)bJ$k;j3iJj|j%!CLZ@)+RWIQ* zK_?v_KdVu_Ii3}O4*GbWvQ_mNe?2xW?tl)Y@y~N!RDFs#mx_LH;W4Gjxd=MQ?&bYO zrAZD5`Jm!cP21iZ3n6bqhn>HtACKwE+i}0b*z@OAy7j_$$~i=(f6R+<=#b}xN~c@W zQ1pXy&G%)M@d=A*pxy4LGLPe&3id&`AE`1&E}f1iAZXvm{w$UG0|ni$g?7oEtIVBT z6ohu$pU6t2iyQ7YWRIz`&g9}6wDDRtLuEbxH2$ReK%3+ZRM!02_$Pb}+Jt|NK5FK8 zK%1O5RdybMWB!CTt_R<*vTrD(WH7Xf=SgKxmOe!5BLsYzh&(3d*g~uL^i;NRy`UAX zZIydIP&s+hmuQuo0rHoy?Rn8)X!SG4R^`0QMHpzYe(an@{1*i+bbWGuP&wkGg%&w~ zC|8#F?3+10HCnms`?i_JGI&;TJ;t08Xg=0Q_=bujzd|#Hk8VF>mU7Yb6wl*Lbewu^ zzjE!TApAmTqWaOsY07;(7bKy{@_*c8*lPw&tVy4UerU8+^*joVq~$pEE#;P=CNxrQ z_qpGcCyPKK??NMC)Z^Y)9{b#@Kbu6|F6CY>e)xKMPbrW6{MCzBM|q^j1a*@CP@bEm z4_<5ite!aDTR;u}wLOjd42owz1vS#URGvP}iH7Q**%PchXE5Ibs^y%ZJfm0$2Ycvi z*B^ZkFY#g#s;p1JWBZD`sixF)RCzWaZu{InVHepHl8;xOkn~9^E#KYi!oTIKPKSyO zB(55$yhL5Ns1HBGRbxE)k#kPU~CAB^*}q_qea1 z3u3a$1zgi#x(-VCwKPHH4rh-XY?t@5%6*0eS+7Ge9v<=Lt#aoH53`7|P$O0D1}>7r zR>OUJm0Qbsa9GDUmBGpvFa6=wv`(4&s`AA{kF`bly8OjZ@-jtlJfsVAgl#iun<=$|0WI= z>(wuD&`0G3=!Mr$uMvNz%DYIotm}lYsq*d{g#)5T^#-~g9$&8Vrt-Z>FK2AeeJXG4 zNBF?nu9peV9{Ub_AJxXrr}O6Xep;_aI4J%>R9*+-RGX*ib(G$jfcu0Xiw^V_@tG?B z5ca|AQprCn|8tjKd&9}6=$)*47_0o#kzVlf7+o$sV&z}Ua|c}^{B-4CL*RmkbR{4E z`>8+*bNciyEOq0C9QO^(VbHr7135?qF6987-fjCCfswoq)l~?)#5uPLJjT30y+=5! z=y%}fqpp@bf(lqZd=1rlj(cAPc=0q!*D#j+JQZNz=6`fe%C*l0KFd&nO7=bJ8ry#g zl=5G!u9M z(AZ7_EL~^!Wq~f9zv(*L-wGy6AD}+Kc^Vbuh0~w9elc^cR8aB_x`8yApKVe>nJei= z;iIUa@Z5A0V;+a7;8nOSy&CVC`{$D>O$DFggE;z>*?XyiA3v3t@CEkbh3}z)GwptY z+DK2Gs)8HY&#BvNpDegnxW{d1XL@&AZ5%=ttVk73|{wu#SX(rRJ3? z*eLrCr#JrwRY5mSeb0DMJJy#}&`sC!EFJB^qFUTX&;X`eM};?`3bpv-8z{cEe~KwQ z{#GKB=?22te0$gw=5U`?*WcYijXP5q&j%!3htrtBGviD_4PxwnovrKS{a^}~GY?1C z+WkSn7hGu9H7FCi{f)Ow!E@~Y(KX^tGX*2Kn4+s0Put%VoJxVL4|O#iBL^HY1-){K zyrZk+yle6s#H+WPu`Q!bzTr8I-o-VbM3XOzS6#_C_8!QWqMFKSx(8IY@23kSmlPNCqr(kmIG7%+hZdaR$R|B)Q0 z@mJ7+X28Gu2LF5#GauGV^jG(N_vbp}e~Sky`cJtx8~@!5M9}laFJ%1Z$bRxCdEOX* zA3l%j?=24`ul6}CEUna^(&N0W%;YU*F`S-Y^Y?l0OMl@tn?KH@_3UT^pWAtP-uZY8 znX(;bqQwd)ekL!SUY`Z<6Hz!)`Wjyye@7B zERmd*@!cn0zGdP=Grqyn&*zVgf3@-T79ZRS!uS__YjXF{=Hmlc#k$R_OzwgoX>$&% zW#4RaZJu^5O3)sxztH54=KTw-=XzX@$+g^wjdXn-S!#0Q`R4(fF}U{R+Y~DJYirtMLvM4n;8^zn(GPzANew9S7U!x<7o1@kovpwo7iy zc-HXq8A=$7iav_Zxt|9+IF@^t@jSwOFWA92g-OP9@mxGm{061cUp1Z#DweK;ox&S5 zZpmdpnf>><7vN*F*8wO;$^rgO8u#lw7lv}V-x&AE`|uC^H&pz@xqagv$Ut_e9KQ#_ za334j{oVE>$AReHX04M6zMzi_0({a^8@#eAsnIN^D2|QSolYgllUBGvi;m6M1QFCv9gZw@fo*vp~+gv zJvZckbFbHAy)OLM2w{fSziF~=l=FFH1_hq$OqS)PMDCM$b7n1{uOQN!@98EJDSa3O zhlt`{yvcl-d3`uP7e7Ph5azl-m_Bw-eP%MV*vkiz4CbtwjAG7(L*#@+6a+XX!}3%j ztic;-GIH>(G-?<`gb#1h{~+85^0z-^euhcE>vSyOAYVdq;OO^Y@fh-i;xW1Yu}S}W z6Fm`*GC$_eJvb}qf}4x`70&tMe47JmCd2MKoI9unlWfwLN!}|m zm**0u&qB#dN6ugYrs*wt5s1iK(Dahr6hvfxY<6NDl@g;%_#|C30Vg*nM~M zczz#1gw|P~zhRP7Bwrs{w;me?SDK`m!pC*Q7j2S;Vhd+<0z`W-K-wh5Ve0qZ5fHtU zK=`Xo;x`;jfvDWiP2ySfML!GqH#kP>+iDV|7Yxx!{9G^z_P!P+4b%F0CZ6zZ=xbEPx7YcRkg>6J=g6I(DYHNodL;3jcll*<;XZCTS zZ$NS};f+^gA?z-Q(wN}UQXTP1e?aT~ z@opWp`Q(`7Q?(;KGl&HUxbU%d@GwF7ubA-0bj12CV)pkNu{^HWgFIl;VP5+j4>9YX z4&TAxbco5kONYpEggoJxcy@IMrSq=IfvyV*2%M=_|Fr#!nEd_1KU^d_3u0UY%Y${r;%$!MWe6kOu=Ps< zKj6<-?oY6t9^=FQglOwB`anUc-Ooh%<9j!h%g+I#oB3h|yN~rVXq-KJ3RFuk1){vp zng}(vKM<9EJycU|bjE&&o+w;cv*36H&YFZ#|AzjM!It*z%fD)~Y^&w8Mvq=Q-BrC$|}AVlBf^Bv5JP*CGB zh;sdN6fChGD4VmmDqVFSn7(joeYaD$43(+bi1X&^ZcN@VZx?>=ZJ zJr;r=L3D(8k}G&Yk_b_%f8u<*%Ff%Plt#?D3#w5ra^uhVJfhb#=1gm4P6<)FH>@X} zU(*hV`uT$ajdmXr&62rNbARriLzHfnXH9_?$q9iY`B!KwmiMhAxg+Sn?fZY`Re|ID z7ZV~kLdfQ`9oypwOMVRfF~V<((8sa=H|RUDoGjZLaKx_&QQT7C8xfqXq%Y2g7>#S+ z!u`!kz6V0AhJBjgu!d<8bP4|e9Lu%pp2LF(aOfKNKnd*qf?|5u?^#X^b&|H1gkHGw2Liic(^Q+XaIVcBV)?MeT)PwI+ zFap8_l7H`c`wJwEJ{1G1(yOn1$#*WTf15K>ozEgRAM|wljY-qH+GS42uip4=A z%5(5Ht~`f%4+sr*pX5D`#D#A|gUt1n_gpS;LOsX*A6DM@g}+W3`5&ki-n8<(E&Z4p z9yj+_p2z9I5rAX-eh<}zaeiKn_6yV2sXRY%P6hT@e!r*qE4si!71!jw%5#7M2zSG7 z{#y1`-T?#*?Sfr4&+i? zY**e8?`5G(e0?hS91gaE%{8dpN2SMj%=eu8KN59#p@gWMW6n{z#RR6g3ASf4$3*2G z6hD2j^huTPI82FLg1G`7YoD!ribWW(S^SmCN7e%LB5geLTzX?D-&?|$TW5JbKK?j8 z0Gh{wrz_tRJcx%SZwOD`Cp~RgLhHmyN6`Nu`OImIEqzk?Yd z;IDNB$AhxaKg~rrUCHB>XO#blpOPYam-WL33ei$<-CDhyW1@Gfz%|TW)KyfAoWDv1 z-ezB-u0s1=%cjLDuzM7gq)4eWPo|pQnQTumzLywytGO$+PH_X7G%zBZ}GuFR9>V+{e~+);Ax#jh~CU z{u}-|si5RJbc67KRPY5kr#H%dP6fZZzO@Q2rQrJl-OS^ar&W;0Z^!8t`}xez z<36}m(NKe0F1p2bMH>mP2qcaazVs^EC(D}?R$yI>%#y|2;{@!P6`iE{6B(%E~e3U=}Z1bI#Ln0;Oq zrb(~g5nq8S9K?Vh?b!25AqcO?p_uL`J5=HK6bv|9J8gvHNl}GM#qUx79(&MD;W)&c z-cgMG7#=vA!chz;&~-N7TX>~LbM7Er%h<&srtoa(1JrUYXp$-H$MauZBl~?*n90E! zU2XIA1qUgnjGteQb3JAX#DA#wNPpB6SU>pgy*J{Ucc&?s%Aza1OP;5u-~sW`S2Ct? zxG4Yz$LR`r?jc`_`@Fhb`d%hK%3Kg#)_Y?kP5?~)Ch4u0O8?&E&*DIn-a+Hz9YrSp zr9EUe)g@?A!mqx`zg2qi+hwngzHb&D>TQ&|)A_(@mv^P76^`LD)pzWWQ~w|uJaaXIwFJ5!8*Mw%bZpZX)l9VQw7Gu*${j|s=w z_^%aS{9Bf{89t-}G`>4tDOAc!}VJ*LHHog!KOu*Rrzi%ajzhDJTx33vte4k40Y?bgi zjnDSd*F1VTHV}R_zKg|&u#RK1xbMg$-Krlp2q(eh)>9DVOxQ@{g1P%l?ji#8EQQT> zUzPhdFFIkX?SJIn@j5kspokxX{Y>s@(rYiayp&wwzQeXFn5%ER+vnqx=PlT7_g7xa z^Vr_S1$5)JzULCU#$58L@yhoScF23vc&UCpeF2op`@(qIyO*C^^)c+U^GMHf4m3fT zcqWbK1IgQ$Ss#n%9v*x_xp3Ew=S;L{JX8%8Tz|UNcx+y=Que*Zy`ASwP{}yriRh~k z{^qXb%&j%e}$*={nxmrA)PPd2M9}_-nd?nIYzjK1%bwOeL0T& zMnfc#K{dveC%)#$0Pb;`966Uj1Yz-4B@Z*%>$afD`(=pC`E1NxPoHG6Z|7b$@@QyL z5HZ;U@BiiKtEV8}fd$JZ%i(h&MB4aXYqFN`AR6cQk38_>oFtR=ru=y=|Jr2TBK%Ot z`lqw_@qZ@X=MyoR{esDia-RGDEbt02#a27CW zemO5kY~P{JSQf)TgkS5uP47A`ghNF7>ZbQx-XDWAoWJL$_lrC@KtHtjD|$(e0p}|O z>Mu1t@$E?Yw@4N9|4q*U3<87*$L=mQsT)z_v$zO<&3h}8%JCQUC&>NNq>6_fB2+in z&}vd_o-ZQvE0Z#i`@rBxe$FJX#<%p-W0A+sg;taN2!XWvBj25KIVRaB`7?*okq^!? zN%EcqM|@T$>0Ud}XN>l_CQ-OLI8UXR;H4%}dg2ge%;yOvVc(nh1&kmshLV@3i_~zf8Y=s%yTS#aA)J=wf~%q^Jmh0ovRO! z-t_S;5WAjpt$P0n{62;l**od_#KK((*ybOegnEbwxiz)o#nA}%&bdcPiW8+A3g4^zvTswH!2)gPaw%kxqT1O-o2VJ&T9j-&lgliUbNuOPZZ4SLl`l-5;t_5>mh3*r% zaIV|!JfZtFy1t#ITV>7%-8-mYewuC~jeYAn*h|<@eQVQ?VQ_y68rm! zeM3OG0zFGO=n(svgvNL1BF0H1LF~mPn5dYbx1rS$2h$L{iudrk%<^7h!jI53;_-s0 z-5=FmPGTzT7hx$0lM%Xxb>zAD{p*Rwv(dWT`Zr?9BuMMhC5($eJ{Vo=$~tth%qbvB zU%LyM^p=yUaB>;;by(P^*P+#!`kFD}#pz9$YR5h`_DfgtD2mj`E) z;T>YaOV;ybPYSU(TAU2lZww;v=W`IXzUdz%#|Y5~^9Ep<<=I5b*dGaNxsKKc{p1{o zgd*`qL6pZ?x4{l<%i=%>q8!H>1LfkuLY|p$9(HmJ{A!4DjQ$F!l)WrOZU149cy1v| zSnE^vLydjjMi)tMs*bPo1rQbgH`LE#upvan?+uOObww`&_xqsveCE?aRD4pzmM?|&)`0XxfQU#`OZa{(1WP;xgRLu z#XauR`1=b7Z9gr_x~L2|B%WQ|*NDgUu=EmZ+MN3ukOyP@0 zCUgEprKFNJ=qfyq@SI(x$UPbJ3k;A_DO-eV6**maAgQMbH!hOQJTR5|8H2kaEPWo; z^BlfGL0EF1s^=x16F?dn+ zev!p;5WbMP#;T8t!K)B<%Y3BItAxY!L5RjsDc`6*og{`H1tFTUz{4tSB#CZc!@LjD zC(gN9rTr~DoKD#zs`L}6NboXrTK;(Ybn%RIQa$gqUsOgSdzYX?`kE?Z9NI6hpN@Tu z;{Mm(*I#86A>Jx77dj{{e}A&d@Y44}0%wZH%S`VG9{k~mg3a0@&W#6qb zms4y%A36ya_sgp)Ga|g#PT@PNtP@Bung*TnUQ$_-8-WhtCaSEj#23*a&t;V*o=4~q z9-zvOr!Ph|w9}aKl`@rm4)+kzFHVK;Qk6XxkEwp#XYiQfY4kzxgAdvnujW{c0T4hD)au9?fg7c?$g<$3@tK0QEsaJR&InAdG0IsH2Och1I_qf$3eDo z7t8mp+0Lgt)<4#4{iq(gmjCh(Gz<d8EexP2#mx9vZ`qk3rMyFY$omSCsd1!dj1qM!RqEj$_dSG+KU{SLP(pfbBU96f5t0(qE}3?8oO{ zDDQK^W2m)!8BbVzN;T43P#(e(`#yl`nQm%4E05$?q1xu7JvEZA+QZoEWaUlADe##a zpo)%BRn5vP94FY#Ym0u$JDx9&u*>pgyk8RtY!g)4{h4yTwR>_qppY{1|v-51<6k2aRfV>Ch zvMS#%3kdK4>nV1V{Wud{er&k!$}$`gN=p8x8PSajH<@_yrejb74^fQ;v;yf(fk>qT$zdsF3g zqowV%oq8$7R{Jkdem7yM9@c_mIZgSGZB&3cSqE z1-+X!K`*O-^?Oti4(GE)D)2kvr}`b#d&Hxr0?UvJJ^oo;&DTHlS(h+(URNVk6_Zmc zP)_UI-n!cI5Ccv&0grV}!fzxjQ^6F;h1C$v`Svrhk04&W8p+|{K7k)Jx>nAiDtLj+ z|7(dlaQAO2cs0H7cjy}FVc~v(dCa;-a!@Kbl!M~BhR5iqtKhR-1k$yb?!dgG3W_&d z*I6E2ka2cBbsgiI&sV|qsMV-ksO!02(nAG>7oi)Fe)rk;*Qoq>0@3|PH`;w-ejW`X zJ9U%&zUB{+ynM6p=T*Ms)^!Vyi_TT~(>cekTWPFw_G>DCG4r0W_f8`BzAC?jz|%&z zam*d}3&Qu)?Y7^Qf4KV=G=At##voj+3N98NS?Eq4Agh8~Ihdq73BTRks0!}Ez|OBd zbjY4h3LYZeM5Yd3P6Lo(s^A&+!(v~8bI+=PYYQjouy8z8!CZVjywaf~xaIt$1^W;3 zbJCHi1n8Kk3cZ{g(9Ycy5cx?Jp2YJn?VQeqKvj6X@c13^JgUOmNgPzHouB3XR=A0| z&)VrCA>Qe#a3^zXb)DomOyRu$lJG;<;w>2~4W{rLeqQQY!mvjso5HE=+r+*N36V-o z;qy7ouHj)_O)<$YN=)H{>{r#*T-SNg6y79U+dY`-|7iDgQ>f^MS*NRncV`L*(IEPE zz02lL3-eeMt}7RDuGti(uy;pS$bHQe@NwdPT`v12Q(%O9TPB|`Q}8)0{=d+r`0~VL znJIXZ=c#%J={o9~Ou@CdChAwLOQ?0y?_pD5d0^Xl4feFjKOlXVZNe!w`P*1brHcpi zbHe0XAAJ$OZn91OE5f(hOl_KLH=2B^WB##7Z{)|L2lp53wb1K@r)Kh#=`T8_*Gi7f z1b2TypfA0ez5wf?_U9Yu&3znrpX(lO^{eT2ihN=*$lf`gLQ$)a}k#R2B;GMqVYA04|Na47T)@=@%?=QO%R}3-j~Mr z0T;2L+RmGO_c0d-Y8byW6#EZ+0fidISSaJOe!Uuc%3t)3$*ts`H`LPa`oxII{q+mH zsf>bJl#QSL^E{LL3W@B0ggSX&o7|fuKU^pMQllJN{OLmm{?*ynD69n_xh z-EF*wnZE|5fgO|#HQp`kcZbpl0l|I7`z_D;VW;GJjrVZ|89Lwzce1<`a|V<4mujoYg6e34ZG;CF}%`vZjyWdZt05|kDYf{1t}1E ziE&3cI0aRfkL9);g*}pkHtvsZpqw;R)B0~K?kDc!Vgyu6U)#9P)5MdT%F8ogs}JljcXbEQU2{0xSnTEA4D?g3$@0$PJf>!L71nf zHC;cG(;$331o797QR>HVZt||ulu&!DG-D6XujB*>}n1Mp+A^&4<`F@0_&Xz z&b8bNGubEcy&IedSOjXax zsomFIgZ&KdSAlaJdrVE%B7RU|)!0>lbgHCM%2@zRvfM&o9r*tkuFR zj#BNt_xC1?p33NpjM~0SW+k5kael$SZoqv^x(%&Wl>Kc(q8h4U@Qw~+oq&jR`fe+Gx^5t%0S59@EZghjI^^*Z4v*!-wT zY2x!4IA{YbuIXt~-e+$(IKmA#DVOnL4;>j{SEs7OmeR9 zK%#QrHc9tOeVS3nkWtZ^S^ik_~?vn49KJt`wo@QE?D}yj_jwJ>b=mN^e~xYb%bLt{h*uHbW=amVe4b)F697^4q0Eu zUOz7)bcb-@V6XK{w~@{6;xl0{W8<&XEy96?y~0`2P2z!sy)&4TqU*Wte-7*w-=(gR zdoJu1PLkfuW8V{Cuj~(Wna#KFO5YL$&euWdb`^m7)M18h!I9;);_&OI1Lc{l#5k*t>kDRCj39WLb!J5 zbLJct)Ki@L3k{C&-=L9duxl}I-;3}2&@A^taFUph11;8f>_~qQ+K^(0BslDIaIY6R zhg^Jv*t6mp{gL9Jp>H5|(Q;}q!aAGxjoF-hvF(e*+=yN8?1mEI%0MiQ^T@E1aen=9 zzsVphsI>m*sP)oRF%~Nx_b)%w;vZ^q__+fy+drwXyrLLmsdAxKa*hxq`(^TC^rSK` z0eNWj+j|BY4oTiNx><7EjVPBpv)?p`%DxVo2?KUM_DeR(bGntLC7w!%l4W7Y_t3^` zO6+&7mmGWt*QiE9bQN<;AtW3{?AKte|Kt`3bG&*eL=g^s&k=lYNY4;ra{h*B;nv(9 zv)4fMU=Jj=6hSn~xdn)}P)%Y8#29mO0q%>rpblN{Q>_&D3Bq52?uU3D0nug>nWVv9 zIp;%E^1rZeUK9QUH$znN#<2ejd0$4i$b06%)AK3$4N*EKO!*iNUO`xiGq6wgAsX9o z|6qT=QN9*F0f(xvt?~GU5S>VMrU7tR|4?;kBL4n_-vUSQ^t$<**KuFN`(5-ya8L%K zDhW-9=c^v~&cHwL9DKj?z8U)v;&G39`NF5-#0!S|4ucK8H&xsmE^Hy+i$2C@t9W|- zlh4EEFXP|lb1FE}7gX_4es5sEgFtcn(N8U0E@vill2yVH$vZhz-&t`5ibD zgx`}`PK#yqpUA#aC6Vn5{c+AUd>>Xxvk8>A6ddb|NJe@z@__Mtg{k=DT9rJB7uVoe ze?)Q(wiA(M9Fe}MO1W8hqmicbXwjllmWv-D!ZBy1QVS(t9O1a(B$fIGVx|6B4w0!8 zNcvr+wsG$mB8+j)Qa$hF7YBr&s9ZK!n+Dv-bJ5Bc~1ag)=yrd`q*As_)?y$sx}-K9PVi=v9#%l}fJ^?|mrAMdDDEF@$r`(7Azu2`b|^@k4hC zzfWcMzLN^H&`B2V=O0#?fb_jy4G`kkmrG?n&R#JHiRVdWena3`+?R;|Pi5NvjrGc_ z%%ga_Nc;&x4_@^2!JB8Otg{#l10jmTT>7@kx?g-Coz|C|^&{V#p>rhPi*f%z;&MD6 zi#HDU55l+Wus)FNF+7;Ueg>^)o>kc&a_}2E2y@)XQE^g@G=7YfSz8VMC}&u#hm-kt;L!3Z_>^XgemW0KR5=kzWT zhZidkuh$-dYWwf^%s{=^)pMbmVnNk0<+1syYTN(vCP?pW4-RdIU+q=iv-s}~s=g&q zR)g~1%bZTwE&fgAeV6BWu#47aeReCa^W*UN-OWEpsF1v(%1yu+EFP)Lg}0&p zkErvGkFwg@Hjspbnx2_SW|D~&P!tAg*#3H4iL=l$M)-k(1`O3FOX-fP|Wb$N$fM+Nwy#B-8wknvJko_H;=NibSR zlYd&k@UW4}FckbT-r2&7flBA|_I`XEJ=qX8=sDGR7i&MGf?8;!f8A-kB1+!~8?@(V ze0lRJko+lZkYmvi#&@~+b76y?V~kHh+)&|uUw!MuGY{+Ce7Ja^^h{tq(J_Lvzclxesc{A~qG;g?0`5vbDNghMexsU6co8B?Sj#s=;@R%2x;%RNP;2aM>DyPsC zzoPS-`Lb5(V~TYi4Kv*5wrzuPT=@d?osXepyyjk1*EQLc+{ZYV)9nhk zA1~pU)XG(MjsCe!iS|eBTJ4|HenI(C>zqHre@HfyHSBt+yXF}Gc-ha`3fK4Z-zwfg zTgmpkiw>ebgY32K#wCC9C&KtY;scAvZg%}BzZGwlty1ot@w+_xR{B)XB;EK|N}kJZ zQ}3AZH(xmM>MyRd+j(s=^$+9UF8LJdNh^=b-zY%|yTk1#{bAvG+iK?@2n?a=@$Iy) zQ2w(C94LM$Tch(96F7qKXLl^NH3XTZD2oXkrt{@mDreq)4*m6L8HCX}TFz-Ez<-=+ z|JXWxkD0)2bi8=1!PfWw_nww>lC5_r)0ADJyrYh(@&GhtGn5b3;eOt|`-4t;SyAuBl)bBY`mRT$Fk#A+_h-8V zlQ6=RZI(s7?N*MeDT@+D^5LB}q&!X&Ojmz*sIU5Df}?ex6FO4-WF~k3VOJ-AXv17n z?2ee=G5jAs*M_y?>*&R_~t}Y>)t%t5QkqegHz;T=#AH%YU_E9Q$Ta=ZFWy^%) zZrAHQmi!p46rioM>-642JSmy$*|kzj8jNMPgrV>m4CjbY#h>s6bcT)d?v4NM_g+!$!)G(G#WT3~97H1EjC+de- zI$Uzv_D}UcVPK#1C+)9HbuF2XfekX4wLj|n76Z!BwBPc-?T#!AJgh&D&-DF_CU^&>V{w^$$#c?fE(bR%~VpuZ!aT57%fh{iIUm}mcVX#%k zPia`9+#T5FdpD08_08qua1PX|R||bN$_E7M8MA)& zbLcx!zE4oEJVW$3Ust{R{r2wQ#l+Xppq@MQ&gXBu9~zur!22j;O-4hb<~?a&AqOXD zlv>M?=siF{Q_ysj?BUQ8*Lipo(Lkwzgq|gO{%>ZDU6_0muZw30HtPEty|aa@N2elY%Oyg_l2yo}}_lt3;c6Dtea6{*!oiJ)_rBl4d$=ci&%6f1T%S-^B;`EG()NAOr09XTRYzV!)zLE@O~7REy?o zI2PR{&nKwiSo{T#VbLkP$S8su{js>Vvcg2X(0&Nbp4gLtkKelcg%3A-MCsSm_QQXKf0X3SRpAw=$6K^v}* zaUekm=o?1+Ajw1HfX#aUiM%ZNZ5(ii?t3C~Y$89!AmvF%{?YzI)~D0?{~)qaa%q^Q zo)CyMN>36qLlTUDh}3_}F!LVgN}s{v8p=ltZu5Rj??<%vBQAiL z)GiA!O?jpeSN{M0&7jaLA@2P0{q9poK@`<+=t8<*c8q3;>&m#6dL1nX`4?ZCd@k(GMLZS?nr2aSCLH*oR@63VB+ zKK=Ozdltl*E}4Fq-F>w7@#3rpdFLJ5vw8vrXitLpal-ktDZOVxoT*kLZnLQ=43_N& zaXDVyYm>58nLs{h8b^Mx!X}yCdGqfO)113aXzz-?AJWgU3Fo7Yd$qS6XZ`rvmmq#- zUv7Nb_+aU0LVT|HZ)}XV4v(!F2?>Jydq=!!qef#jz*Gr8Dy6TOmt(vW0b{V%WCPPWUR z+W|@Chue116r2mmD*67}mbm7(le#~(P0GE5WQDxygxY8F`PKXmtWeJ=#GlpN=kIKFI_OJ?v)*O(JiDG-)I&x= zT=NQauToDyyqg1ZciOGAoSJq;fVeoqGq(T8cxO8OzN^MurPXZfI!^fak$=9y=RH)_Sz-83;;M;P>E~qD}v@h8MG3N(q&>R)*Q-wnzC?!RA8_CZ=~5x+|YEYRru-ZA=cjNJcxXc3*-84%;!Cgn!jzCM|P@hc(b zJPloYT&hg*}38ypsAc z!XJmd>OrCXhXfK~-&dN~jncoJHY}#ksj^pqsMNpum_A?1pdF%)|KE2=U!JT$RKI@H z_ePE@QJ-d}7>meBsLPUF#CaaNjkas6(zcGOi%4Wd1;va=@8|x6SG6TLB4;+M7v#9)K zGtkHN;?p3k=Pfhvzap+Bzk>9jO!lkdBZSZsvi~!KUJz~(gk`-r-3)eljF9MPA2EaL zI0^g=g!Fx2hMcB(tI%(7yq@;#mDHmACixn0T3I= zD!VZ0oc=v@$oO`kDOjo8wGPcSn1Wr(Bkth1-nU6pI70Xt(9SiUuewbk>zcow3+2X7w%PSYQi&u?!Qw(;v&lGtjHwta6XKVP_6rHAisWv&L zjxt5J&ZG@?8np5{=kAY8(F?jCYZW~?@tXd(hlPyL>ii-_&PUdwzCBa)m-3C8WGr#6 zDVnBy-3I>nOd-F6z9*r<%}0w^C;9S6(5Uka;~A;v;d-XzT>S<8`?N1o$CQc_fc77H zo~>og8|?#%-guo0|4=J2pT4GOvE-DXMzGYyrYNd=+8X5v8&A1-QK5$8C|4~qp7Gju ztLE##`whl(-$#_p905D%t@zEZLySji#q^#OtX!_~tkTcdcFjppKSKL1+myd+yg`}2 z!dA_H(*8lX3b2K--td|6>VF5Sq&9Jl@%|zJPuT4GIo<}%%WS$@=48gFb8gs3TWRX~ z8{crbS3~93A`~^g(?rMwm5yKIJ5N1HmHc{oeVy@5;v&rJutDN&4;kO{_tJnO12*vE z>!r_(Z?WVsp+fl*# z_41Ui)cx$=qW8-(#kZ*6=v#TroMMXKV$F3Hd_GSOSf+TbdY---&kvw-Q<5!x0{B_^ zmZoHa6gA*iJ@=Rr^#;Hk%@>=Jw-}FivR%UQ=cdKvv#8?WiCwNa5mOQsUyfa=y;b8s zOt>6&4TXY<`(*r61bk`N3jTS#@jE`uI?>?VWc;7V`NCE>-j9Et1UzhSf5rdpPee|> z#8xskap}j#zwSv&CKQt|TlN4ZkS5$|Tjh9f{&v<|9B8-bz0CwXbnH3rce_=7t*$fy zorBtKZeJ7dOE1lCSC5kkjN}VvhE;9WIVPaIXIo8ew*70LGy(NR*&6lbl5c^*3`g1; z?cJJyo>Od%XfB7Cz;nufuYF$v5GL?H;nmtYJ-3>`Lg}&CdLE1R{m2BWrGQJ^Svjzn zz@93e#M=hO6s$p0s(BykJ4iv)l#afG2g0_|oli<9entm^lx@;pt0{d*a>=%tV^nSL zn$q{xSKaLTP^DJDg0_X|+y5-s%(@Zc^dIYvh^Y_$ekerF_c09V^0kg^|X-EADu9=mY z;E|HkwA}2bS4hBQYU)#!5fU7UX;5NBf+AYeT#o)gj$3NXx zIX`RgM|u9+&CZ7%d|!M{b|dRJIv%Ay#x|N{9AGQ?+V;YG7`&H3kiXjvj5`_rE(Wia zoSdytekBIallPTfuU{VqkC)(#T}RZ;wjXXFKL%fGZ?tRpU%US*;z_AbVwKCQmnD>w zyF$-5SSB&V`|L8dOyoa;Wgl{2dy!otF{44WzhErhnRb!Hq))`MbJaJ!P|sh~zu;qx z&*A~Hx5Lt;`ZNCE7WV$XV(ALuSKD9s$2fE^mcFmQzdsNJg`Rv^s<~maPm4Qyl!>7US52f!9LfAll<{`}>zm1Fl`)MH8bGHwdNHmO(Mf+dUOIRo1T=Y1rW%w^rkS+GOB zuUK-UfXJX)`%YMLlIBlqIHq*XN-P6sYKcCR{`w7A{Jr+u zYehfj$KuD8=Ub=u9xT2@00B^^`2#FISiTUbKf9U=L!IdBkwGxjbFK328uTsK`&)x@ zH_-PM3pul(LE?6k(07Xj7NJr3gv4vod_kk;MbS5OECG)0h9<#IpN-xfjE}t(nmEp~ z@Hg~+tA4L0eZHXg5uL9!vwrHJN6~w}&QY3a=ziscRp>3F)6_E$;W-`v@0(8epr-Q+vUWerK~1tW*gizw z6X@yGe(iRS+dj4iJ%8%^dBvXy!|n#0t2|_!0fwT?_ zPU+zb2ZZ_4c-af&i=f*3FSfUDj|GF}`37N~D`I}Nh(#bQAG2AQ|AqWsLimd}8GMQP zj(-(iBL^bP>vlY2_q@ydLyB6&TfK|>e3*Ch5hvCiHU(OgUygal%AyfE%H+R;dHURd zt_!$;T8nwhx!!&ibV}Uc5D!X%*w9H&y&JYZhk1oE*QCBX#Y{TdFxT;mx}0w&_ix4s z-349BbHrTb^g_4mQ{=wKS~}{VT*=^%)tLJg2Y+9Ku+D!lcY}IkBiiT1yn%Ajg6Ld% zZ(!ai5!VsVM1p#lcUaRAbQGa^lk`R~ZxGRs)3PAOW5!KSVeS?Qwm__b2Tv)?6>J5~ z|CH~Ixvmcs-%mK@n0un;c;j+?DaPFXGQouS6ai!r|4Hw+aT$j_h&l6g{}O*u_k%fC zvGDa0;@eB!9&-w()8LSJ{W>SW>=PJdcQx%RHYYhvh+y z1N(EZo&NrHlB>t8oflD)`9X+Hy^>DYi!saPyJPZg9f6tJ%Ym5t`DThfA^|7|1N{r3c~Fctig-Z!tsHG z&iyf+Ee-en2NI5Nm0lyDC`c$@1JkvK2Z@Kp`+@17>isz(Sd5!6U3>bF`0~{%dXi&$ zudjfw)2Hmkv>xTDB-p-v(;iHlOIqFK|AoY=Lk=Ou5cX4VFC?U9d5qn+M*_wWr4}hJef6u~+Jt&P zsINdZu+b?S|BrrNlDeO_F~@sK@>8hv1shFW$^cwQ>igG5%PEC&0QDK%xikV?OzaCO z&7;{cO~v_rp331G?Cmxr8r16{CGp=$woA`xkkVYg?a&-3qz;$&jBVxdy#Fiu>qNz< zR|B?L^ti`EO8b+xftE%DOn{W=6(68nl<*uOsr)rt#ka>>7eG><2X;OE6iJ;4Nj*>6 z#p96$rB!frzfi0^?{sf5=SV;ERxw3f}|64(X)-b zF8lQlNNkh$sIA-0AM7?raIN&1W?OrV`X3Xz_qEl|SCL?yE#;85a_VrzW=Oc7?`DZr z-3tlj3)@PL?R>lk67NXg(5{om^;z`w3$Vtn(t7|T)Q4l2vSsqxZU6VrFJR5fw{?(s zVc8@i*I7MYXF%d1@o(8Txz60Z9TGAIIThX?e=%+JUV()3Cj88=!T)aP-LHVl6+&F} zq@}Rz9QEDD1&ebStaaXoxa(C`Fh;$y5#s-)di*QTz((bS(EeihQhJ5JX4d2-n^R33qrKb#y zGTuJ{;*7hx;w@+vZ1tJ+d|sPRO)6+2NgnK6Nc#*1k6i%G>N$j%&Xb{4Is6dQJ|MJl zjbeEv#8@{--mDJ6BwYM|eVcCOveJH1JZa=L7Je`7FXj6UVdn>npS+n(*$|~|5dAHP z>wX<#&aWOnmS_fdoB{FuHBTKsNb*z=S8g7}Jq#c|6B3$>gZMzrDI`^_265$iK}s-A zIkX=Y-z4-9g*fjqdcO)L{vg=7Q~+%d6D|Aou^87W+uKEu@C5xbb;+N)=qKE3-4BR~(+CnY^<+IPsg)AXIn z*Z$jR-y!D%(|423V`IwyHT~`vZzMz$d>kNOb(?VSAzBlqfWSnPc8T2AsLvw5mnQ8W zE;M+E&n0;bldkzghzf=_!=&r~CtjN5zf4A!-22I&B>iNQ;k-0aj+HG;nGDy9iJrvT ztx2XoS(s=w57Ck8*X{p17sVcgsI1HTnoOPhlJ8vx)FzW#vc$`Go*|PZxRJ9VQZ2kV zlQmOv>$L9>Z<)!emfQ{bI#?{S!wk?p1@RY^cQHWcxDa8i=ONY%bo;2t$+VnZZ+(rxn)yl^Lv@BnXcW za$(L4xmNS`VZnl4V1{f`K2SJc3ZrJ|SnZ#LbZ=;eI^TGxRzUG4oAEu%=R&xTaI{P| zy`6|d4&f;}ug_lj7dN;eJVy#3CMSmj3NMiFL;B$+=S0n4gy+gV#Nf;^G;EP8BY#$s45mwUFkQOdfD-qA!F>Hxb~IcuaS&xb`3DmfA>; z$@@eWQ_$`B8+k42d+Bz0@BCun?m#zLD9ICT^3_8CU7E8t`7?zN0$t8moC zr6Kgs@8reJgU}^o=ozL!=Y`P8T9{c+nS#j-?j8Go`-_6tG+)!nHMe)ZHwD|cSe6N$ zOiep{p(!kvb1HOjeC_vbrtnfZFhGa)-A&=+vbd*yhVpC*zmwiRbVy9@P*Ye(80q*w z(9Y}QogJpANWfswF4v*qrsym#%KQTD&eu}J7W?TZK|9kH@{7m^L9Jx+^0YgDZBeb} zpW3BXPCTZ7fT^L)<>NhP>3y|L`O(HB8q}%K>iA!t4}=p9Equ+$j2O?2l23&uZrO~U zV2V2U+6d4nSc`{E(NFxKI~VF5Z>-4iTI<+mcElP}^r7x=>s)`QXq_BjpicX|rf8q$ z>uU9UU_6J5FBodw^TOl$bTzIo<8eI38h#91(r!F%K3^>ur~vsOq^Aix1Ur~+ykr@n zp8)J|`DCy5&|o{)LaQpM?;wMF*!FoLgOiQ-B?gB-3tQ#mbC&V`$VGI7tz36MbA$1& zmc1Knaq~rQD~qS*K^5aak9^FHq&L6Dj~*q>@FtZ!Y0AU9AhBUcokt4>!S9=Oz}PZcs>kP3MPG&DgI2~-z(g{xcKXTjxDbo z1B<9EM9nT!%-5NV=flt1yEDalFM#g}a&qVeZbEAHuFI-)Gk-Z@~C9r)}45zw#LECdVK2?-DMb-R$xLfnmapwpBdk9r~IHjM00^mKDRNyjwEB1SUza z+iumqvk5pJ(KfD~oco3eJS#b5yF<^xCh$39?+>=s<3+4%0{=?k)zkpPS&LG0=7Te+aLuLEM^AFH=IKESGkj}$-Q^t{4CEg$d5kzDtN} z^+)_}f)DTusl#?V-%0Q(4mQ7SyOlR@f-lH>+;%(uU+_)2uiLQbGlrOQ-ILgGOnMHc z{8*VE+sHV1E}Qak^Tu6uTCJ@niw@;nvHS`7LhKIBLt*(HQi!(OT_2%*itr-o_mPX_ zyRrQ2OE~dlx9}LW-+NfDyc}CaLor%BV0k$|h)3Ja9GA6Qv3!W|Kdu9x-(fwD2o7V)1x0jGbg0VjYgV#x)*e>Ta@}r#?oNyN{$Zog)s*fInC#G@p(Jq-Rz~3##Ruhh;JCw^)6jW7)qVCa}M|Jbl^QGN6I=${)kh@zTqI3dfHs6##(pnDA1 zA~mSXFi@a<{jHi;Kz}pGSSN{l7^s5w@Q;bkDLyThaflT%=%!dP>nhMfw&{ z&27f=lhN<;!!?5MIT!u?7z|TGyhH|J6Thi~Qi9$hs8t>xmVBbT0q1?hl6$z&{T|fG zm}MrGoT*=59fe3Kr;jDRF|^?Ph58J%{W)$i7Pl$?vHlske_^q5*`cA|GHMJRjm4rV zxE~rQ)kA9mR*rAO{+`1~l<~^zD{=1vD}Z^SlSpw@S|0(8M&piObQ) zV~x2hp-D7)7ty|A7f&3ZS@0Yl^qnM&A82-8uWzvC!CGW(eG~DZc+Ec^D@47=aK%Lu<6g8=j ztBy4thpr+1llndD^?Zg!k4ljM>Rtb)=sf8uKz$Rx&_`lXi3BYm6p)_-7Nx5%J9PFw zGJc(mh3nLd8M^OeItUKM!gqE55^{d$!kZ=F3L)h&VBu)t+(JnE{#e+LL7deP)^k4= ztQJ58gin`)Fc!Qm`+o?FZqttiE(aN&D>-s37_EHsuzEPKp!eU`By&~FUoDGIyw0?wn-|^b|BIwpR9OgaY z`udu$!Mv%{Xz*VQz2EOV!?DeY5PC-n8<=;X^zI?-{1ACVlH6>h`y-7{lMR^HPv<<5 z{|ZML^L*m{fGEGUufGQKE|Pl@#8!Sy7yA1!??zd~6K_R)mY8>zaPT3nc}L8X823ns zOYP%!%&k>FWn6u{)W^{KZTxeNp+AJVcU?^1E|6|5I!XbqCd%_36499Va^C|MeiI~oHjI-kqe_V2;n0Xjsh+kL+am^cImc+)c zgSh&!Ftb)X-4It#17<#;`TKZN4}$`*|4!vKBzO!#zM}pTAD97&N5u<*8Ce1&sBv%OU#r8}SU@Rn+uWnO%j)#=QDQDW0%j2i?&ta42N-rH!N2ZY>`$C&g zZaSnmzCL4#jSFt7-u#nVJ*F+4_B&8&4@e)YfP(8&cy~pmdR~k~m!%B-QI+*U4Cx zd=}2HuwFg2kj#}ppsf`wH1%U@w0GU2o-jyMFtB*LZKXdoC0rp%Hf2h{+`=9u9@uD1j!qjGgD}*i zbeyNSo8#6h$A8sTXmowBxYQV@Kojfg!+WWJBw`L|;d;m)Z$kVv z=}$tNMQ#m0Je}!}fWjmm2dpidlA-+U=SD`7&D~i+YRpy>2 z$qS15I@*JYxOrQ=T65bGoeM*}w};S&<7gLCALbAaBGKN1*9E6QT#Ggk*IW_A|E74- zp5>5uMnFgq|5|e;N%eq2{C(v-rgR&D6 z;?C=``;e;%P*30gGj%S%hq2B_kgrC4)39gv6})MOc!_d#_Ub*QHxB^&Rw|D&)`~#Ake^xt zn$&-k9H~jm7SB8F-v!uh(jHfyPV6-44Vtu=a2g?|`4N+TjrM3_#ZtgD>6=({p98V9 zJStjGFd2fuoI<`8osVSvDZNMHbBQ0$^dF_Z>nI*T8@Crs{|}`o4$-e(d~{(wn9S_G z^Y8lX4(i)*&F^ZH`LO!gqEE^_%Vc&+J`kdEJh|CqT}ijRnfH;eU3%IkYZ-$ms1M@& z1_O>>K+U28^3iKPe!#mN#9R(hO6$^!&I}x)eb2}ivcymP$qXc0-1n_?K6HGDfjyJY zn=^kfL}m#;zzlLelE?(P7n?yF}7fM!Mld|r2=F#IfcSeg|I%aOwKqK1w0Gkot~j1@3qsghd~Jy~$B-2lYh+aA0!1nqLpk)c#HG`7ENDL;Du#>6l#Y zB@&NR`9isP1B1}$yenK_lgn$ci#~>s%Yf13 ze<$E)=yv|r{BHd`bi4U>!2u%Vf-Z@n9BB&N?^~C0Jx#%D!lj2U)&(7~-4wVySr@0a zZkcKdc542ovr>V_g>p@q2%Qp-yxbHzE?cKy+Yd2?@9A@{lQH~r=9@w-z(I%ZeNE9| z;nhHg;Qa13MXc%Wei}NI^KFXmQa?!tw@J=?%@n!(WQXhP6m5}nH?&7(plLkWn*VEe zzG~0O93=BX`}Z3tsC%^WJS|@bw6RA0&aaF|?>*4Q`1n_zF`jvvTWHbyDe;}mvPiqs3BPT6|!-2CdlMJIx}aLQOUC=Eyij4s%d%KEUghk-cE@Y+c4`$j?xyzQJwu zWl<8@_(n)k9=6K0?NIt_z29sR4D5ZzH(L9=j`wVQS1O;f%JJiTypHR$o_Nu+CpNxM z_1v(D$BZ>U8Qh3R65vo@223oUL@>ef|IVORHoon`w%l)_uVm%^%Y~LOfouN_|_V7_~35Qv0{2 zB#S}wZ^1I>(Lz_F6YekVVK`nrEr&#fuBrh-H%pTf7!XHxRI@YL)}OkX+X zVNb+a9UQ`pv*?cM` zF>Hm~M+XjLfa!8uss2P0IQvls3fWB@11*2u1Y`|3nQ}YA)iD8`yAiLZA$i@NXHDQ8 zUU;vxTNIN(eFbXoo_>tosy%lT*sSyEZGzps!31_o(cbP*-lHk?h&agBsE3sH3)082 zHLTGHZ8oKo1t@N71&iI!l+Kj%1o>Uod6Ebl%LLT1rTpvg1jYcSpBv0S2CYWy&r;j5kxZ zMfY%~jJ3+aZriG!LsK@7;@eqWwoR}nx0y1DeNVM*ng=swJ2=SuvTfJMU z+D^*=7W(_=h)BbBy3bp1iu%L51lx0j3Em=NKik#IQ+hx?H?~uG1tvI0M8>vDzHR%P z;M+7NeeX5f<(>z@PXr8TyQB^|$pnAh%THF@rMVyzT&li`ZuuBrZi1_YFJrrvYifcU zq`+-MDEVMh?vtb)Av zFO)fz-5_g)VOTzfaLeuA+6tn!zP|G@EFUKG7`skz9fxCizV@5ey8M4|kMyYQ8eTKJ zz6*mb%EQuF#aIlkmz=j<&L5Mb$yf2G_@V5-5})25gP-w>?<~7`y?pL5_>yos>^~HK zCSy1TACNu1UBI+2^2-LVyPSlfvtcbsk|+s6eFz5S{RZpQ3yEdt$Oo2s>3^KsIQS|o zE0qHpY!DpvO;{Sy{col2i?MVu#fqN%8#eOTDr8kL47B(}M zW_|=q$Ed%k%JFYXv$fCK%eM-!U55NwTLtrX8~G=MlLFfuZzG`hde}}>SQ_AB;8Ok| zoC!M|?HWvToX^p}Qu!t|tcQD!d=l@-fd^`}zlZ)?`Qsae zTFv{Qf2@A}b+SH~g#K*#{6JmRtMrRG6-#QQ{{r>u-NlmmtTXgOz2-f!WR?U#p+V1U zSfcL$_GX9;lOA+Xd)ZuY9aJJtvW`;(Bi0LcNSiw0AhXBj*$>bUc%g^Dh(%{xJ{2j794ED;B;gb7lxDpBM|BKOn69 zP%Ipwe5Wwu94>qX3)zk_^Fs(T1tPBm3+nW|5#B5B6)gB(imBuSAl<^je_+AG47~aV zB8*FYyao%-RBm%*s?0&KAYUF_5Fwi1lFvfamyks&MBbJUB<6pq`;y3?v{fB;ALifl z9TmuP$+tinuJzk7f1Kt8qXRjh`6K2#-f2|#0+?SU98!q7eQUvKGUzAXvic7Sju)Q~ z@r8s#jrm_|pEsg>Tg;!JdE_wHQEpj|`Go?Qhp_UaF|S>`Vh~pTHRdf9FBkE~SugV- z=6xaOgQe#AV+Ds zK89m3cbew4V%qbxPmy;=xrX@gr-&>*6$dO+UR+%BK{((% z5q_3-c1-prNSq<+H( z{Dne7`_tI}aMqAfK6#7?ws8Qbl>-wYCTol_I6%LT5Yu@-4){P82GnPv>FoUlI6!kR z5ZC@QW?dm(BS;iW?hrFaPbfX`@i-*jl)X6im-YG4kZ^wWj84M*ZzR5ua$7M&VwTs@ ze3;Vjo>MXXd*#z6rPlK>_Pbs4X~{bX7umAQ?o%!TBtHaeRQpD$ z0TloE?Pt4(Zv&@T>IW!Cb&o!mAVpT>#%GSQySYAmS}mj|X>WAb9@eB>4yoIe@3Tw4 zPmtnq;MQkkC%c3@1}W#cOXkx0bjNN;DVNPA zobNcbMsrc|-oAtSqHOF|5i3GU=bbkCl=?YS%4xQd_m$U@QZI!K|Cpeg|9I$8o~8{g z63-m;3_k1kDaU~A)_W=RP^y00+vkywLIP~iqdz~}u02}l(cd@QsyPAZ(eu7-;(GPb z3!z6n+_s)=E)Q*hRGoNaZ8eWszxfkVI%l@kZoiQHU3zi0)%hfnE_dWSs*s!{961}x zk>D02^}J!bxV}JsmEL_(r*fDf`Pg(S^6ju4y?%?g_c5`~wn^;dAxQEy`RZA=Mex}p zA-PWaX0};-;gD3nnQc^0IwZN?Iq(l#FPMVcA<1LO+n3oo-9tdC|JOtSoo;L8@o*>Y zpTsL-tDQeSrE^8QP3NkR8mt`O%`wf7q%y=~Z!1Y&H}Zr1X@*Kk1JIN%cM2pL+cv*Gj>|zUBNH$y4OO2k!{>>lE6@Xs-4r+8&(o zI6V)-d_BDg7CJtDVnaERkIsW-f)6nBu)c5#Aa$m5? z^&k>DkA*GtOGQFRNSsCWqUYAbcES7I4+)n$uW`R`iDT5mUB_|YPU@qKkQ^G+b89NU z0un(El-VwS&8rjX%J~SXhX@k0NcXU2AB2_LLeDSpos!q*8!G&L0Es!u z{faWC>)@TVZ)IHDg%F#3A6-zXkD`1Qh##xG&4l`)=+7m4eMnqX^49d8qae}De<12b zoTNF4_vi1=xHY}$UPFG?@7+y3`psHBC35;Gw=p^5JPmD+}F)O9$#+hAwRkFd&vhOa~+5tq zKPVqP!gV(Pf6d@B88AcSE1mxiezB4^n9oB*@0(^wpW@Lp3WJFJSWYrSZsB0>mE;2# z?xz`|TquaB=h_U-|K&OD@#p zHj&MF>_`YdExkYDG0ENr!rIq1dDn7abOD3~*FA%HOu|Ee@QD&|F?kjA^tyZpgn9jS zeznO@SH4_G^H(PSSm8)Q=tucFO}=uJA@q#o%}o9`L|4AxYw9C2u;x3HUoU$!2q`zw z6pRv)H-v_==I3%#a63_m_M^NJ|M=g1(-eHj59r;{Em)xgOaW^@D?f#9y}y}4sSzCq zT`~^7)D(`S+Rfi9piA>iObH4gak-U(T$R0gHAn9nW9gW_u0{5=>|{yqiy<}YnSoixyB=Z`z&a8 zeh3fi9sfssD93~GoFPFfXm|Y)&%+Y*hIWZL`HkmS$w5KegYpY#Jl_r>BGZY`qP;}p zaqpof&2O5b^^E2BLIaPBC)b*yf8<^Ub)q$%Vv3rN;Ts^-F@m&TK?`_ww+G?Fh{ zdBt^_k0jm_7s@K3?o$q=U2iswrVfY_&$&V3T$~) z_RPljm-2?IdiMzpBKCsK?+BmO6lY2>7B=x)x9|O?ICtZ7Hy(Z)Y?Rmg^`>~F?&m6% z>uZY7VsZRD*r2&IQ#@6AOR!csm9&50!SO?|lG}$5e`<;?2T;C*m0VYTB})AUIRL;4 zj_Yp!+LYWbxlqt+S*9tWas*XoVaamIJDQUFm3OyDyVKg-r1{`dKB7XF?6ou=hq?l8n_qS(pmD*JEmKA`9{p8VNW z-1Z^=Phg_t@$A~(eZ)P(xZ!5kv(0+O+a~b9fw%3>onk8-k1#O1h9xSws5n$oeR>|DW%*hY?3`ckIsPA*U%Wt$w|sq7Wm587tu zrz-odA1#RfW1F>SY|2(M7&y(g5H#cH_Ic!QmU}ndYjmF(%+&dDtHhZ~Ot4V-YOxwq}m+>{A^Dn&WlNkc`-k(%I#0!X(VM8kRIUE(GE zpkHqX$2q=UV1mDinALV@zu5#A$)d$}$aS3fOzT7_XgjqxY=YZ_t7khUc5h6ujd7o+ z*iJo%o8TVVlh`h9S7O;Ma<7L?tpEC_8q3D2S8sDO1Fhf1 zG73utZdeMv{QuHA>D|Isx8ErJLFS6EjUYZ_D~Dm}Y`y1gKS;QFSb7PIu>OP{%B#cD zgEb#ot-c!!r0%D}!L?8$zm~^hV43zKYd(6610@)EQ+y&&>-r9Xn{KB`_9?{km**%3 zPLR1E)G@B((Z?|`s2@)%piXme=--+{g9B)AeF(o#isR6zoB=Fp6<-L*?IiC_EcsRVUeKh^11xz`L_E->drK_2f8s5N0#P1 z2V%&0x+J&LwkzK@|( zJ$&fxBLQxx;~LbNR2xj_e6>zFDCkuW1k?$(^Ahw5cKigWXUxD`JJCCd>mc_-J>&P^ z-HhI0(l>*KESYPeM>!hMAoV-)QQ+N7lz;}QUkpSKoi3Q)(>Od#jfwT>xs2EIBcPG5 z(VN2PIY9bz5Yl@o7JVm!TL^JX>4hJ$NY>mL5K8bDh3f;6-#F+K!h&ADu=eb+;Bw)v(|$m{PAoW3`gaf= zAvqSz4~r-QqJkZ{5cB^Kfht7rmpu;V&%T>Y6%f@u66Py^4x%zHxdQXFrwEZ%!r8#Q z|J!HCyb1GMzBxk6_mahzVeU@)w;lclL>Zg@#T?B2NB%j87D!GGbLVKjDq19Y7RtMu;*sYGe%#*(i%R z+DE+2#Bm%VHn?>V)4V7SzEW~j5c^3u@HprL*~dd%=NvdNB*6{Zw@4ln2l6rSE#j9n zi+2DA{LLW0G)RJV8#Axly{$aqYo#OvHztM_iu|p;(rVbJcIfXy6;W=b`1^W zPs5CxxoCeN<)x*skLjATfy5f&kYf5m@qkmlSb2w8t0l-m{0{~c{DcE_uMe>ZgBNz= zKsQf`7fLP?2P$_1;>xMT0f*{*EFt4m;!}Ml3kyg{?E5P0?|4s1vb@Tl{}L(4QyyOa z+?cU1Et`}&02{AyvV}mRsyz^`Jqjfha{;N7y|tbA07ONGWjM z?*2m-!_d=D?lpFo`~LQ*Z_VyX6V3+B>v?hWs@=&k+viizGh7yQw#WHndz9yCQ`c%9 zt4H}JHaUxHH+`Vz908}h}HtKjUJ$I>h zDw@fIm>Bdt#Dm6Hs4t9=4YqaExsh+)e;`bY5#4)$07&Uv z#y0Vqb9@V=G!JGw2pU0&Y1$u1(B6h8NDv2-`oFWGr-VB|^ZMiI0lnCEORa1Iq+CCu zlW6$6{M~9eis$q}11Cn_b@_CF{RJ+oZW`NX_|#0YbJx z)`?d^>MdTYjI;GLY`@`-`H=cl7BjYvQ*+l3h19oS6X30{t$A4Po3w9|7l7UFJi;lW zIrVJa-)@n0*d374eYM?4<*J8TPk_{K;(@dkx(BC!pYpTT2qt4Jq%{9;mvYRT_{=H& zKHHz=F$R$QUVxDH&F3VT2uXR(jDinb-Xl4g55V`rFS^%1_{AH+ysq!j_l>TLG#J#yGd}2^Uxk>)wv__ z+{l7>;J4s<^N?^}<_`D1N@!k@yi4*xgCxg%s#6e3Q~pmPr8(?Sjr!4&L|OjrgL`QX ztM9|)Fgc(@gnv6v&V*!{3|t_pxoPU-4Ecu0pX4=CUsuw358_-WjXebkSv$^z1jj*% zPm_=X-y}$C?idn${J4oe2Lttdo>-tBke-7@1Oy4!57~LQ%uOJn{ZrVb?-5AcH-teI zu=_{>#!=tp0Wxx(4SQ&4#q-X@MBxa-9_21T!u_7@72GKGU9^t_``#nn-4QR+`%8Hu zeVoTU;rIr9eqoL7ArN=-_P(r7C;vbkB`|FIR!VS*d@md@IKcFC9ILo;l1;zw=vsEg zB8cmA&!jnySDf{GJt31ePxHrd_4S$bGA@o2Z&3XgCjF~tIr&X}L+KF{y+l86ak)lc zYBDsZMZSCOFZ3^xAP&UjLVcO(ukR`1S;;rl^l#HWSWNd?Ci61MRYJ`9vokkHkCpZx zQuH%fC#e@ark-_^<@Rzh#$s)lWd;mUk9tgMvBnIzmxJEf?XD~Q&spL3AoEk@PvWCqO>zz{?~k^7n%tT{=Dvd#`SnZb;ie0df5 z$K^a?2D1iv^=yb9FXsU>gpa9|e~56bB;#c>3`m+8DY!g%P0Urn~=-XU_V%yGyMq5HN-p?rW$c8@%eAnf)vIit8x zHxa_h6E->5DSuyeV~3j@$A^k$sn0ow$Hm*oH?BStlRG$%fWPhJ=aOEh$u$hcjwhCPvINfP zb5HT)&7CIiN%fnD^>a`A2N?`O_$OK5nf!rLNQAI@=uQ4ftPk2B!qd5c_NU38Vdz9K zAHwo&44V9Rw2u{Li`|IFP5x?m076K6k0yVw%Wo;i#}phPg+K@?-_jJ^C4wfpU%9@+ zw}fjyg7RJ5UKq5}6x2&Eg8UuA?KXwQ`tuHDeM}(QUrpfzUhsYa-6(r0;xUN_9=dfd zYYKnYet)-{7Z--sUjJO5iO{7zL{l_Ue5=swCoj5BxTnx1>%bdK(J$i7f-db3o1%8I zot<(rbSb~Uc#3si&`Izlx_=qZNepsthfck}7|*Gr7)T8rnoBVr*Yj$pQaIh@jAtev z(+-9<mFn#`ldd-^}&l1Tc(EVBfEylx|p0u~1 zUatECjdz52@u1H6UcHx!zm)nE!q+w4{~q=B(7$V-PS26X`-RR=YB?5ZYK?c@I_|MT zEn5nP(O>tF7WnO7pho?e##bI-z&+IHbKdyQWQ^14P(8}OAgG-3yzN9=?t|1V72R zr`-56SyOf>d`;;rN(vf(u?!yJ1Lc+){|VpTx3~K$c*y;E{L}aczs=57|EuxORiE#- z{Mwzf*!b7;1!$MGj;|Fcmz=O&qB#H)xK`%Qc7?AL9Oxd5(AGA$>{m#ZH zQznao2W_+VvQ03HMF(Nqtmh@_D+vG9wm4p7aK!gsdKB9h9*1pOO8g_aAJ|s)_?h5& z+5DZetuEgmoFe@i+sd)T#qB0|>%2p!zj&E#6TIUz@+k;U!nV16S@0tX#@IH&o{clX z1-vN!+_vky!vt4KZosxneDp9AT&6$2_9qVK!8Yv=WG-&q{Lln7$8S58k8Xkq?a6oY zkE7*J6Wk>}OWVO|vj@9O`5*zo*iP0M+^~)M3$$gs^;Fx*x`bIvP5I%D7v=WL<)=&T z$aV@==5|v)LBMggQ?vu;oAN6d_kW7*lH=sXrhM8BY!0^FTrVH?p((#rcsn+fVxZX> zrhJDC`fd0T!k>)$*Oc!Of1KT*+Q{i9y_NkdK3ocAaQOPs8%KEPCu(iFx0M<<%TRyVI_cxXU?M{x56K zuCXheKcM{kg(TpbVVAl2Yx&!J;cc@^$kK2|$3Ego34jXZ$MotV3|7f=2Ua^@aB!jS zX61csnaKdB2e9l{-4FEopv#_C zUe7khF1`2_mR+Iq!|fcidjCZ%8&OSf`cBy4^0TG8MC=RIf=Qo7{t4lNLygo*hhXVj z>c^|myaAT-b@upnsHLqV^#ri=#Ko6QJM93dmE-ztSUO1kMs>=~z<}lepicXi82CbX zX;3d%jAJlxzbu@fUakjz44f%FHE58U^yL`vsDHM>&8z%P+OuzT-w*#!+M93Go&@?I z7mpP*@p}02pV5CIgVK(Hru9>(_;U>U)%y<3`hLTbE{aY6&mrKY?Umi#FP9cURX z9(pW!M)U72U%p4+#w;vx_t{qE0AR^M5|D#d?bFh};$KcsLYwjpuy}#yz1!{)kQNrd zATMla(_A+ePttisyVMBsuy`0314cl*n{WE!3~t;49d5tpTd1DM4tY$Mq3;Fd<#)ZJEaP) z8wX+a&taipB@TdyT*t>?;cbL(c;jEX9|?yN3&%Lmq;hkxuuy%Ok@*7L#DWkX`|cp$ zAs0>-VF7=9$mbmuElL^|yrui8=ncY6#)A9heF4#VTqr#l3*0^5`5dv};E@#g-bDF0 zu4A2!`FjTuaA*bP=UkrwPhUFin?4ZLdm`pv_So-qf`jNohjLJj_)D6HiYgBh^XBP! zCdy;{SLYFLN&D^52gHMldBgb|*A3BG0?xqP(By2Iq|skXz7um9d->vjA^NNg5Ha@= zGsRK=d&#NZ*3lQJv>R?-FkbW`9&mC-EYP-t+?>oH6@y&8;IdY=4VLR9l|IApo<;$ml!roHed9HQQ1n#c1CZygT4 zP=FlNcTk?!pu6?`k`OFM00(}_8sTw}(40IDOq25>BqZK`I}W%@eang7euNAPZh-{B z%4xBSSvtpn1jkn1{tz?wYM(ff{106m52e0@_E(aQpO%>;yirK{#gm2o=V>1yIZ7U+ z*#98$xHRLURoAMis=zg@iM5PwF_qnNI9RoYh^ zMufmpOut9K0uaBC2c6eq`cd~XF^KZFk^{lCCgJW8pNiw29!%S;{X&> zq(|077uudb}j#=&0b`B(iFNyfmu{XFz&-pD5Q@M8W|=+S(NO^lTs z4D{$c&nDdSDW!8O+rvMG<>Y(NoU+}`xNqX?C3nl*-0tR@$GE2rQ zayQQF%XO1g5gU?qeG&clr7vr{7H}|R5u`q$nAqfm?O?3d0Z&5@LACeX%;LS`OcM3Y#LQJfcRm0?rq@P%25YFT)91_ zPVCgfA%3!OWK4~ob0N-g@b7k*YQ~kV{tV*dD7y3h`5=z{AYfUJ!`8zV@GW z?gFt|%}czi`y#}YUk@MYIt;N{8Ix~%?i-k`J{*XN&Eb5Q@A@NRg85H@#hQbJXovWT zVAXp0Iv^@osM}$ka=)k#MR+w=*- zr-f>%s~w^cp>_4mkN0HQQhr9=rdo_jq{ifDb}3rhhsyPsE7 zj!-Aak;I%#|k(BBD0mhpXBtl$S30K#iYBr zkbFKwl-G+%p{wXkr9P7@h4YWedJcz(>!VCLP<$g0p^|d4uwjb&XdzN4b3E#&mZD-h zKd2u!^$`Iz?(1{M)cAeRP}Ldnt%O5`X}a%2SbKFatzCTW#J3Vo687P7;!o>|N5};% zmtdb3<&lIn50B|?{utJO2h*3yIs;+NePITv$I&mEAbdVy8#-RbjG1f{eFehG@58?P z30EJ&u1}(`jGZokuyTj6Z?EdrA;G>rfc>tO+$e;qbpG9Mx#o*Q+7E`AM@hg4LSKpB z3^PB|`(?=a%lo@LLP*cY*#9Zj%R*xNISl)=4QO>WjuW6AX5GP{<~r!{q};Rrsr@la_az9% zg|my<&OZ^P^la6OU6}p(*W5D)L7s}<^B?A3SW6l~W9);ju37lhY`W|j_roIjl6fpNV8oRAu1wDi09EiEM zEAPH%f9VCs+)o8KM}K}82^TXkcdc-MAjsH5e+%Ymt_^~0=Wcuw^N!Q=eNb}`n5Vt4 z5PYPE9{gpP_pSPCg3ceG*K!AwKOi_fn+Z0Uf9P-ms@4;~ReYS7&)2hc)VJ0ky?dDd znfedA|5P4F{s!$w?0!@B2`uPG?NGx8L-*}`z*vd}?*88Gcuxhlsb8*J`XlNo}s{zNNnA_e2MPPNweI@xdw~Bk{l8=IDT63THYw1hkEyZmLw_vpR#b4Vd?TwY*>e# zEG4X%dYxo561Gtg^L0U>1imKx&_P6SDwdTL^t2^Y8sYnE)b*+ zru%U$|A<^qV;f*5ry?G^AIl9F_$>j&cRYyYkIRD%TF=-Q%U`E4_rJT~3%2t|<5>RN zZ?xfd!jp7LUAUtO%U$2>Cyt*}FFyO9 zT;Fo#cKP|6O^ls9aWhu-sy}>-04gZ2;1QwLY|~r=dXH1z&JKwY4o0u;zh)O~b8;ioNyfiV{3E%)nMUU~@Qs!EqG@t`I^W&O>uKIM z@1Md4_n%Gkb7H7M-zUODHq8?2y#jr+Xm|3CFwJ^zK;M5{B=MtZ(R~1Y&C+*cT3kPg zFD89nre&RQKB(_m4Em;3um}&MpRxK|UM1d>==kU_)4WS-hwcylVGGVDRFrAs>+0~0 z=s!u;f73>*8*#bNe|Ga{M7T3;nuA9Fc;W4sHmPU3oA^lrqB3oaF?)X<`k$uTO6BLK zjZf((w4ncO84#N`+GSUMy8``RiLb@9vpcxp2K3Jooz!&f`|tlIc_YfL%X@?Vg)+A> zos8$qdm8<#_+Vddy7Zob{;>2bnRP^Id~xOy8~9%QpJuJzpKRc5=`k>CWDGXY1|D0* zg1A}bc=Lgqg-c;pG6r_sXErcKIF4qy=G$#xlmupF%UA4E8^|Vk z@T$eIlx-}@QR}~&19{)Tf6g!JKa*=HGhroDk2AJg|B+H$4Xa#!!(V>m&f1~rutv7w ztF6C}2)nS>{e52t*>A6#0qd?7AFK6k*hbBfH_-Yfen#svdSBnbHjw*B-Z4FU$|jaMZk=s?_j6I?K-kRKre71*ceQXCD9@nt72g@k1Kp;5eAah3;Xw0u z!}j5aY^58N^_8mMeTU#>ZnVB+s(EVt8+JNBtamN7*W7j_R5`z{_cN~j9S&9cep&Bb zVl0Ge*I(=%EydALJzoOG*6Z>dHEeU7`mC+2B6sxUB&gB+pRN2+{miv&!+QBQTlt9Q zooh9pWh>97`n8oUP{%QqwDq>KjK4hEFaLd=25)EDie}+jK)uBBj<6MTrH2mcojy?U zjPz22jEz2i%T|nekAn2iLxavUY=vKp4baGV%yoNgd1ua`Yk#^F8XZ5VT<3Do#M}C$ zDYpCt?JaB)Z1oUZeyPrvn#E>bY0LN19DTFYd7op;x`k^5&0G)h;9Ohwm-07TZasQ} z8TWuKW6JBqhoEK0pRblQUS`WKW&Hhh(CT>YW&6p#3a#$@@pK7C9ol&ORrIg*{J|G$ zp!@;{7VE9&d3_$*U4OLaBIRGS3%34Y>+vz@>Sbsb8R8II>gE9*%Gt1`zlzTnI^4Xs z^eOF&>)dbg2wH+|>3KTO>(qRyE!CbS=+pqZEvc6v2GsE}eC2nxv`T~!s1qB^p|IqIr4STk-1)eHmy@z*ZOJF< zuWq1A{G=V!moafa-<`j%f=0nLPqZaRQEmKV3yBn9i=F?b zTjy4`IA8Cx-TXiHDO1haRf0QkZh)w}P?f>4L;3_C-^t$+5-k0rHvd&w=;*(vdg#70FQZ&raoydW;qr@WB-MMymZP>h;a}? z&Oe^(`1T>!Cy+ZuK!y;SORvxUPuSec&v}!ojUc2v7@K>J@^r#Ch(Km@7b&kktXy=P z`|TA(+&BqBa&7e59JZCUy-o9c>A$i$Pf1@8gt`ca{L9NW=cJR#xp6CmdZqu%=45HV zN7(VGvfcSE+)p@2Hv0xKFhjU6;gKe+v)PWX5>6IFnax^6W3}lUAf!5>&En;m=ItRF zr`}|xu6}X@&539{bme+GP2#+TRXjEcYFMLYV7oj_k4nE+RYB zAAdpQPR&F0zeDwvi1uLG%(=?Pi}HAH`UaaR+vDjF)!el0=lV~hObfc>4cqTfT@Rzm zdAEJ%DjzVazJA+xwDdedRPS##W4Q!SA*wl4n{gS(z_TDqZ8%Gw>9Xl{l3RtS)b|~4 z(#vXU(SW(ED?QO7hD0w%Sz2ZqvLzqCQod+D8EN z#7~h6qfME@2S4K5TpCrPaqj199cMn?1`Z z?o#(3BvNEfXm&3WqZuSBlpDKijjnfzA=A^|zHyG}bv&zt`WH+urzoKp68rin^u30} z+0p}H;ztMv84@RQk?GeaHiM51l@QnahDoq0b~pL=MF#eoz51L&bkTn=OgZF3n|#O+ zCgVW#bMe{Q)?n^NM_>~j4wQFfhN+F*J|E+V4Rc!<8HoZEzQ zp&_PyRwnY7=vWYA8R6~KCL(deV(QP3xswU2j}~HQ3y0c-^0gl&ruTW%bAj}lQ~pH? z0!>hRX(2{x5#3Bow{rg=MvyX!^ih6-i&Z`#{Xz0`rh_R2V^4rMj~yGoGp=V7;+k79 zEo@_f28io?)-<`k=Q!Icd#X%>^Wn!g$brGs@tBI{vvIaTzHjK>#6@fe((@wu98)c0 zhzB5{{by#Y9QXRs$Kv}o>!qHv6cU;zGfPDNx)>6p63ia$iUv(;lR4+ABxAt7%-62vvITr@j^K?X1?GOyXs!ucr3jq4bSxhNzqS*MF(} ziD+03$i&@bj9no_1xJ4(G&_HOES1s{9FTZ!qIc2U@q4=991bxuFOtO!dep}VvEh0S3@PV~KChf0 zw{JmA^HC6yIK=?^c`zXI7vf}TA8ag>g;LUCw#py?qOLDH=6XM(Ze5SN_a~}+Vo11r zU6gI`%cIb%b9#ufZGdt=yA~-=JIc!)`C4}CTmzyMmL@(Z>{<5Hv^yQO29s`*`!ea>(tC?ZJzNw@{ph;CWAZ*de&-cT#Kz>P#T2%I z1Xn?XF_k$lVT$(fkq*NP)5)01*R%_FLFB3T&5_R)Vd_6)sL_M=*V`GekcMf3ub_P4 zWx`>>w7H_oL&Wv3_F=mR@%sX&il2P;doo&b#lMOjIics!rG6HeJAR9ChT||eYbO5)DK}^MpwyTZUbFARen$L;5WZSCQJ8s{%nc#z`jIm~lfegs8Ou*rss4H5%Yv}_eX#%29E?7k z^o)<2C^3os6S}^JjPkDs+@?Jvp?8&!Jzxvtm+1U;I~z}4BmIGm=HEd`>bA$=K-W(d zD%AdttPJfh=yCm|S+`KD_tCSVXTJ7LX01?vR?i26SaHMb;j+#_kLqNY?ezVgD@cVH z+KxHN!u^Jxla$w#bCmjhdUQXeK5F4nK+g~X7-5dYkIp9E6w5!kn6pHAVm(KyK9QTu z#_yM)$N5Ebk5#@(kLs7CKX5RP@{_j+j}vo0m*RTpd5E!x4`S}dKNtu^U$6LnF)x#A zSjR)pO~T>AyyImffgaW8sgK&QA`dV*5&_{DbHsl;@Rv7#5@nR~Ld(pEr{92lW?r zM`eA*0>&~>-$A$7A1}j#?`1AT+&JMKU_rHIK*F{@M0732Q{FWVizW;wC*rZt zrRzNwy>S;exk8ubnz6_-j+*-Hloxy_QonK{#g0V&6+2~;sts>YtlSF7Pkn<2b#1u2}=reU2jwl0G7Z84p@QXKV!+Q zB8)==-;$0$0!!Z0=d;1}8I=4h+$N|OyUAf#LNq5*VxivUKT0blcL8gkSh|3VfWLwo=kG6VeujVYP_6ko^f(@1wch{H zbCm9zRT6_ON6!_K`++L$*(N=KRPyrgVJFw7eBOqh&!o2#b|^m@J^zx+0{(#QniEA& z3$+kmc_M6c{P?nL@ma%G~nmHoK*0T2wn_79Yn^^w*2V`Zgf*^Tw``Yix?vUD-vX~=dA8(AVFghO zUszg7`2?<;IRKV9o>uw&dd^uSwVz|K{Mlm}-~kKRjXZfMmVYK3B``lHZtGn11@$+u zLE|O(UGFEjk9YnH<2V0Xj1_+2#KH{MZ(iZ}lV55d9#-)2ZNHB|R`aBxSi$&O^5ac9 zLHeVx;z8a9`gKJ*g>D8?BpIJ^C^@{3Oh z2za{E)BnrAitY5yr!_N?V(g;~vQ-xWjA>!+5PL(9xsk%k%j2}M)^QnfQ$Jm&}-y>%?{U(KGgT$8PjpCVe5MUhj$MyIJ~1Oaq@9uYL`E4~pJr8r*v7dy!f# zPF`gi)qjJ&w}h)@8U^2d82Vn<{(&Z%o-cm!bo5OVpM_~s{yqABV9;70)6BT*hl1$) zJ%^mw2U72z=wRskMd$s^`@Y}0y`1PaEsiJUS00~fae9aUMColdEwL%&lD)}JjrfK02z zS##0<2OrFvO&e1+kE=odf8x(DZ5RH@-x&HkKa@U;Hm5fQlEgS=+QpVS5d)dR*D)Pp zE6c<{AqO#THXUNC9EpJn#&-Hmr}i;m!1bxGc7Dx3MDJCrR8O{nDlvMR70S7_fh9Lm zqu!%tS$l#`fUn!YPb}}2m?clkb8iEhTZbh?b$j@|AFaPt^~`1ZbzA?s7x}~jE6$NZ zZ|nb4dQxH4nCp{kE<2C2G)M)*$EMU?(tYKNJzQ_9Sqg64bhx(weq#OGT z>mSb#aviMW>&q(e*j|OQhc&Ht}hq;CJg!(!R3I+%i{j zGxbsEe0huG`}K#-=*Fvjr&-rG4m;Fu zVSOZ~@ceJ*o+BtQe~AfJVOV zzWX!vaWe?`IcU^=660GT36fh%Q*P=E3}>?Iatyw zv>%|AC`iO7wPpMC1;W^SDu3{)8`V}MP9tnmR0KftG$yKkP7PC z&Z3ijf9Ozs-+E@tAO$)YQ@Y}P>v^1Gk&~cP@2%G3@`Rm&El#$cLM~oC3%b;QKzhQr zbOAU9y7-thbsFgj96#S5y4Z%(uf>+$Bi{&gX?~3K1n0+K*Iddk*28V@gYSoWS>Wre zCtVg!XwdtbEnOw+3N)y{#FoC#0#G|N_7h(S@ujqXwNY$V{cPzW@}5C=vh?2B63-~! zVWInQuEV<17S}H4ogTWiZ;Se{wXb6zFR560h0sm36g zWUgY1A~bFBgdlhhjn_U{W{XzKK?{PS^z zLUR44yhVldD?wOwXVSHUf??+q`kW~?^vC? zgmXAx_^-`NQZQxsFrsQ6vWWBrowqtpz0G|^=gZ;A;)ArgZ1cR5{D+L|48CS_51mHM zJ|iLQ^uwHl^iD$fC-FhqoWIy+*fyl|?tFl?@>xPK(t8LaR(o+u+m(R)?s_SP&^SO4Q z8et$JHE{)Y;5E-NQ3WEO$+_MR2x{IgvV{Y&@7e*kioOm}^&Q*(Tlj$40a1QEMohK+ zFVtSt=v^`>vzZ&@;!g8k(SdEI>l=>>e*P5dU!YjrcfUZCV}ZBswEga75N{sMp~PQm z`|;R&;S`9nYw)ll+gH!k#O+Z1yRS!bI1p0~HSv#ht`w7PaH7rNU*o@jLQK!cHhr;h zooF5`MG7{Z@r^Hph+n^rg)5sL(0;%ukB3*iX4CoFwzHP{bfwpv`Y6P=1Ch{hIvEz) zbl(jWSh$$xO|oy=bnP90h+vBDvV9uai1;K#7?(1m!SoklEy8;!(kH|R1&K)#5I4K2B#o}-kkDRivrA;2Nsw5?$CoVAt36SWaD1qQ z9_%5m{zS7^>?<_?JX|=?HicSDXs3f%7RkRi|3GbgqJu+B@9{QexcnXUJP$}@~9Pv1m8AeFz6 zzP@++ld%1piLgDaV=lxb_MU3OUFY$W1~JXwo3QraL99s(HzvfX@$r;*2#GP-^iT?z z`zK@CXKsR*xV(w-9!>XD0Z7q&T{w`YTXPQ(QC_iB7pm@a`sqxDl+ka$%Lwrw zN;t6!^ZE9366J|B{|!sOmV-U<$}|VMn(;YzKM66nuC3E^8^p-PIO?Nz*zEeaW17c< z?Ya+>o+SQ9sM6;EVh>1HNAe_nvjRo`{(G>&d6g zg&K_z<85Whvk<(hkq@l&@2Nh~am_Pdgoy5& zr0?9%4c?T4kcAy$Z#dn}^$o?Ikn=Ib528Qy=qlog>D()!JwFh;SbS~JJ5UN?8y@_E$uJL$=qVp%y!Tujik}3J; z5Y@gLOfGYJiRzh{{65PN2avuYIS5QSmXUoXnM{%UL;9;pO~5F`mj_-$IOrP zJ`w&?`kAo5pFzZTP@W^13cZiR{%|!l*3-%<3q8rp(gm2c zRp*_dvxHlN*$3-75b}$E53`wiH}Dkb*{gll*+Iz>LXY$3=D790M}20bKWP6+kDKr1 zOp~4k=;5*X1cNy%RDbVreDT~QDQ<)wy)R;}%P00|4utdv2`)hBP!3#7#oW*2>xR%- zL`}bDKgvJIz5^lkdrr)1iuRdwGYJSn}nSUg5~1)Us&{ILd$AJ_M{LvT4a zVez+`&+kyKAQrFEymJnUHjDgr9+phid{EPCJTTsaC9{=x*2K%${J*e7 z@C+wFBafGe?^Bw=@t}jCL1IbQVd;^|k8W^%x1|%5Pg&2H{0rK!^kwN)hkE6NV(D)Z zXo0#dGAF^(I{repL7nn`(UbKH7Y0BryQWh+(Q~xsQTFknJmY2H3^nXVIrcL2JS!Yt zs1cc=FM58^Twb;I@}g%g*QgXjHMwAkBZr=taMz$}j-1=Dtege@6;MUua(?plSO%gy z!%mmCC=(lr2X@GEe>3$du(9KL5ILlAJ(elg2e#>RjAhD+g{^M=DeKn$mMxCwRbIj} z8To%D-g73FA5T=r(LUHDn3Pkn{9>+kJPg)5KYRJP$~Rlfw%8lzVEJj_R( zG5PD!#D|mCsN*>gs&+o73wm zX9@_z{H5nitlY#Kof~>UWMNM#eib|m22!k^qwh$FY}++n$AP- zD_le{!>nN!e#yn?t(M%AS?73&z6{AVm<`k}@lsNBwp>Le@jhI@lwVE~$ zeG{dZ#MCJl3w`&?JkZoh-1q?WJv)yB9Hx$1Z@r6q(DyO})Y447Y}bDDy-OI$LBE=M zsfP(rKf^~ffIibSXm1VmIg2sdH0ZsIcuHR~3EebGP3TbSZ)W`8xu%h~pFuU~oA*(A zcHM)fiSfS^Yti?0H3eLPrfEevPfm!>!~;iGw13EZd*I6$7^lKbiU_H2)NMkpG{DO;?s&oG|dJ7_rQMqojw_4jRpM zxTR*P*qg@LK|_THVisSee&Rv-d@MQ=md@QnPO5{5@APolmJ2-aUxoDM+JJI(V5M?$ zZQuyr_+ErnGL}lU0guk7)^IJ%vu)H*p?TA_r%FK+=@-25j)rw&H>G}wwVH2T|27Ns zA6x%CE_7K58+cswz~44z0t6lOsmv4XZ?3`ktPCO4(SVef3Y6t7w^*hw)IRF9huH^ zGIz3`6Ex4$CD+f}ttUg~SkSHcZ(F*WjXf_x1E+zLbFF99k=)!14QvzLwZeMdljj&3 zwKvXsuAw@n?F*n${TkLYj0a6WL8JO9ZE0BM=FmhbUV0L2smqge-!DDaw&ZKox4P9= zX-n>K{u;5TWm6yaHkzDHgP`V|ZAr57f`aOUu*J)jj}yFF&ZV~aT}diJ@FneUDb`#7 z1jUAQmn}X|`(A>2eze7-MW2Tr=a(+dP=8;K`YUab&iSB6^>HqA9j$ zLIx}M(6dN5pOl{vt}cY$5g)WIyjpw$G@qA%x-FP4b8*riq<4(^s)f5xJYp$+v-vUk zxj@+Ux#xc?!7m6;dGaw@5^VlB(J3H2Q_i(EKbM2})2V-1a_=@z@XZH8_&>5;KfTQ6 zP5Y0ZTnLNJ<64_%bv+4BlDR1LFOZFS+G`LN%u;~#4X)1}0O6~&uRMR0@DU;G`pxsp z^GU#?e^2|ys83pS5D2SoYx8~-;{$}BmI4Nw_o$pxiRUZCEBkEiJ zpFR*9hk(m z_Qya}`KETj3!3MSQaj6EvwyY&^0jv~+92m4+y6u1^g@hlCSyBo|G{)Do=x*#r(b2V zePwJf@q;A5Z8J5;2QlTfQ~&k*&HDuhLyUjDOFC`8i=RFDLbwTHkBJ}8_N`I9B=(Br z|7~C82ocX-=B&1FU+HtA`P}LHrUaG_)D%^q;>mO#CM8|4!ebAV9}YvFUS^FAyCq92}cIWyn<@mGy(D(<{@j z_?r!##1D~sGU**GyjGFFR_-;n&rX>`L9|4K0Ndwv@m)Z)RQ$5G&!`#XL`a9I>vu_$ zn9yX(mq<>-o;6I)7wT&$l-9NcFErU4Ki8EKfvD)+~w-@3ogv)7y>WhUqo!-bvV!EGD zy)W+itGgbTTn^=7h<^UicGIanwGdZ6uxV$k#=RdyMD>1{r}t>+)x4)^VA{mdOQH7& z<^0xZE}T9u`+%uo{3i7+_G&+%sn(ni^lE>Z+2QwpppUN=VGSg~2ptspkG6@f`<#$C-uu{N=6(xLNA! zkA}#vI=5<7-yKBQHg(`v(5^ZwM0EZPoh)C^p+05hT|pPuBfqee_*Kd^T&KP_h!5si z@Idl4R&w(e#C`k&{};BpKNr{jAK0P2rzsAqfIbh^q)g$7glIe}59+XP9L3km)@4eAEJj69`^}p{cuDlY6|IJwY0*Enf z?BcPI_(1OG5L16E^eTrCVr-kg>Lb{-uRopZ1`2n=Zq0q}>(7Bbmk4JcV(JHmy~>>> zy<;aC<=(`k5dvn1nEI+QX{q{eV#D|s{QxFktN!z7@3yYP9-}^p9Oc(VRY%5@XEa|H zU8VDj6iVq*0S`py31(U?&y6zo!mML8KN@+71*ch$Qgk2Waj9 z!csHv01j9tpzD3-NgQ~*p9)`_A^hWY1j4Pyfis2E2w~lCFe@PbK?pmZOV%6OM;$(2 za<-VAGL-_^3n4s6_7lv$MtOcArU#7u1G72SJ9iy~G;f93!Ly&b;ey*Cq<$gHIamN) z5OV#vIoGbHo5@57x%@}YG}W&{j`yCkR)99p#qpq@U&nmafru|eE|iyZbf<9&j~C!3G@01hz>&B>Pq@V-U)gi z4}J9(2SPA!@_yrKq6#79nPT2_<;jLPwm$GZ%-b#;B?ukP0IDgN@BHy0=kLwGNVo^2 zzt9xo-g_|r^==Y|Z-XB74`Kc?@yikqOLNpA}27xLU-(M{wwyyjZyW-Kb{ zFGcTa{r3eY!Q#<`9sTqr=(>v! zHVd$rXB&g%i9yC7kcu<;7R`a1)mcg}x*Fmjd#ZSdDJ$FFOV^ScFWfx1)3REk156d3XKC0>) z2`h~v24-XbaOf#s$|(a9?RMp{CoxM)VwT~=gIFGcJQ*YU@Dd$t@)(w zZapf$Qv1NR2~OxvEPqT4Jh1f?=?TVi85i9OoAq9V<%^#o@awg(iBnDKQ7rG|n0F;? zaQaMz_Q%3H_dHY#7hwa|I=)%O$v3hy8CE;qOvNc2l(`93imh@GRyhCQQrBltF@X!; zUV(qqPlgrG2-gJ`u*!Hw94lrD5E6{u@3CT=<}v1}&jTy_DbH-qeUjtD$`LXThgs^o zq5g#vIH3vOaO(cR^*85gAvT1XEAW%0rXxWMpZLk{W|Dh!L z-^Ki+erojoE&Uy4v4BG9?>A8D?ARyG@&V%0M4#qR%?A0lsIQ?}gg>+6U>T^Omr7JA z_-1xGz1x1#J4djJSOr7Hs`F@c85mQHSR(jLXH;3?G zTf?TFYoilSk)FUo^><9Y@|MxJi35UQ^zVb2kJ5zhnspCxpW0y{@N8euYLzxEk zm7%|q1%y$ik>G^He?b2TIoDEuHVaM`{TGV=)HEq~5B)dE#mF=>9_Gd8(EpJ5PfW9( z*U_(YOVi@~9{y>nzqBOyB6|S(zt?+PtM=!j|1a5>OsmdADc>L*Wz+iQanvCG7y4B< zF|D$kR$xHz3`wR%9+PwoTqnFf)2g{j3_LFLRnw|{Zy0!8`B-gSKXvj~82I=!GO&Jc z+Qnvd0S2baz23Ad2NeUq$bM-$4&ea)YZ$PqKXkf&lfVkypO?IM3MrriY@k~%46vNB z{+~Z(1DhYFWXIL8La>OJ+Q5A2(S=oV-8snyz7fzBtk!eB4ZNoOpf&7fd8oe)JfNRn z>-ZvptM%`%*F2OBoT2~z22zuV_-F$<$AFD8zVuMPw&TscEeBj1NMh{d#ju&F0}~Il z{zmOj+ak7#2dsak{9s|L_QP5K9N}BRc9wmMx~%_0863k7rUQ>Hu>PkB?^qXwojgWb z)?ob;8T*g{Rh*(aIbr=5QheJkfGX$j_8-fGs5wwA*qDLV?~|kzREv$H)cP~7$)bih zsF7>N1ncYII^vMf%4II!B^bK=exJ)VZ-OF9Xi`LKnH+N#e6* zb=!Fdhpr1HM{UbyXnvsUc>!?QvisP$PrOX+&#`5rr3f0jg5tljWtpm{bQ6VW!nfC3 zk8*IK`${nwSkDLA@6hf1)Sl}ZZ+$j2UM{&$TXqA3ybggz#z@pJv1RglS3(oZAi2+5 zPgHslph@|Y)??Hk(WE`d#Fsjj$tcjQzFF&W{G?{}?O9KW@{NNs#=gLo>=7Xif^L3S z@-J`1XF^c@G`3{2zCS_NuUj&hYpJh=psshexI^>PLBVE@vBfjxUP_-AUBDJ!BffCx zu4CZ5u|=ADf}r~MY|)zn-h<#s@x|F9j>ptcUmau02R?0!2JtWMR?;_kISkms4xQHp zXAhNr@WMYwldXQ~8h%LN}wvVe`fROroZDEQOV?gM+;Hbqr4zdNms6G_ht$hsz z*DYlNI)uq(N~2+0kf-y~@J8WV*!;yh?~CLX&_wcRoBy=_`N%%~0<{k!a-Ph;Y+hXM zIS`Q=W6~eCY9CDa!r?@?yWQs3t3DW3E{QEjznu&Te?Z9PmGYN}kB9OOvQOCjpBW1> z9K!rqz59aAe@XMIVW~4X-sWG#AezG=Ja-24Q-AWfx%4Dao?>_!MfXWR*mmSy6&KmO)oHbTgMtmma zy+o?zfNgUp-AM*#4@8xJYIBd)zKW<J-pm&_HZe?W|pHfMnpze7|xt2XC3DK>=Y zgTm>tIp^p+C+hN7IeF643ej20f6M++xMdJsBIiJxJ(6mW`VfCcwxuMS^|$hAquNJI zeG!_Mcm1#b>$8q=n{@IkcHlV8@5h|pGoX$)s^=hf$($>wInoZ8D7~Bz<6}(ddD}n4 zMKhm~KERCw$J+jnl`;vA=FOtB+y0q4PmTTk@L_AyKew50YkzjkJx`gA3liHQ;11i* zamZs%AL@6p^gzQiT>lNCQYtz-|_dmW=AE{X%MZ9%3?5rex z!ufZl9^`i0$Mvd4l}lpN{?)l0rw)O*)3Z`e6iyMuMHV{7CNGhI9Pxj| z$6)s63-1&XYjdd)VS!0#PXYaT5gN>1$N7(Qti1XIv-fk^N9gO9o+z_tErWRyAU5=? zUo*QkM-TBq63j8X{r7JFzN4DHpUXIKVs>#_g7}1SgY)F$#Yzxd{VysPk|fLhmRB~wsm-tWa9XSS-333^pmFq<5|zxUD;sF5JYtkZKg^qwre zon|%HE8g@I^y>3rmWu3n5A^mUJMGt9X1>c4CH{~crJ12zEl9}NtNyVq~tD@ zUqxIyoj1q-7M?0ZzY*gT#5J!DvDftc>G*6Af5_!gxGm$xWsneD_)v&{#D(Zy=#}el zDa2i#VwcOE#GjUaLfGy4pW`8KSFc zS%33y?5n(Fh`RZ5zkVzX4T0!2PjVm#`|aDG^!$XGX~JKiyodHxWZv@=1Nb1adm<$? z`(P&jI^TMN`qagDg#9niWkDJudY;Gr%f_(*nDQJlu)zURCpek%n{>=O@;Myv%T@;X zK;%}o<6VgZhe>}YL@wk7VkZv#RCz`bro9f_gjogZ_l>xDO_u5g#HSJtH)i$fc_6Gg zPt4Z27WHrNLU{#dtB;fP3o%S#PL})}A$*+V8Zd|GheUXSFvpg!couVR6C*8zf^^Hf zzXWqW6M>NOyHY5LIh*C+3!&Y@Rm9wV=jj7wVZ_|CWH10>$Ir-pVk8%iK{$UhT?7)C zJ6C+!5I*P3PpN_qbDMNN8Fsv%ymGQfmac&C=~OqlXBy^Rz=G%q`dE2kc~9~|q=foD zWR8t_zX&*kc%NJl@GIuId3vZu`5*a}dfo}mlM4^#kCCqfLawho{}nNUL+E;v3G@HL zeC2dP$ob0)a+Qx6Qa&6OoX*1adg!TR``5Wx@UVd8phtB!ESU8OKPc2^rr&QteT+%; z#E+H03GT~l_Z%cYCoCM-%myV0x_<3K*B2IKjM}z;v2dflkHIg+zkx+r0=j~r_E}=l ziDT$sKs+g@M-|t@pzg7+*S$QP7f@Wx}+575`5x$SZr1Q@A^ybnONK{95>=YaY5BO$}^~6tm{JQ zQ^S%A#Q+Ok98+uPB)viBxt-2mT{26!kkBdd(p)UrN$HHzsn8+yIzvfc;G(^^po6aw z%X+c&Xyv!HJN`=P)zZ5H?X2$f{SixFWK8|T(8ez4n=-Lm%+OO-_a9jzpxMorJ)@P+-6S&3_2{{c2dmA{M5o8Ew|t4758lZpB^Da* znnXoJyU?@jmPWb(L4%A}FGNp7dNrVdV;+BRrM!ab(e+L*EkgmYLY?+HVVUczsbkfR z_<3b7NNxaXwHJ>1n}yQ_wc0;~WlV!4K0%Fa{KsI~F4cc)$aQnU{5P@O#|MB~sD44_ z%vgR3gWtD6mClc_e4-d0sLxb{T}LR$Mr3aCY7T*rew~teC8N9x@q=sHt#Wvq* ztFZDM%^NP$`!rUbC!izvXIE_@A*tzO)teTGyqS-cH_>)!y1?-DwwC&yU*az`9e$^j z5$kW2KMB|eW-CtxD>oALY;ZQrRR1zo?wX&}@Z*0lox(ljFhOrXj1Ta!`gqWLy6|^k ziqn(4t}pp5Ij%i~-sjJuuPn>_sX1))PLlW0EOhtmi zpP+Y*_T(*9J~4WgS7DYb|C;my`9+!)e4YFLAM|-8cw<(nUk`nU$-T?0QQI2&j%0&O zvDxVKBwxOOy3JOeE{vjlLb~)Uo9%B40El=@dQRObvfvo>9ijZ4ssp7+41GLapS;>s zIlhx`yySmPHK(vjrxI`JEi%}iWNNs!c32(tIgmV&yU5fkzZ`wPvoJ8*)CtxhAAQT@ zAZ_Yg9?Z8&{HvypZ}&GmguacMgRXm6`u5P*D!PfOcX>mf_GFrRw?6obWzJ&ir7jN9 ze}L$ara}Fx=s%ptNEez$m!I*UC4Ons$n?deq3Hiqf-9y;@KR@^e*uHn7Mfk`{kpOvO$%e+Dv7VOM+_*Y#pUY)>B@0!;o6*j z-(jFk1V7X2`nUs!G1l`=)5GZ_!YOlYV3_8jw>Js@(FXE4rgtmsWLvf86YEb%?-o>P{?GcWZvtS`*oc4Ke(ES)=;DS8}(ht91Loe%V7Pd z={&gB&1?Jze@F>)Kh$YYob~66kOFm#!)@74c?;1IpkDno*0+;E{+B?#>)-JG4J1rf!%S$_bF=m8a|12fZ*RRnGVU-LT4XGLpY=W{8wa$q9dq6$>pfZC z7ie86>$df}ym*`7i-y_CO_Y|xU!jeLJ{iH|ZRKZjE`WAQJJXTeR^F=Xce{*7sh@iU z)suerF?4X6^nhktnIt*~bZGy(tysc<*TK-K`7c}XI@@=Oq0`L=E5_0ob<7Ir6nruD zUFbRlUGDc?-ob;{QP6dD1q&6nd@dJ$4uh_DA_vh)z?MI*{Tp4%O||8&zq{MGSeY;Zge?ibtQOAZ+J``w2?Q18*U zxV-+C{l*iIX{Ppd6ghrKP_|W%Epl^>Ah}R!i?cpY-mfB^Ju(OJR?fu1w@!ZE=X z6)E4Shi%TUEU|^Fl>ZSLM)8=pT5RFd((44Fza)2U3rC2N0m4pSDrnYuK{zPqLtF5x z6n#PD6!HDpf@irt?O@^^v!VP*TX4Ma0wKaM&&q9T`EY;$K&%l0Lg zL6llwNg=YilhscaHNw}lxySr@!+{T<3Q_m_%-OB^lBnkAZO(kzr-)BO+w2iji0>r6 z1c)hL+2)+7{dzIwH`<(R=|O_nY2pvH*&L@^u^D2nuQ^*Vf%}vHQ~76EKPX=|_VjuN zUf8UIr3VvYA3HsQuiuq4kN!jF`vVWwzRZ|lYOk^M5D9l9#_{s%Ep~w8<;Sx(Q-HtD z_ILVSob90FBDVh}>W_&ZBnA+h*(D$}i03yEX?(lQe3x(}pLIb@bM7|t+$C2Msu*H( zg->ZSQ}lcq`%>7L9l?cf;-ErSzGG;iyrhlUSZn06q0kG+(>iQNNExc;mN6%Xj zJ6(BDeIDLT&YmkF=GMnPEZ28`3o+G=Y}zNv8;jkn`bpZsTw8M=#O{&YuTA|`&K<;u zkpZYp<=5W(B7Of{RC%{eSw@t&M@B=8YtY|&-=JZf*=K`B@lH=u1*Lz4vu7ywu11rSO+* zQoV2viN7QFV4HOFAN&J_IAbo(f6nZ!5fC)Qf0KSUvnR$Fna8MaTYREsPl<4qAg(+E zvzt_0_VdO$&cE?_vum98;>MMSYI^T^iUgmtA--I6Qj>U5iiIg}KnG9sNmW9LxNxHpI4a(r_M@}A)))03BRL#kBL^A+N8a0LJ}LOfJ7&`;LoTtJ^x)y zN!>Rf(ItK)6AbG8HKBf46LdVAL`?#!mvTO#SM1S`nhvH}4>%Kg zua>;LY29@k4`QKLdxlN3>o@5AmgVnE)2Li==#}N`ot5LY7V!7X$@CeND$SKd)Jzr|37i7 z<8~@{mFD)+9|mnMKbDYqmKQp-7ZDPg&x0=KFHSffQnzyK>GL`#3$i`(W#V%wf1Wsy zx<4f*%YzFc*MF0cF>^ZQDs{b1T+7=|F+?(?hXoRsk8h_)66x}q$4#8agWr+VE3eN} z;uI+uB<`5%?@~W} z{31g^rWhtSDyJ&$r|IyCq(_KtHU;8zN+ogwrqGaws!AZ%to-ZLi8^nNIX`e}JL4$s zC4J*$4t`+TO~Oln*f$ij>-#>YH4EPuV#-O!J`@5b(gCf{!jZ;4dXJ&J78|_6m@c&- zr2kK$)hPETOqVf&A7amnuLCn~(f-)jBOk9Niz#N*k-R&Y`~$ZUULtiS_8qVO+}K#@ z*TTNdV!S8bq52>DU4Iq}OZ(0v*sq!K3jHC<$D&Wen0bZrf1-cN1s*dOU%chO!PoA~ zTVj8r@eptxqPJJ|5Rx7H&mi2u5lbP;cHhXGI3OU#8i?w9iv!*ft}sLg4CNCi4jicd z?MV9;B61#&1E0`&ZDdt~Uhpy;7?D8=^^Z$#9J6j&NWlx@TfN5yr@@%DL(i8Hv7cRq z*-QmaJ`N&W^L1heX8$R3G>B*q9OmSmQFq=a7eFLWdRH;W>EB`Hq+!lIu1}*uxR02_ z*df|a!kcA4fH}(5qP(qe#W9!dVaD6EK7)B);UYlT@ze7zV=Ut15LQ1D=Fy>_4p0!5vH3%o z_qXz>!rG^VdA-V02)p@AzRUB6ou4)TMmfhrm~Bc0D>2`3+ro}lmA{Gb315EzAL=)_5ZxP#&X>6@ z1O+(tJQh7CoLUGjCROZ?N3rM+^-GGy!w!yRJuU(#~l=k=DbU3hrXZf&Oh%d(dVmOY(e*-2P9Vj zZJHBAkNUHrRrCJnc~Q;<(86!~m@m*XLl!V-QCwO-}oE~5InfSi2e1Fklp^jtR-3H6g5bhJyx_n&uZOUh>arv3@SLd;S2{qb# zh2^t9Cu7Q|P_6SEEZ?SipK9$Z#EMk)w^X@4_=@6FWn?cX{tL~oAH8|HHi*fRya!_?pPht#egjNS`0 zA2i413BC7APzYwxW%SV7pF;1)+6Vrv>x=ekQ8j$Zn2ypF=xuA{=6ZOUTZbcru8-U|^3nL# zz-qHpu)^n}?`+8vndO2(zY2X?OqW$@$*~#(P=f5ES zlI$m@itU`YZ6)3kUo1{FRk|*q?>p&*GS%P9c^Z8SRS&75p~*!%9wWXIgZm3jt=^B( z*TF>}KH@!z(Fc7Y;WC;!!6xLPKa*da)uv8j^hxL+V(6eY$JDXS{IECCe~#QYO}+Y; z(SM@^*p2IFMgQZ%S2qoOEjsIY^z)ei&M!=(#BNEySRf#2PTszc+Td|BsAhx(;4&>&n`)5$S|i)LeBoxbmDhe{684tlmQ zKsRex$H%MCPj=94grEMS3D#3D)lhi*^#bd8adu`xS8vCC6J5)24?50IFaJ&>3L-mKkk+y;TB!>hw zgR7`${!|;tRQ_QN<3Uca*6+T)+I>8y4Vq7{C72WCgslG$@x4Kv*fuMz|1;%J)M=j8 z`kxaa5bB9GK)GD&zfE#jP+uc|&ico&(7b?nJ2J<#{$n)P-r)S}{z`ctppkJ7Wizcm zRe~*0xcYqSRJvx)0CgzI$_Ugl{gOVFn4 zvGpnk6WSP0OuT>ZY&w2l6M=R&uk}8r{=#`MKm4q4O1)euE)wVDWrRw|#co5wrDKf{Wh;$eku%_m{Sd_CWGJHKni48l|pFSJ|xv{-SZ?9Cyh zeP^sl(|uOxZ27)ox%P&ksa3o{SfQUI(9AK;_V=;kWvT@~(gn?K|4?y>=IdJ|Cg8`4 z-F4pEa<2dZu)IU|kFKBfoif8PCy`jJa#ax88d zbpI}U5-dGR{S4hP$-!W$=tfV05Vy&%@4}K5dOr-Q2L(%>e+{3@o4oKhh&_cg+*b_ zM}^vYt4SS+MJ|WfLvoOtPkarFzS8@3&yV5-!y-=ejQIz8q)tBui!PNpC-lnLaXJ6WF9FWd!vBqOAQ7Z&9x4{MNDR2b3oU_Ymp?zt5U-F~xwx&(T$ z@MrDQ_D_}kEf(HK7LfcR=$}NE`mAHI(EWY-kCeg{7VsZ;=K|=LkC_{>;5iTUhfulX&?O@WK4|h}KxS1o~HhP9p4Gn17e@ zgZdehnEEQ_Yi@%42Xa5b{8L%0ax;Xb26Q;)J0C{)!nY~VeIDkgsZT5{aVx;QMVjXb zYn~PJj?;X8SgzO9pHNN_`9Jv^KNfS_q$drLV4L93 z9wM>^xDC_RE~WybrLSK+8JKplK7XPzUc4Gpn`CYeQRiDqy@>%kheA~IxtJ1BZcUWq zKg+u?aGLzxJb->?&__+aZ@!kNP`+Hw z?U*)G_oFe!G4A*lQ)R7m55(O2Ays>!z|$oHn_!Cb)koClV*7~}L_|}F943MS+vjrZ z5#^NGUiEI#ypjdi`(g4G+AohCt$n(rF2h12nhy&X8#5t{y;$x5_=(IxZx5dkFB_wzxUFr#wB|B**15z`IpI zEVe<$swv<-tmpI{Zl3N*{Q3l2C-}Q^@RT!Xw{czn`4_-DmkS?@?0WT0rmt>-v{=0xsDzNp61-`GUc{|CmO3u?KjGG1}|TV0rqWzYL{*O2;w|; z55EWZD|Z&+v#36@@jLjE!pY3{k6$1>FIejG`Ejo4&>Z&|g6Jge7sgz_ zBX$Ol5B8^ij&eZbck1~v_RkR7K%WZUTl&0xsK7kM|t$H>sJ2w zI38k-=bLmu%U6_epnj3OFHO=%4^d<3Qi$zw-0X)=ooABwr_|&f2SLp7oO;VsB(_XkV+1^(LU7qCWgGFzPf0-&Z{$I9Cs}} zACzaG@s9G$BfV0%Gnq$ezC5CR8Ix7B=1aS2GChw3U~IBpQQlzWd(Ar!9nK5GW{Bwb z-3)d6(#V6-8#Y6!^**ofM(Qi_fN_EucCmOMAaa2G&kXxWdn#e6@l=`Y4DHW^8Q=2h z=O)|rVZuKMKiOo5Bp3-{8ABXthF?8}pIi{WmoG%y&2a5~LfGZ=M@&(kSlIcIM>t

89wohB+Hc&w2a!n4$S-vs+}|emP1-;38@>ek|B%42$r0@2?a;5BS(9^L z^&>>6BL9Y*t4+>g#whF#{nyLD+2piH4hZ_s5I~~IrKJ)j0?E(AfMFl)AB49J{Z|Wj z)a1JJe*YB7Ih)+Mm7KhUei>WbVRAoUEXoPw50hM>$=&Sw5B=ipGb5 zw9v;upVa%VHF^4Tf&Ln5lUEj+yr`b<`}YtIk;#V;6>9!RdqeS_ntZp9>#I}#MEgB(l3Vm{{yVDd9-INRt&^KoW8?Q});K5FWz6s(5HwCgLr+;5?^hKs% z6&<&do`v3K;YgXnRF_9`{?o$4-lBnhC-iDh$`szD&+A_037Eq9!cl-;!D`l+!fwsO z_2_fX6z$Cb!A$B~H1P}26kUG&X8PoY9;tVqZi-&fenZbx>3N!>zooziJqO7P*A!<; z4hedgGJFB~8q6y!ZiCQ20{kJLw9dCfJeFJizA64(c@-heshMJz9|;{V^Ab~1T+9JK z2$e~|#gypx1-j*UG0T+b0vx*CJiFv=@peJ?Bf@DjC4Vutq7u5N%%DN@W>Yete28w2 z&vid=gA)btre)l-(w|L+Id-_5a>7Wp6SV=w@iwKA$OD zz6T#Lp^e9k@2oRrdTxa_H-9f5qWhy(osXFEJ){Q$Ejqt4%4h0%s#(5` z`i%<*iKL)%8i=Jd35Se0;uJ&OW#kX@)y}VLao$avS_~`fIHYq*4DBW zpPQ-@qAQ&+8#YHIUtp?0K>e_ZvBJX^nW|~}{oKI10@^26J)ykS_0C^iwMg?T>jaB> zx2dX?o>^y7*uYOu`!H7pQ)i2R3(sVlz)N z)n99V=uh{4tKLHTqkaE?KaQ5?oT(n5wE3u1_*HWv#+S|?6DPqk^{5zMiuA}pS}NJU z8DFN}C%({J5$y}~*YC?U>^#~R=)UMB{)3|be>HDseB1c(ez;x7+K>I(h8F594a8smRNJeRh?^%4BfioeJ<@UiNW zwZ{KG$DFUU4HBynO+s1FN1>c%rQ5ut0ZL8E>FE_#cWFBJM*utHBstF!0xdz+Dwv!2; zncyM95wY#cc{M@xiP?6JYu2wZ!J1wUy4a3~WZqzc%Ke7_nDRU(fx*?<=Uu1gR}3!V z|L_U0-uY33ugl^JHYl$OgZFPRx4uvSo0QjwL8eyU@fB=#^Sa<^>Py<9zAy|Ps{XL8 zdXKKg^t@F+MtSamE0teYFJqr$Ffds}#IQqob>zEH-u@2f%MO%W!+^pE1Tz`oEdvBIm+KTHA% z(8BSu<#W;J<_#_U)ZObR^sN;D2DCaKhi|dWF`#v@fAKow>&}HXj(NQLJ^JP-U$l+s zgST%--<7&AYF7?8`c9O+7_^h6XzsIH(YK$7+o6NfeWV;kU%uwoI-K93+I>Bp$`2s_ z_I+FsflgV+-HO$-CASM*&UamXg8GHK)I);RIg*oyF8%zVeg%W*FNd!0MTmt}Z_2(7 zx-?gYRacT`y5c|RW(>>xR`OTqe5+f%g;?qC&E0yQ#L6YChfjlUeZXMl{koqEsh1He zUEV$178MVZ}1d9k%NG6)T8-Mf^JY`Q5}1Zmc+Y11C74 zjpO>{Bd93Q{$d+zUoQHM`Wk$2{2SWUON-@#w>c9+C#w&>^e;IuL+CEq+hOVR`n(K% zx`W<`tFZJu{r#a$vUkK%9|r*b2R&H}ebj8jlASWRh91qKV9CeIOuVNpAa&X1=1f%FKlXsP-@ z`eb}rjzuqsw+s6Cu~qdB`6&49noRdC;dElrOX_d#uV+xlQY^Yj_Z4B+-zgd^AOQ%g z2OW!&sJ8h`9fThdAu1OBBXb}KJ3f5jQzGJpFxOr;kY8JKhU9aUVhk3%%n$M|>if%{ z8VfXcPTXmk`(S~~V}y^}%3@8-|5xUa5Z1md=D+n4FEAne=wmdoJqGh#zA^lv%o{NO z4(;oQU4A?N!IfN4BA>Eweu?*_eBHsmLVl9|JR(8KF=5_ZYQ^6{egx%^W8RJW{ffB# zao!&4cnun9*vUwCxI?o778;m^yQ0;2ByFr44@7Y&0bYjuBGh}myzzA>tM zZOlGM=TgxI-9Hc8B;I7=*UPyKhf!F1(l;5DKNoL04!chKY*AT*j>lnRweKHg-1OPc z;!wUGyt9n>D3TY!p_&sQt~fuy$Kp`O%ZPIP`H)A+mo0e-;+rt`U=(Jl=NY1opOoeN z0?{`GAV>QO*;_zV?-!WaLl)Aj9)jo`8BAd2*ZTgAa;+roUd+5+dC}3Ey7B+>{%Id+UNyRyH7mm~P4_Yo{Y5;QnEJi)siJEH zRD`MH7^w3gM7PLX3sV>`cz7J55_>xdQ|2q5H>O@uOy4dZPlzqzFMKhkds38znDzrO zeU9?yVk@_EVja^{^nM*%D}!E4Q|=k%|K;3zBL5!r6H0Z!o=WC5M3K#`bVvJF| z2x5AF$CTTZKNh18cYZx5_Y05_Vth^McpH-!OCX#w&}8Y`djONq=Ee6^i2crmprM$w zjat0Noei-y`~h$pCQa3OeQX2aAn*Ui?$XyKeLai=th58#bEJNPJQr<3#&SnfeqI0q z)?3A*@&(jS5Mis0E8iAkG1448`l5}orue;gA+G#E8=WujTZk*a(MEVWI`Jupt6$ZI z9j`wwv9BE4zes&G@pcLF+dk2nOoKR4BrX{^!S-&Jy)k&A&DzuUgoV=!9v}bu6E@T< z18(rN|8KjUFWMVPuihJzY?u3bJ>}opPVKRSH&pLA?GoRa1zv{aNNwvS+Q;+Kxn`el zo6nYoDgE<@FFk7Pcec^_1H9wjpvL|wcBgW7!HY<*&em}}g!oKeqj=T-M0Pjo9y?-Pa-ebVKQU)}D%1H;Wf?7k<0aiGF zM0^p&7du~vzm>}j@mF>3_^-=b$DfuwAZ*Zk0mL5>&>w8(wfHNR_CwmMs})S^K@h)9 zd%|_fZH2h@!(oT$&rXK;)m(cW2Ms(O*td^3MSs(V?_kykEr@E!kr@bzSYhRkYN@T-0^i_x-thx0tAGgo> z7UGAg*CJvZ&&&17qK(RXjXMrmy!8Gz3FSchAr=Ds2cB|D>HDF*sf3@l@ly_g__;*m z*zFYpl!!RjJ9-$`FdDM@Qd&B?pm}2AQjYK>q<>kc$ zH&kTOMp7L7`A?{y;e6B&%L^2uzsWtzq$lfrF{+$4lRiuH%~9n6oAfqWAkn^qFyfcJ zZH6#z<3i%Y>FdP|k^0ez5WP@x9wuWBA43l${+D%E>4 z_w?NlQTicK5ZMeZWzq7b5Y_&k8Ty#|*P^@0BH0XezP{*)OJ>tczzn-l_s@|&$?2M5 zwOlOt6(XBN$ZE1rYv801L`0L3YO?vd@^1_xH@?Of5tHrmxDnn4&wRuTS1vn54q^ak z*bM(kz|0USmfVIJaj5!U!%-PHn-Q9mrt_Q5cSg!_ehm3K1UP0!&J(^ggef$AE#+r( zvUI){zEj=+Cg*qt6TS&y%_GwOLGqgrRxXptSt^Sh@;yn;&EzDwNZthfnpZHnhsXyJ z^mDBLpYCU(Ek9fZx)12-e}#A^)uFDS-r`-asmtYp#La&uA01e*)YBT;Q8I;m&#xo z`t{ss@*fgzBlN2`hJ4dh$4mN<{2qLqt}^-YWn}uzgnq|IDwwSMfW8ePlr;r%?5?6d zhxnRIp>h_XkL{Fqon;DV5ElK<2cU1Z_$*D~*>Y}zKJ8bT!c*kA34OBm*wYl=s{PGg z$7?VAL4GdKD`Uk)$QGuaE(&DcWCo2fb1kyvh{a&__kkBcK-;OL+_NmgF8m zJudMCnj*)8?P=r#$5c~X_3!S4vVb1JwcKHf&({8I&*Kt!G{ySoK#!~+W}0HrmfsFN z`^X2QDM_2mg&hca;wd#HM{p7LA_(dE$CN0y0YakroJsu#%}a$GFTF&@dwW3W2(G(j znNn_9=6(sGbbWu99--g=ZtZKE(yIlu0NtVo$~C2qzu2vL3{(0GgAw|mJL$_~Glo5G zN+TOt2nt)^nkhd}dY{lP^{YzSFQ}irjl$CvbBay*RdTL{Hr8vr@;vn$v|rnL7BVTx zlz$>3cWBYxwJHCX7cnP6i(p^xHWjIi3AzrNWsGty?HhDo-NdzmXTLTT)8xPgO(!ro zbGE5?#c>TC52s?K-Y*&iTR7TO#MJNHkR$glQ|b0GJKcV;@&uU^!VbpIok{$o>)#4c zg9&!1x5`vLug{fwehkmb^RY(BmOHY#6&_6v-g83h{z zw_!~6{(Nn?0oJ?EhwAfL;CCUcbMw{ex$=X9f4QE%c^>T-)Hkt~V*#tbH`VSu^^fLf zsehpP<-fV^^(*m#f@DKHax1J>KOyZ0F6BuEta83--1_Q_lu`#WwB2-;Hms{CgmHjg#r$znjM;J`l`eg8un~(%-c=D0h?k0g`XF zuYD?B8R`cxaPbBEiSq~ez7hV0{YtsC#>Kr=M&kly>{Ta#-A&5WV=Rc5>t%7l8#xE{;>a2+rGSW672)D zf3S|92KhzC4|{Pl&#u>brtzP|n(3h3==y#B$&wGYn>GJx{FBt1wuL_yG9D)Xf;`{t zwn1LfG(ONzv$gk2VaoXLmc<(Rv2}mwe@y0DwoYPlCB{GR8Y+MUZ5;pybdRz5c89!8ZZiIFBsgn#Xr9FQt@I1+PPUXy++qB`$b8D~RN$fU|H-lL zb8LguJ_6*AmOQC#aD6&|;|Q8m&asV*>s|hf2_(NtioyH zO%?vS3EmdAij>w3DNKF+bzn~K>w?fOMw>c^PqpW<_}usczGTAr%F#6TKQV=$s_1j z&N8$z{caZdzxP#ML7Vc<(4Wi2w-2FB`?cuP_X)HQ?k_g*gJ2xAtG^z7OMd>3P+HJ2 z$d7tUd+{B7yZ7%x-vjbSfljWwtO=p->RB9^hEDYiqHprie87P&!3!RQzA-X5fG&Mr zqpyIkS7V_|xvW^-rTw@r_1$6hBIW*eYwriE-F>P1SP@2H^?2c)K=z_Y5K{g!R*gF3;8me3A@sQN!7JM| zHy2tadnv4RJeH7pjIr`oIfp|FubO*)_cC+{mNXs9U0%F{)5%GI&{4{U@jSisK^<_#PQr|+a@)5D*B<(|VtG^OUKT*Czuku5%4#v&Vui#zB!! z`Ad0SQ-4A^5n+-g-+uBPSfG0!h$M^m8w)0oE*958WRKS44}5VE7VN7$--ye17Yr4z zHvM^AfU3a!)@SIZNj?GB2g(;Pj&nh{4f8%Fs$(V4{aATZd6c@O4Ge_e;Fw)9=8e~!Y*>!XuIn$1ERC<;$jO9BbYZO z6(Rbza0+nPZf+j3P4;p)><|Xi-AiAO<2{Yi{d-J%)i_jh77#l{2HiOHJ>dXAjOz%G zFUFx$WR4H9BV}%mLwOo_05Ln%V~1H^QauDHuj}?pS?4|S^HQKZGPSVZd~bKmjIp@< zWr!(91~Z?OKL=vP{07Rw%yQvr5+6k7q?qv*>4o3@h`wI+O=tMY9=7}G5F2|0Cw6ei z8#J9eJqcn*OP&jdI6hnKq?Po)Rha&Y%vm9JzU;j*y;S>Rv8&0dyeI7!UY5Bz@mRQ~ zIReuvG`AfStk#K`%IjhB8N{BY+f(&c;vEq#__#Fm(@k zBSQRc{un(HQ^@Yk^Om@b`LDs08s#y?9~2=lCNt*c*FUKrpnjO-LEex)M=@#8x2%3u zOgfNjX8Y5;Q|J4;l*37V0|_A5fj6Yc3h~*(CAJBji_m{xUf0$WJT=XWIi@z}V;jFz z&tLKTSm?3E#zb#4PKG>Xl!`;fu;3Hh2Whf&l%gl zU_VasfpTFtPhXGYy?E1v2W&$x3uhXh2NB$0^ZN+ z8C$I!0r2$x4QrjB)RT4L6j=YV&eJ_N58wQ|yl}wdWAQnZJCge9J;b9D065g~Q|p*X zv`-R_F6%D;z{qtGDn?hA--B|krCk~-56@FYfjGx@7Ezv?;9QJd~@!8=qv z@g1xSn@#(g1G%t$GIVKg6})|w+t;mgA@KNP@%?QO5}e~?+GmNN40@E)3vtoWWkBx* zQcQuk=Ea~-=OnamQ?5tq9ib-+jr?}%$r$jX$A4^Ej zz@!fHvg+lHU{X65G0+=g`noo0x5>gAVzcDAX3{f;aZmzcjJGP9Ytje#Z2EdJ>2dXE z#F*v^4Q9xLvR8)a_Y5R%Ga1}MNhUwZ<3G`0i13oRHUTtDg;%O1uQoJJbM9=Z?czS0zs zJo=Jr?;xL=&MOPLsWy7gcItn~=dCF`TJz8S`%BQv6yC%7nkwj5KD8D zKz@h%zvu;a3iLR>dCB1ZLdF7FDdM;of#|5V3SABo?>?3m} zQ<5M&>-d%AyAZCiDLp_6Wf0PHgei6B>CoJR?!Iya^&95t&nqNrAipX7Yd1C|L3gA0 zH%(cRfQ+E~=`(JNy|~?!368!Px|wQnMA(#Fsr{pF_1BrQSLGf8U5@`!=K3LB@|YTH z%C)yoy*UAVnDWDA&H!CpuQ=~jQ+_?sXr=_9lW&=qJ#NZhT}R-9R_K)DQIaWNuKSq| z+9p2yd#Nd}*XL~egUeXdXUgNl=t+Dmw5easROIU(yN&;|ex&_^_WN69%zlTd;Mm~& z7okOSNT%W;^_8~}G_vNmgH6S^w9bsqgJzDQ58Y`hT0W$U-%HR;;b}7Rn96G5%s~?$ ze^%C+$|+}2^K33Oas21$XH4Z>-CH-h*F)tZnKMJf0{K3h%I(imaIXw@N{r$RQ~s+$zOD`1@22xE*SIud2WPuaykud*1k#Xn$`d<7TrTHolGO(_7)b zKfWG4fBqu4keSAx!M|}NEOoCpe<6eD^Wd97K2WLlBRY1us`$ zpYcDhzJTAfS8DvCM;~whU>w;yZN~o^gGOfA)r@Uv_?+hbGMBRda4hi3KKlJ~&$9n% zuEh9X(0u=T*6OSspx-Y&Cc9B;)zlYwONuIX6WI>vOEmru$QFCXV!OrdH~kBwPi?n3 z|AqfM@r2s#&OhS+bvg%<>~`lH_pg+Go~@HQ+!)#ytl~+wt)sRs-7x9ba?Y^zvt{mV z{2Pf{u+N=#2jkOTh#P;H$DJeX4tYDDZv4%BU>t9EI^LSUOL!VPu#Zg^?Xa42`(4Wu5A+y;LRqub__RjU<=psm+Zir zE2a1XTcswuJJw95Ddp+U!Zya)gx<%R{ber&wc4-8niAm-Ky70Q7r8K)klrS2clX^O zV?Gx?40TzOgTdf$6K>q=ya`YzZ~MD3sD5*(*ZvR&pHbd#{X*HhVsIAY-A2L=-LGQs z0_}V5(EbnxkCEOg>=eB1T^Mxpnw{#0!Qe0faY6&vGcQ|-fzEA2-l~KKUc-N}0R!rV zg+@284J@Y9^MvuxB(;=lFz}l4d75OcxH|?MkG+{7pofjF#=tZY4MVex(GSGHBsus% z3%8v2x*r3hC1?mOFUsc(`7Pud0j)$6B4Q)@!xA8a)|YSmaP(aI^(Os#+hoj4zHFBl zZ+r3aQ|K#4|2q`lx$iw_*VilhAC!F^wDa|8tB3w;^z*JmG^T0jKUsN&9S=pgSb+Zh zMxzfIsQU!*kfbn(KB;{c zLD#3sH}O3vK>+Ado+$dRVWHp}=w>SVc{kI(LV6<5&0Eo9J7`~_z4&e!dlpf@LcFlh zy;2IJSlzDt!jNDI$71zY`u7hVDFY0wzLm%E!y$CbECz~T_0bGgKLPhtzwdkA^t6x*!b&K97vHCLYN49b-@|O>>+VzQA_5F`k?JO{z z1#QZS#;PxMUfw47^5d~;rsmb!wu;vqtBzox{a?_oK0oqd2zUY71vh>VR%*@_I;f>e z6BVp{Sp7~N&L2|g_%0oS(K!<H)U^( zrTX~_eG3E>jU~_XF*Tp~w9{$eoQ);t(6p*@FUlc`9}`Q?cl~gFEUkVTOBTxD8N$PP zz}Z;_@nC#uzVp9!t*E`*zs*X-Z_>GZZ5E z!bQX4KF8meG0*N;ti4T$=v*9&A1mew5=4~WfW=olwuY*y5S6(9byytKyi1hFb2+uN zuh7qr=v@rzCO^htK41IQSa_$N&!c>e`+6l7?!y3(3#cz3^As%DCIKdh770%o3tn=( z{0{LrV8NLTDh@+L9vhcnL9zaPB67`4$NYx7IGF{JPv!oA`9EIFuPlftUmNpZq904X3C-a~)-llUKOBBP-Kwu3UXXf(FXW=qdqkK-BfQhMlfH_SjR(BOLyS@{eMd3hxnzKFh(HB8Z(N z=V8qHRr`%GovUG%j1kg^*Ds$Nm^D&;F0p4tq>GtLMT`WoPqkl`$?Nbb3nAwE8yTB5 zUm4T$HfEgZ`0|@%E{j7}$y|u?wp;-IlY9`A2F;xaG3DrC`qGQXQ$lW#kAmrXZiTpD z8jixW??mhaarJaynwulWb-qac2mOA3 zuKRC#3zL76d*5I_8j@j_f_{F3sD}uSf8~!4BxXnC8Q>P_&6l zhL@A_7`#H+ms?NgGT`ZX#l~H~(JPZesf`_|c{5M**fv@~YoY%=Nb_IG+1W@r59YGK z<5 z+0Zl|b4`N;TaTvn*lx!iN*qmCsnpQ`_bEs$6A!ChOPBO(p6!9e-9&bPYm>1X!A))hWI9je_en@;tmcYvog3l#(a0nz` z)LtyQ-az6u;mX2q&i9-+Pje2d2mk#8D2DLsyRep1LMb!o`>!6A^?J_&Pp|;D!e-GL z@&KUw4hC=E2Hw}gC4kVg z2~L87_pY8JdvvY`o_=0J?;DzL@zh5Heac-1?|=LP_+XHu2%d~(4y2rc>_NesqB+{g zrvh#z9+%E_qUwbN?-bVi(H#GM?Sp#yyrMm)@Q1;hP2;8QgT#lk}H z9%J0~1(4tv!+TGHr@jK%Mbv_t*T;iL>0w#~nB>%JdEfwExp-Gi@_WMVfOza=Hn5wN zG0KaHJ6>?g!bZA@-4Aj7{+rZ8bsiJf*MUj>hStHgy|gbCPQOVzpoBIz#ncy(Ii*Sa zT?UsB>tlfJi6&j|Ef8})i6K?O$$*&iM-O>f7CjKVSMnAnqeT5mvB}cQG8r!k2b%Wj z3Ixm491g?;Czow9=Se{cqS3DM2X7c>vP$KB0MVXLD1mp1$d-f3BMccA#pEB8c?uDrKpG@{^BA9{b3f3@; zGuiI-6P+&}Dl>eT=0T#G%QnMZz9~9O24rUVfb<3-s`n)`La^E7^I_cLlE2J|9_laIY&k@hY~TdH$+=NHSLEXuLdDq2OwO0m zQzqY%^g2yWlloaBXL5}GYLi>0&*z94$6y+hd%6s6XuqL+t=z|zPaM(Df0Mg{u1z11 z4@>VeCNCqC05uaKqP{wlcMOA#eD`Hc zoox!PA9Ky##p%=skshKcc<%%Lf*~x&j$%`=jj*f7{09BaZ?nnI6gvNT|56E5nnD>r z9{~M}zNVn!NK?2;L`%@m>;4HZo5BX&r}e)iB0N)+C!AjB*S)hTQjX#vztt4osePt? z^^uvPuVs${ed|7;3HQCGs6+EDefKf$TVeB0BMXfGM`8b>^(aU$M<-phy5#6NCIZkGic^d2icP*bu% z^LBFjAN!Okaeu!ay>FV*DjAqkevK@3yFYD8&lH{u^f*62>0^@HAr77l2*}^i%1vnK z;o3{;gVb-}55#XFG@ovhlbcN0zDpuhv4ha5a{e-9mq||;y7hc%%3jnwdG|MDqd0C~ zQ?^p>b>u&ke3~gw7S1trgK!;8`N2};hHi<`?`O)dQy*#9?{cmqK9cV9x+Fexn<-zX z`JgVBhp))id3vWl&`gD%E1**_V`q`yS$zo|q6rvfDjdJ7-T5Ud7V12?U3mX|l`HQM8AJyrOprc(bLX!#>vxbT)%Q+YS?K?GX3u0o^n z$}eQj3xodK$_801L$k!vk26&j&)qb&tp%F&bJ$d!PN}^kAAv@;(vIC>s+^yq@mTeL zS1l6p3^Y7a$whNh<^Fp+8GF?Buc^-0zQ#_yx0&i=)tA0Q??0yc79MmxM1BhC5t!-^ z1xx^SdTub)TL~*$y#luXE_`F-%OV`gM{A%~`4Y4*(7aPEkJbO{Grj{gU$u4SBoeay zV0_1E-e|Mb{D&Cd=`!etO@sWSOO*ezLDm~V@*POAg1D0R-7zV6xbfYqJ;?v~TD98- z<72J)XL0zKPis@#jqg3>dy9qmfMl4k~(2#-{7nn%Ub{oCOA}0>K>Rj#r#zlYO`t}= zNOq_E-$f>Hz;J$`*aqjv4(PnvHn65KxXJ`3sVA?I>GZ|qW4MCB)Nk2FuD>pP-30EH zbFFRUxZXXH;(GStZ%j~qezsYC&n9>egR^e2EzS=S{7i!T zwngWyCa9c!+aezuNhY|RzmYfDmi1D=GQlRvwb~ZO%Kbz9rDeS6y1}+^-8APh6MRwo z6|JJzJkbQ7)t-0jT@oBJ!3FZXw5_AGKNxIN&Tp&hXVg^6f7iAW&4%7drejvud^@TN;9nB47>MzjrZr>o*OxW$G zt&MY_UShzvV$I%qzOVm&KL0^jlOw@H*x`6Q!9LBq?{NO-;6}28T|NwUvc2^BxfuMB zucha}PQgtlVelQD-!<@QIpu2%&Q;%6qxyJ=7bTw*(5N0O44$g_@h1ATZu#me3?8Wa z>n4dAr(>{01Z>dEkDvA!20XbaLbLNJ2VCx`MLnk&SWX|`aQT2OtjZ|N!{{{|>odaEhf4L3)r|J2$%khBx2Xe5x0J?sX_bK{|1snxkf*Y8Q zzL@5#yXD(84t-msj|JV+JyLVM8LRbmO1vO`jPHZh zA4_kMem;zyOhVs9>Q`vxRK-|S zEI*~}jUQ*OfNtg9VtKBBCm~eHg|9!bY_0NtLKD?TU-p7{n;!7fVH3Pz(`H+w8v(OO}g|2O?aAjQ)Q= zLCFb{(;}WRkHh^~QX$?Lh`uEUE-c}7>_hbs8*&&gHn8~j#($^%bu7fj?N3Fixx}O5 z0TJ=sdHiwpGAw>h?_)96xF&sw#k2JDE%uf0hq3rH$pJykp6-o0>r*UteW;kuTd>&8 z?_$b##G*|S=!ZeRPSNR_^Nh$}H-JSCFeqvxM3h&JMVHIH1|m{Vn}9_Xn&*rtPZ$gT zlz}!xbS{jAZq6|{pD&2WIfi%y>MJO?N4yOX8SHoD(-`#Jtq^%Zf=sl}pl$e>nGjLF zDCWJW{F8`sgfMSU$;H#Y!_ox;Fn5#mLm_gda33-E3GJUnmR$ct^ zPmf}5n&xmLnn%K%Up224(R)7T+$A|Rh^TKDbN18xe?)V_IPzb~8Iiw&2ZGiPF9yaR_Fu8TWqR=n{y&CVL&sbm#Y|+fQb`q&%@0 zx1jGl9y4{%2C?hqa~d~-DbWABx-;1X_O-$A~0P*ytH;2i54c}uCc*j@2k^JqInDh#R*LDZb z`4V<Dk?UwBG}aI0xPFY^LSzK1VD$&_c;&*!88%}03Oeemjcn~C3aJ!x=e zEui_Sa4qewQJOFHu94@c9pG{I(D%W+NxTx)qiHwuS-ctA8;JRd? zA8ex`qOwgp4Ls%B+6b=^T7ILyKkLn>+Hl*W#}UC4JbqW5`it#v|9s1w#7vq`zccQr zeNdN37vPr4qkuX_6#IA*7@Ll&_H%JE5yWzF^wtFhKi! z=yt!~bGd?Ul8DlG96SmO1PXSib1BuAGM7`|Mc;S5n&W|l;E>OzIic`!X&*yzv+Z9% zzs^y>+a-N@2y0IrJk4_t_V~bSQf^H2O4d{6Kq5ti4&=?DI{NVYslTFsZuBCVD?>v0 z*AU|$7wvZwBUpS+p7Mj$N1YIS>RsSzuM85b&ujV{60H4rs}{V!G?z8N<2>SBMCVDt z8oUAZ(S`MOYm$^>4<5(sj$Lk2wAW01CCM3^RP_MRenazqsS)9JfVZc34osS8=k}%j z2GJ;wKGvjXHc?TO_*IWR>)Y_$`6hiEee6!#LC+TvW||?>uG@cFG4lqhWR?V)O}^s+M$QnPuqjCA z#m$ejFJW=bd{Z#aod>go6JrYQmU|9_WgS;w3cghya9GyUGfY89c}QXYsU^%_&Om-fT@ z7mH8R6p0Rjd~uKH>$_+k2VXOwpMNZu^_!x9L_7ig0qJR*;$b@9=+pbSDW0VJkMd*s+R(efif(IrPJ$kgbBigvT=T3Uy^ol(*X3XYA&xE1O_;Lv z+7AdFNw>Het4#Sw*KbO4* zbUR;g`A*F@wT{>4dsELLTOI$$_l5SIHplm(gyM_Fw@lBoo3zhvd}}y>5{C_XA22@c z^}#x~FY|?@w+{a*pPu#$5|o0q&QIZYJj8$a7`SDb@#pKjYYk)ie({XoM=!tJUtu-Z zgL}R){sWX>`j_@@iBBZ+by%rZe4S z4v_GVe8}3DTCARPo zG*I7w4@e_y?chBBDA`}z?Toc~x!nZD$$ZLgcl)ovS+Wnfm>LVdVsCx>s&hh z_nwvlrQM;tP!o7VeF{4nuP}PE3A`@PYuljSI1_l4YpON2k;mLapEiNF<@stGf055A z6PPap9NWZom5a8Rz%rRD+GdUge*L%!Y!v>bZBhTB3AD*M%C<;MxWEL<G>P)Ho*sE zPHkKGWis-86TF)*5;OkammPeP17WoP80<@YA{;*2Z?Fb!gbCJ3UfZ_FI`RxtGlg(p z!FOy6U#k~CW@;YVpMz0QCo#I~ux3Dcf^{4-Kl=x)ssA4rOrc(Tu~_q~_Cf23UQ7uS ztoc-V_ikT=HBa#(w;XnGeCOvmSTjR7kFayPaHp}xaZVfbd4x4bX`i`4-``l{*FILG z&Izz4oh*v8HbA3(eqpd#`}a+JOelF4gR7Kh*W`Fj!7oI(2hA=|8FakwW`bGs{4aQ` z`k-4h*GPQ})->J{uZKaajQtM4V36OKOKCsN1;~9dm{GwAFKClm#CY;s z+(m+jBGP*25s#F9s2Vk zK9u^gI<*&0KJHuZEw6kQI(aSEQ;Pwg_6fR1$-)o=si$V`^VfCIrLTANH`LG@`c3HK zapniVkk3N)ThO&dgsJHN-^PspZa8b)aQu4E0mYnqMRx6WAK`j_6f@QMc*39MMA5a$N9e2d3u}n@6h*r zlnxXpLYwnt`(`QMv|X;PH=^%c;k-aQQ)qAd8+}Jyb;6Gezk+sdCm($s`YPqY4ISz! z#Oeeu%ojihW0ZbKU^QydtJC?gtM3zl3Un$j4y)Dc1)Z*+QJqDPr(f0(&r0TUShZ69 zeO=BsQ1v7qe3NOPaA@WOS%_7q^Fh&ruCG5Ou-aIxDiCojbnOs68&-;b>I&#C5brxy zzDzpTAHRWa6f3Ko4@~)VSWzpBJLp!vG*-MV0|V%09octZV#QP* ze_jJ2$N#AqrFp%OdwrHSsb3{@ubeNj{A1~j59V30{95^oLr6WLSiUb0s?LKR=L;z7 z6ix;7jJ}Ej#YbY<=l29xK3)$!=g58*%Wf9$81&3JmNUs(E&`raej+rrZ4^!yhcDqlC2o_X4Tv>}10T(1wo(jxUp zM!Aic(t{=cX&)(im--w^UX*(lL}Pp%y8}z~`2(?!hJH`c2Q2AW!9)*;{USmtEcsoy z9ESax; zl{jzV({@pxL-u+QTQ751EdGP0y)$kjzB9!UC)Hx{nGf+`31ZIYT|B~leG&sI!=jZG zTllL5qMG-?qDM9F9j%o;AQqhn$^-Hsa2ENn8JJFe4Q~4f>oDgDE<}F@ z5%o7=&XwZ-f{1eYFlVg#0wc<0#gRL;KO1>nay&Sa>${pFjN6rP z7Y=p#>X_cwiN~b=wV38rF>ABqfe5DQ2F!X*JekDfIi7-fS76pdQuKxRQtf+Xoj^bC zX5yLGDqkp5xw16>j}p{r8TqS;DmCLB@Up~9h8eC;=moyu2{mT$`egrJn(u2LYRG@A z<=zK8J*m?xS<$CD1z1o`vPx%O#^sV+&6P%8?<|E=Y2`>~98Pbcj zyLi1_@E#Ub*+a1 z%@^1;{P?=M4F*13$^<97QgbRWAmjJxcDc@>U_d$B_S?S~aZ;B4{#r=q zXCTLs(8S;7GwNZN`eLA!*Em0XWRgVdb24z{1s68PG+|cK# z_85Afm7YKO88;-$Jrb6#KYg6a*A9^gKo_WXfCIuIN5oooLP;0H;a% zTZ-cJ{#Sl{@UgoM21^pGQZV*Nc<$_FJw)aG>dL*5O+R{ESgf%2^Zp1#6xO^IzCvO z*WC~InxQ{ye>JYXDKpHli0M#>pCGv@GmO^}ve4+4nF&?n&~Y zOYhQTcW8birhPaw{8Gm=BuVJ08+VxDDuf~b4{cwsjhGQ!U+sSmVtg%m`2jQH4=%pF zNWKo%US*n*=V>1*HksoV>1JdH>qDz)pFub#->W9)P~l!vUqkr4Cg)b2*GBd8$>eal z;iNX=NlO3G;EjA7c^ojj!Q_1;pZgHaV8P9QCQo|~5Oq9|yl%oF z)zZF@k2`mEn7sRa^nyXy<@~F8k4vuvb`h+G21_RIPXSTT&!1w{fA^dGH>79_5v29< zs839R+t)=z-!#+|JSe;g%C{)bs$jX^Zz5+)(8UzG{dw#*0Tk2d8~ z<>C(^#-wKLB7Tzc6GJjKo=LuE@r2QRR`{`|B1?Vn-Og820rWOX`{e(4I_toy>+g+U za$_5?!8&gZ4D7@@2Rjf6TNJFX*kCInc4Bv+*sZ9DV!aO~f*=9{N)I;1y6@uF@5G1S z_rLiCw%z-=?>Nu%ydG#VJ~9^H{uu-6BhWJ0_L1VxEx**Fv7mG;u24=AG&7wwmQnk(TJj(0W zF4bk~6sX&22Z^$L>zk?b@=Rr3zPDCdi^p!pvU`o+RwHB6(2rPVfk~*bc^H;e8jpRC z*qu({KIL@tyX_HN(2={)U;Y#qn!XFwGPZi*NA$xGamK)IyU(HD^Y83d8~Zr)Pt&4R zs2cfs+tJf5NB>iLZ-h#AMKchD`;u**vrDlkQ_%m5`5$*G#%Ut@*O@F0k-j{g>xhr2wupB;+tTLoyRe7sOb}%M3(vSXAGPu zF{pg_SFnd&?_yw_mDrdcxr(Pn}>em^$!QS6%Y*X4cRCw0R{{8yyhl{^uUZkP{WRU&-1GXCsp44 z{4eLbZ|uH?!Mhnl^-`nz(d!2aJ}1H7XWVbKdQZaOhZ;0@TEp}4?-=}^+ZD$Qaf_`l zll}b?1nlFM$(WD(FoK^*pz(gUN?*1kF!-$+{N37@-e4j1I-cjV472r1w^2VP7hv!X z)%V;cZpGlqEe5A)v54Dj90AS~XwcGawK);b|HTfT>b80Lkl=?}sN}ZWxs&w(!9W$b z9rCg7U_Igo<-oZL3@X-qg4?CBoLmg{esB ztF*pU45cV2%2g>QbR32(f9ZBBUiW+q?Q8d--GUo@=1B}4ta%+*&1qjguX4Y$_Q$(D zic8?X@7H^}tMU8*A%a5dJ4fT7p#WheLLuI4B0J;0FQo&S2o)mUFJhQIxklR?{Ejo0TB-fjEi zE=e!){HXj)vCB+{${T_bjHL1dO`oV_H}2=#kjjS`FQUrwB@~Wme+cX@P@RCno7A`m zyBR(|_R>rW|E8P}s8;OU^%Q>3&a2gGzwbriM{K^mN95G__Y}TX0miULwy}C*UQ{*@ zTrPo{OKqMWKG^sgHEQ=7P2r)c-#{(ze%!}Kp-$7EYlT*j@dSl7X^$t=SX=4h7eXjeayV_gb`zEol_|LBT-KYRc}_K=XgxL-kYUKCiNLLs#BRFuzs+`n!2|5nozDe$cI3%9<;YF$6p zFQ)DHZ{fC2q1AdnS+CH+I<$Fwp}-Lt@;9OFWIg9mAlK%%wRRt;z`a*$+ zO%Jd0@)Q9tFHo;>{)rSg&H6a&JziE|-$$A`+6wjN3*OP>SJqLF+S80R9z~^s@6) ztKGl3PuuS6tzzpR)k?(=$%Xv`Xv$JAE?ZKmT;(dj7y3WYZ7wKx@WM zgbw47uzukE|7ttlhw`7a{8ES4FOh%d6L%a@eG+sm;qg-c_bES3=gtuI@+Ae96Nady zHF|HO0(NQ1`xoUf4EKUiLAvHNm>0tsj@IY-=Q&ygV(!mWel``@TpOZ#9Y2TiE7VW{ z(W$J`o;Qv1uaJ#kJoDzY*Ou~nYyeI|S@crEU(s`D%fvD7$ z&8(o@W*tyLPnQP5DEAB5&M$!;#kn6%xkt!jFcf;Y9f>6b%K1$ShF7rPUIgV3`iAbI2*sOX+)dOep?))Fy%z6agLH>a$b`k+9!=LgR^j`16JvA#0V`cg8ZwdwD+f6Mxm zt*4nw#4gNv3NNpc`HG%Hq0{&xlzF2F$19=Jc;A$1K4#`c$?|a&4Nh7evuyYx6r_U1RS&ldTzD-X`pUvGoZ(~ca-t5^{)1;P@^!R{lJxub=u(Qymzh#>1vQ^`_^>%oj-m9#C!q&*hA_mKwMFTWr-@DdwWo z8Q#~%)1cH8)1SP4TM-vt+vq zLEQR*sox)ZPKG#*`QVd<=TW~V+0NNN{-yEM`p#6H1LBj_$3}g#b?(mo@A>jhP@m^j z=!dvs1x}_u)*A@XsLuUdmzO_{_0@Zd>-3(-SO)Ne|Cft+{N&hBF}9FSI_E_zun0y7r@4PAvTq5_0_IzKV9!6(CU|!pl>x-EW(D96V7#WUf(;ms9_OWV$BgUA^^aLDKj` zu2x=l_ZB2=-stw|@-YaK2iduNx99Iqnm^xF*|`LgmrBg$1h-4nG488LTHf1Lc=M{H z&1Ky-1X9ukYB2>WAr%Htx1C5q@;m@o3y`V|sE@iBLl=26DEHtm3y{vrkc8Dtue=@Y} z)*u_i&94S+Lyg}Q_qh9QYOl?LSj4y=?Y!Fvh&Wblec-bCwY|&z6WqSbeiDe74*}vf z|AKBW-y5B9iVVV`i>X&^y@Hs=lG$hfrxtqi*Iv(yF26TJY>xnoPlH%2OUU}n6SLmb z#QENO8^8auNeAzNq|FH--u*ZKq)q4>twr$==dkARYtBZWH}8&1TqWmw>@`(hxMGM) zx_bXn*n5AbO{H9vflpqAsK=Y=XT2z#kCW^5E!+pe z_^fX~hlE@kK6w@U-C+HM@h+QJ_1hxF5D0Op&7Qj)`=7$N&@^!%`COW}!PJSCbBQTt=L}5UX1ZDIQ9bYBfU9i29g}0skc~K? zhU0oSHgi5s=MI>52iFv({mlBi@`W+|4&`=0)b5j*UaND9z5N}SafuX3z5>x@>MO&H z4RTR^2%?q`#erUbb=34r9B4j1h|XjT_K#IK=y(~s-T_hL!s4I>#?y+T7*(d>;6t>4 z5Tf4vWw4F|F5-NM?$ek#(O$ovd4lK4#!Obv*F4Ss1uw6VxmNkj&@)y0&oHaE_J6X! zfz_9^eK6|;D@N?`c-~o@7U6p-^rUJ~0keKlz5;YJotS+w+$XI)jnFN1O0RK#A@~84 zAU}eh-s(reA>&L>=xz|ZbO47ur@hqBEw+mCH*m;$n^$&QFBlHZWm`8r#Q7WzYT?lF zdU1sAnOcN{Lm%R{lv@`SbyNu(BSdVwTR=D=WfHClax0BUGM7vjr9k?U`&Os z#}$l+IZk`epliwrCvt=yb7Gt-9o-+gPSKn(<{oSOzpgyx?qKc={_8it2%UOO8-uxv zpOYXbpC85cbTj7l)}SPG{uC830Oq0YYtSiU@Vh_8Jj=O5=Vi(@z`Ru+PfFtOkv*87 zBL`#FC#>HQ^X0Ls{1GBD4&nau{5KUu1re!BId~oBZx*ccJrEhEejF^wQ2;GOa;?9& z;2b+2cKj!T@O&(I>Q!zk{ti0c)VUNE{2^nB)1c$}H}Y=Wv>FS0>pTfM%wLIx$Mdx6 zq5yQ9EDtPUq1K<=2OY!ozKVtOj6cxs^IB2MY<0|yB^0*!lHMqpQDZc(!N`6!J>a{KW>{6_5JeO6<9pj`s7=k-UG1MI5yBa z)7FpTyBj3Y2CW`{zxW&T8@1+YAqf^+4hdSe>cJdK{Mxg}c?xc&z3LP!xk!DS%zKgo znLn`PrN_kI3(a1iY{^;yiHw70k56BkW&eJY*UwvejxN~HXgNmK6SNoz8jtN9KJ+@o z(#7_?H;BCY%Q`HLsPF*|T628@mJJgD>m6ti`F#HxESo?gm_mc3NN?NCJS5Yn8x9lW z!$K^3)_BDAS}$@qmVK=QOsJRG)sk_qNsw%lKh<-gHC!RGBXmdE72X5$m@(OQQb^n3aHYLEBge_O^Zw?Vb_Wukw9 z>CL-McSrwvHBv&=M^DK?8~u#|aqvKu;=89{pbxvYM=pd)k*z;pj)8pJ$9GBl#>x9& z;9$E??lc|;22Rr)I#kHmZp}*OA&H$Y02NwGR)T?P)>E~^xX~DRNQ~WEVVlr$nXeak zDNmA5uvz6X?swpJHb&gQzk*?^*o1*E)b|e?6iYmr`;OUed;Wv)k9^8`Jqax0*1U-y z!&-@fX0o2~mw;XRz#8LqV_>uHv#{Fh7Z22&!AkTGuu5whu4CSj6zB|s6~@QMUW?a#!F1cvD)2Qoh6B)B1WjlehX~aDfcIu5jO*{}zM07=v9+j(7^d z-v>kXKDi~b+Vp=PLnV5Dc1z{gn*RodMriQNE&bjv#2ySCr~z8HN^zk3U@)P+RJTrX zYDZ%5Pvt1O4YGZo(am`Q<(asDxm}5qXWW;dh99@d_{?HJGwo*+HjB@!*`iJ zvge{n4NP9Z@=-D%TMAVkpQ!v5Jy^kR9gAH_<@e|T4|YpjcyT+GUuyn@>T}g_K;@&1 zA5tyY@0?jwZk$cn|x3YOV$*wv;D9}T$IzFps?46U8`d#<~@DGPxnoQ zP^+~t*%W@sa^ZDeUuO7D)8p%`kDJ05^Hk=tNl?G9^;?IJH~&Vxl_P#Tch+-i1akaXz!Xh5Icu_W_NjGgIg@%@ISBy}lHBS_cHs^wTmf zJeowIo3+4=bKf#heThQjl&b{I6ZIU&d?@WXgJ$ysQ7D&J*CVr_`QJ_%FjKILYe_2J z;(4?fciJhq=}q3*(m1bRdQ8xAPTbd|eS;Ky`;%8W8UQV(2U75UJ!e9zP&M~^oq|^= zrvX~c4@AL}mHPy(#w(`aFy&A~t8q^$==JBcMx^j*4h3qI%MWb_8}BIarwCcoq1Nu9 z6ui*RNc@l8&wbtI&uW!j^T63u>Q|pQw0ilHk{x{9csU7e(uQ?)9+kXneu1{J z>R+Ui%QcS&ZTBkRnMwlMCj@Pt-@mv*IXKYv&p*A-I&3o)zq?Zm2GB0{tT#TR;>)XL z>w@`RQphoV(_LyyK&s9 z$S+2ur=dM+{qTi$?uHJVqfp^HQjqsKbeOM<3MbioxZ^g>BT`|hexUh0tvOvP*rvX8 z=+c^i)4ME-vekz>mP4a{dUo@D31P9dyO-URifLDb9h zlw;lq1?q!bFs$b%z04m80CIwpP%S{&&*@1H04e+K1ftCaCcE|CgbYfV{Y|j z%7vwzIk$2l+phob{Kn-aH0gJdyh)Zdtb${ZsP?s3qm%l8P%EYR~AbjtW;+BWXTX7};cBbXC@&WaPiT0?_=HNH)xQ*$&l z@LTGRpOX1W~cImVZs@%M~!j z^AgqNDgBIrd;r`RV#X<a5SQ_2$tRTVM=RWrz);@dt>%@)$dy&ZP9`Gzh{x7rp1ufJ+8S(jVf} zb)BWub>2MD%k!k3sa$D@)@hG4rHE~30nfwMy!swDdQghx0N8J@xdH0`faUoT#_6Gc z-KMW4

r+i~aVwf`q3x_1$Fip+vy=ZGEp(Arun5v^atK7>A1Ig~o^LWBWG5?S*zp z^A+$sPW`Sft~C>!SJ1I~FBf}7Il2(H+=S~n*!0AN@d;eVl~NR&2MOcRx^`~!I6XcG z5_~CRL!E0oU5xpsLSn$n>=0^l(KjEx>7>u@fw;zFXS%3tSJS`apHDfyu4j}MDMQ@y z@2*>G!`R<$eP^z-N%^o4*H~}JMSfQf*8hLqp)s+G`OoWm?%MfbVU9e+dm_lm7T4x+ z^y4~Czs9w)tCj(Y{C*U$vtX)gzMiK`SPrqM?x(I=(zEAHgP8TByY2tj{V{fc@*>@) zz5NC6=m6VoImh}^l9u~%jmE)+EoxxhD;>k%RBt0ErgT@-KhlJ^8uu0MzBPt;w?y9?zuuW^7`TuXTIZB0$ z|F`knoZ%D9>wrp|dqQ%Yt-E_n$AzTG3Bz82TCYDMdDu0a@V)`+Jf2$8>kVkodb`UZ zA#u7h=R=c@H8|hm=>W~n@;iw&3e1F-!Lx7|-6 zag+?4AH+T<*m*O-VO3T_u+L&K{4)>iBIPn*-`9Ax^`FLio%WYue~3`VY<|vSu z$vD>)Uts?Sb#4O*!Ikx`#r~VLCm!Mv39=o4DQ77L9pZCUC&83oO=pQqJ+QADQ;)Rs zR9s~6rxs%B{7JIIFb|AzxEmkG0iNGK?%k&cEFK|FTZs3!e%Umsv1?%c!JZ>bTkhpS z)E0CwreAG-x!60OG9m7KOmDIKUF;$4-@}Y4mOqbayp8!x6}+nU-w81pLw&RY2YUV7 zvD5W~gM&thG3F(R9bmlVL0{PYAm;U#4&FyVmHR<-g#y%Z@T-jBTJa!6XIuYlW*-Hs zLDc%ZFcT~f5cT>fGaonJM^xnIs}^JCGO16$3ZjQ;t_8DF^xzLsy_U|ztTS|7;(jL` zIAYe5%4LKek!P-cnfo8?_2@A_1`ZjZgM+>25gc-!fL1tfJ6C%~aLC(wP=Fq_`Iq33 zEtXI1xkU}RI5hmItVo>u(cU~9`luc-pyvV+aIeOp-BR4m{tQ-C_~3=vD8`-7pvQP+ zn0n>(L$o7_#KZ0&qMyemg>>sqq5xVWZg4sQckNsmFbU!NriwiL4D2YE_ z1>NSi#2k?&4*!z#tfnXAykPx`-KN`P&f-Hjp#34|dDVx_c?T`RgD%UdV(!=GH|Y97 z`@t}`NrDl_K$r0sF)t{>{bJ~{`x@pkW&fYg`20CaeSMf`_j>5cRbMCOt&y?B&D^iS zHjQ3CVxE`R>olGK<{zxNJLsIF0B6j9#OAl1o<5WR`*WgnL+8PaJ-mG<7WC221w^`( z3yB5C+j%t#coU2!{8Md01GkJ|^g>l{ofE zSUCBA$K4iX{*%-_Jn}mhzNMT*?$I&6OyO3|B}0eZ*Rd#Q>r2N}wx9pB42%9}`(X!{ zgYZ!Ti#|2~c86d-QvbuE2IF6}uhiTS7Vj%^;VIDW^_>@6&jPet4;2=FU>v?S)JmSk!VHMB8Bh!c}oGD?Ay(E7fS?pwIh*26kaZ}s29 zshP5QP-l5c?oTkiuFmq>=>Jq~)-#}1KAq!VME?@LKCOJ8`?R$%8vTMBUH?2V+>Dc` zf1|%c-$$tC;p-vyupW?cC?^pRsyS7}H*yT@qXBZ*&2CK*rUPdfKcdR|?l5rObA1}$ zOM^2C+^~dfqjw1%<2wwVV*vUT?&mAz}`7bN%oXhim?HPj|GEQ@xKj^Z3e4DsR zu6PfF*(|S}x&^js>}fR5^BI>oxEr>6yuDzat)Dy8Hdv0q-hzv{3AP&lg!KW&^{svY z)@kj-4F31uVZ+T#SflaAOE5TCj1|Yg-;6Pvvb@= zJ9lGflI9TIe_CsQ4Ti1`TrlOW_uQuMRmbJ8b>87N-zY)g<1uut-oxCMy?VfmQ>6LJ zZPz%{-57dKg&$YJ=_vN8b6>Oa{M=4fuh^l8p)WM&;&z!&2}7T2uF+MFlsbTuF*IGl zfUZ*FHglfC(94>4b5;7+4#ChX%C~Vj_c>IN8}U6yn!Y*Il=J zfq+$+r}VM%gk7~@u`YZDLtiR?$W>b|8bj8<>GpX2GofYLKkuqFCdPS*nZ~89)R@Ml z+)p8PmkF*?#tYZ+>)TuX+OA5k3m0JM80CGqDz8sFbV&nW;4gJmHjlv2&5oPt|8Tp7 z%6G^R3_WVTwcS#8Q~MqBqb`)fBUkP5I>Xjm1=Z7+N%04j@3cJ79^;Qv`R_WXhCQz+ zhk?pJwfV>1zJ>CqIA%5ZWvCI`>NCr!{3h+~gI_j^NiuDBNxRq4i!rWq8YB42=2<>LrDJZ6W6^q(Lw=2k&}^J%3N>23 zs`(zx`%~y|?Gb`zyN^=nTkZGYyn+nm_oL8DLpiB(D74u5okF*BeeqxaLCfvB0aEA! z0Z(m!mTx~3fNGT_c$9_ zZiQBx(^7Db2DhNr_!1O4SbdsM>&@3gS+Wh>47EBA9?kg;%SYDPeT4hHEeBq=#q^Zm z_m=0V7o6!UFHq2Y?ojVemkA^DrdXaEw-FjVeoXK}u^SJ9hIiEPPr;Gu!-2+us_St- zhJxatQO1dvyh4E!J_GS|Np zT8FAnf&8Ns&;hMtr#|un@&{}l-@3PNqn8>Up;fQH*HhVI<5jgXtc`D6RQ8a^uaX$` zi%(M7NtzpmwnOy$Qdu9i5!P;nwn@ruqf)QOvCVv=RQe!~U7y(oZ5rd4PNgU6zXNU6 znoFZn&mYvDJ(i!qF;ue9(+BV&Astc4{WiB~SNp|8&QqAa(f+CeqNzA32Fg-s7dOCt zA5rmd>f>bIsQRO*c!u$a*(Ww%kjmq+M)aNgkmeK?NtL;LYSaxCi$>O-Ksdh4H!E|S3PILiCN z@=#IZ_)^{t)@Kt-VVSmI0p;zlxf6(Ke2V)WYE+PC|GMt0l>4z78zFX<_M34(gxG_p za9^zMJCu8u2+8XqX1+VhwL(+&2WpQs<@AU#p85Igc0S-;&O5xWASH;NC-nlODd#-n zr}Y@mgL3;Dx4Xyq6Wli;$G%IT+s+5v$L;kk-XL||+*grh{c7Eor>2~C^UHV3*!jza zl=Du86mCJcVnwqlXMpt~_E?^jvM1R3-lH<`wKQ}d*DKw)8LWP@4-GBXb0&17a?)wY zsm8JBjEkY;PRhDXxn|I5^E%4192;~RuY@vxG~aLMIZUG-^BiT~tmh`^+*c1^lv)0) z1k@m6oNyZaiRF1BmuRmA4Qdg*%>;<34X+;!LW!e|gbs$Ra4!!HoMZRv4sm&ptEYi! z5?dM$9XoG4y;tWr%9t+TrPUDe@=fVc-IpPfRKFniUt8X~r?-GzKB9DKmGh@UjHg|{ z@7_e|9h!sZ{DS4{(v6eN`ho^{lYu>M+w4eZI#zFib z?NOt&OzU5Yd%Uj!fB!5yE5yZJP&ADO9OTWPrQYL&&nfjavB6#maj(xgRpgq>pNDu{ z58RZpQ-q}$B>Jjvky3s(-bbP@AM5Ym!hhfTM-plyxR%mH-WvTHB*ZOt@uQUP%^efw zo24`vCwws%68p+P{A5ZS!_&P}{XEYSVCp+G;3bJc9|AGcDJXTf=ISA4JWfhouMaxJ zZWV#-aoWotkI6W2|CcF6@V6IsLQL%SFT77F7YHcuZHPUh90%%ujl}2&L+p!*;+&>_ z7u$Z8n5cds>TNj@NDR0BhhCRi-*4h5J;0H#<{>V&*$3j)>a!r9aRS&sZ8_&8??U45 zkIOdn>5DGm^&`f;+;jYBJ;+1c`omrHZp(`&nq>RvrS&dYr^zJ*KHg`<{9bS&vnM+Vp#`?>m`1E zkBjJWW(*`IX|B?>+gu0|x;)KvZN^=Jgq(_UA9Jn70fWRbs`I*LZ!R1+e~ha$ZUDqg z|8te{7(DVg#CS1cE0(KJ`}2(uTmL90mZ!Mwo)11I$G@s~+$M(9-*D9B{O8qA%Jq^XYF?GrvL`@ncvfGXHz8KG|_joo*&&NmB;QvpWv`& zzUMY5#`zfZ9inq8w?=MX6Qk%8n`lY3TVXvG%-u1r>>?TO95A1MULDxDd9rHvdjWlY z)IaXbK5!Ex?RkMWyyq)voFn+*LtEdHUhmBk`PYi(LUNg2=-@A{Nljrr#C*B`7?&QB zpINT=UrrkrF6Tf0j`9Uzv*}cj^!l;4n{Eq9Zw|hT-G1vUKR};PFF;W3^#df^#jyAo z)L3pGk~-cV26bM)c5=NM{GmZ8rbi8gq{mHf;FQ>Z>sZfWS1&spplNUZWQO9L(9MBCr;|e^G;|>vwr*Jgl7b}2JObJW<5mjE6{PI`Bjsrn{O$C z=9fsGvVk2<+C`jI{eWB3f<*}1qk4cnWt8?Fe z9g^1X0&#EsOwQ{oDs6MCi+gFHZ`%jXT2Vb{>m}K0Xa4w zk83>TUL5eH3T)i>A_Z;VVw&38d4HJqs!Vh+&3wBMH$4*51-p4q1;n4YpUG1hm@&ru zQ}J^oPH`({=;Lt!#Km4-@fc=!Ihc5#Zh5EvzYij|Lkiz^;y|@MbALN=EV*(g4)XY8 zvG--WI}8W+w!C=k5h)5UG2cicm2MDvb>OKY0G`%NcPN{Owp~vfA&Y8F%^xj){ahUE85qL01 zZ65bR&+NmwSadGt{HyEe|Mz#~=2;%CXT0Sha?ewcEA&{uCFZ`QeWcLSPx%FyYur!h z-e$bs1Fk7O=LU13k&YH{jb~O8x<&)EDgHNH-QC~n}Y5US_FiJCx~Fr{L=Rr zmoe%IEL6PcY0&ww9ze118^#TJ{^nZ8^5k&sr4@xXJ}6xbSPGq^A6@KfsVa-2KjWJ_7!w^{Sd{? z0y1R3+WW@aFFDfu{OvL|?n_v5%ZEa8hc?TvVaXT9qiuWpN8z?&Nuz?2Ip44MSS&qU zeW1`<#kjPG-^J1^u48BQ5zs2JPX7FsKA`tjXxX8B0WAI5&g(7aOT*H3%YU>;OupeG zEE{3{0L=+Kk7L;tnoEXe!C(LVGnT#J&5uU%V}0ivShmRcKuueegN|hpPAyLS1)9X> zwEsWo&rvWJ=ln)X@Raoi<>y1=RmRWqpRTzkXxN)axZLu#4Uax_97l4|FVnv(et-t^ zL7@LRu2XvQcc}kMds@-|nHo5t-tzY7UwVg-DWIM=LoT>O|4v=+q0V^E7#JWp;C-QX zZ~wAT(|X+vHRcP!z?d;2$iN4q&vT~W-B5s>nyu1lR+iu%;_T$GnJ(U*C#qd7+@&1QeeSMm&23}&In`a=9P_zjc%J4u-HP|r$B3b%_Qkk0w(juvXM5^r z3*0)7{}kGwa~-!{Y?_x=V8}SuZiCnmS8{%1N0JS^=emEr{WrA7{Q8?@%)aIa3`K6{ z2KqDI7USb%s7^ocZmYD9hM&Mt%NQwSbUOsQ@J%Cz2g(~=<0@?3#BflsCga^s9h+T^ z;iFW?aJ%e2%YRaN_`A($55_ZoDOi6dVJa+L&N2oHNsUIKZbcxY7})< z8c$}v)FiQGj&xNjhqE4ZkM z=O6NTOnXdkrLb`TVUOAak6=AS^D|JR+x!3urwjNg6>3z*$fHpGdn_3A=e(S9#JMkn z@ueT^fm${}9DUl&6#B~anL3HB{`wPzp0)E+oytQKDKu5*%24m|vg5z z%gBNCPG~Y8AO&w%{FR90*GoVGvpb3|pIDi2A}z+trSBB$a-^HIsKf0_|#pxt&U{w0vm0#_><0QtM4)p3y-< z-Q3Mo;&Bo>tdEIGj6(q(kEyOmC0;(JgWb-o(@^n$)@RY7@sjCO{HpamMl4@P#Y`pV zMq7w@eeuOZtq&}+H&3y~{AiIG+a$0|MbGNM1R{FOJcx?UR*om@2Rg^6qI6wYAi`4$ zF4&~PKa_(BorRi9p~6SakJIVtErlm(E)P1z=5y{GD(of2O-DiJQ@Uvl>gnG;-r8skH?lj^$A(&Am&#= zh4K&MRsTSquZ>pB1LbwtdK|k+7dXoE{4lZSRi~yreGHiAV4Mlc-K{zT_hahZoO16q z{cbO>K6jY$lH*4f&1KRf<*c;+#(1gv*eK@;>sOEcxKxZ*l-*$YvY7E?Df?B^8)M#j zoxPi}eeerJ6<^8vL`g9af7IL(bld(-x%0Tjbq({CjC0TV zi?iOE|L`p6{#<)1DE9y_%2gZl!oGP;5c{C_Zf}iQo zd7I`wY2a0?^w8p&;#6D6V7iHY3zCDQjA@cEll-?yauhW>{FOT8nly002h#RMY(r?$C zKg88WyFaBLt^x0rzpJl_=f|pBQQE1tz9g>HTq+Il=E(`;UDE(B?~#}(@!In# zb&cj6_VQgQ^$D&k_+TB+*^c<+!n;pkJwSUjAy%URO&UP{B(RQwWXnMP?||8)E* z4ZKmB`DGx!LwPSWz&O^-3lf9RAWGHcWB|lfF1VXgztf;U#LrU$8l_ItxiZ969=w=R zixmU~agjN`?xd9WB%u8y#C9pif%*&nh4X$fsb|S(rT&MC?Pom1WSsWfeCnt8f&C!v zJuiKa)gC=arryIBy%zHQArCUo3ypv65)~fTU19=f?r`zjFJe%_BakqTi;F4#dnEhG zui(VrVXkL|4usi%d4}@zQ#C59|>}G$t&TUQ}YMd zOWd`i-iBJKZ@cq9^xb2*(>>;6LZ8@>xVNraY`mu@&?oK3Hyi~u9*5kQuk#tGlk3p_ zpP?_?ICu?;lRpW4gOmdRO|J{^Fav!l3Xq0ohI7c^+J`;Lelz} zp!-erYjS^u@;sr({G8~^G~aV{y%cXm&{w2=(GZhZRPn3m%S)3+JV@$UHy^j46eJ|?(3j2B7e4n#_H^uG^=o8xv^Pp4atGJ=Y1qqhLYQv- zGw5s6g&i|4I8X+o=u@oI#hCHF8WGVqSaVRA@v!;vlZutN2{V2l!;`mbIFDm}*8_)Y z02UG-s-BMnr&}I8Vdo+osE_@r5clSF125#-rwe~%o|hV6ap1-oTu{XMK;xa_pbHi< z*<&`ur3ULI?tie}Vu)X&#U(g6%XkEFkFPTLZuLzqw_`ZCrRj2j9u<4I!H%p!gOFM!xs zo_UHN77n0nlT9FU+kp4qVR{%6-H>5}5PB|?0ow}9 z^YYjcyZ>Q*TD0+s)H{%_9_=I43&42_*%g!yBo7`B-E z#kBAe^B)(`!T!+g&0q6>GhTN0v~?0(#r%l&8bS9%I(Nl_L%3#m;iu4T`zaROu#*3` ziuDKq@Ub4@z24o%W59x>>BK$OpNNGQz0Uu81G;6La=|B9=kRUr2e_?%M9f}=36iYn6L5J68UUIeZT{}i2b zoB&!yHoRd4mWd5{#y`;dh!&z@*^Lrdd;wbZx_m2^nQsJI>XmnnWn5Oqz9wifP6?L9 zEickyx;6T^xZl|w#tu4Y_SPf+s6o90Cr*Xt@j9pB{sqfVHfc@#AoNc) zzfhCc59{~xQH_@ONB?`O!$G5QztI1)>FSLx+x@BjeFfTJpp?hwoBxD5<33{GJnP%3RcuiP2Hvwih8m4ohA^V9z`)w!%Pk|2ThZs5bo{g99ZHc_-{Pz9t6uz4MV<-rNT&#dbaM1q`BqWOl+X zZ(bW5E62@gu*=J%1+UQ}DA;LzoEV&WaCP#+V_=8zP%!w)8%%Z0Ws{KoPM z+oaaxBi0AjaSgnC47S>RfcpScCxXphelApOInqsPKR=4|0t$YEjT$?eh@sI-c))TO zthb&Zp064oVC`Efm|*Av9RR{AtwCl!(0IFlFVSt5{rRKxpbtOE7_Nus&Bw|yeE{$x zDgqSe0hGH9AKN_yLuXf=b^5xm;H`lAvN5EX-y>j_aV)tHAV&tKPTOQoIsijY+$c#r z_pHqmG4!tXTf5m_KXhn;7Kyv}y#9s|DbL$|Gk&dnK-oWU^Z)tY^B0<}=Q_7wZ{NWZ zP6K70?SA815vI{4x<1H%W4@bHXV zY<^;%*Q=20mXErP4Ju19JVfe_k8pp=Gy|W(@G#Xg-Cu$q{b&w`k5*o;``gpQ!)K|n z-mM*|IR^}1C*i?kcSxfuA?c4Z2FfH^2EehR#vWo!ccX!be<-p~GZ>I>+tO8nhF+uR{Gf zu2S%m`?LPEkG-CiQl~I)C5FQC@wm=a8iy1^2Wi09RjOUDAL|iXEYJ5e9e87CtX`B{ zC8vJ4Ulc>vzan5fw@YFV3-@5?DSmpVT;?jpCi(0p&Vv}wSK|ejR?x8NT%&P#J=Cd9 z{caj|=`04v?16gg{i0!@MIB(+=3{7>UV|n;gE!9^)<^Hn(BSdF%S|YOMyc8O^B2xr zXpjRM>*YYsd5lkt|I=jmDk^_cFg25*$-t{re!Uc6tcK>}v_O~2&sO0PnrBGe_wn3s zVLX;*^JPFe4BF=Bv`KDoNrwrC9G}rPH4Yr?C=y{#XL!&*v6q;s!nMOO` zGH*(CTWAs*T)36>3f1?Z$#T}LR~X;3S!#HH{F{QUmY;1tQ91S$T&uZDXjYl?3JQL! zgA!;qei;Q{P$8K6m^Cm%!CN#}%=(Y!kSI7_uwvt&MX{%)6g*VtG|*xk019T=y|Cp6 z2?lPUK#TDZTI!^}XcPt3Xb%Xq$}#PeFDNiq=MvDW$J!$(@SF}Lq1Cve6!3g%-W-Mk z=U6{StK!54QsBT!b}sjZHq#d=Fv#AYwlj5(L;eN@TLeX857Kgsh6;GZmx_9cnY4L}k_^2OWAnI)F--T0daNdwMRR zQkB#4pktMu$EehLRH36w0-`giBr%asg2zE5B*5$^sN`qk=SI#}@Hmy+t-Wp#u{;}< z9H}`1h|JNxD=HTI(~5-*yWS}+xI!CEt zmWryCTLhiP3#B5{f7$P@xm4yoncu5(zUEP>$nzI=ZqWlQ6>ip?7@~k_yjNZa#F4RvnNEGui(7->1-JzD+9d_^n-9lRJe9o{)j=I_O#;gVKGu@4@m= zUFL70g5Dt^*+G}_kGYRpeTmQ=&<%m|?@{A1#2Nm1No@w@dHt1fwWl9Tc^P8Z>JRbD z)F(o@-`e>yex>!T=T5jZ%qS*^Ptv?B<#gzN$p4-KHJPWRK0W5$DF1?TY+r)7)Y_gp zn{vuD&j{ZAn6jCsJMN1&A=b?p)UnN!U2T0IvDrE|qnv#0HH7Hbnj@r~J;v|s@$v<^ z_IpB4Sn!C4P~Pwd9%88mdX5^wj+Zkix6$<9p0kZNlq<64DHYJ8xT!NKcdF(wIq$DM zT9jL0{Is6knnS0Ysk;9{^d4@_9y@@B{_OQDJgfi$8gi9>U*=gW(4Vp_2MSTO#rLKx zT}SnSWcKdTfG#D9)kG$JO`_u}39do<*4_Y5^m}{?ZFK4HjAI z-9I6IfIhc0c!u^oLfrfQgB5Fc3B)ZwPJ`wtM-1ZD+e?FPwYgi|_?tB77>-f@{5r(v z%Z2(Z8Yr&J{22S?Ee|&E#e9-l5S>8JC^^Ig4#ciI`xgTIQ z({?AGKjFG>^ZK@bXJ( zGc_j%3AN>pp|oK#9=nG9ty;iF12)_Koe&&+?N%D_4A0l3%Hg~5Kk&~}%VSlyqwJBvR$GHc5&i>k|e9+_k!fn>ioV0ls zrFcH?#5%^UpZYkZ==g*Cd{=8Ol~SJ4a}y+bbpA^H_pt2M-3*C@&iSeTv09MBeZq5? z;8;feerEdLpiw-J*SQb%%hg^*?hn=r8}&8a4ZJ>M>f`YrlAa#f+j{Mo52Wk1OA796 z=R!#Su7*Mvv)*?|8lS}V%oIWBIY`bCfpetm7FyqwTlx1@Zj0+u9K&^xwD;R}+WZfa zHz)_hMa(A%$^Y58x@Nqo_IGsv#b0j|0Gn%*aqQw1kYqE$piiq^>tgHg zO&agawJ3g-{pX4iyT&zp{Q9JQeq8eusdpkUjlAYt=7 zS0{J@?oUlU}syWO5XkdVjs_(oT$vHMFPvA=?cnCr^*C0&0) zVuT7#Zo9-mmOTrJ1M=mf=r&87W%lFzwQ+Da+B}!PR=|o|t2Nfl^BEzwxl7zit@F5* z|9!b8r?|ylA7sMj@ov6imbjllZQm!jSA{No`t^_y>h8s^cN==(==TW%w(7j5%TMc-;Y=ef1A9KXTy_&;)a(6_*? zJY97S^x65+Ewa7=^nEKERLp%NGUH^P&wr%)Iy|OWwmkIBmIt99e6KjEbI|vq>EKIr zymT!3p3-|8tg`bR`aGRxt=g>*Vtqs}n6OcCF{P}Jc>NHbFVlC6_7K8$%Ppf%Y9xCv zhl;bl`TCgb)vTYW-~&4?ca6Sj_izGn7VPr4=Dr&~lZhQvS#Aw|*I1u)we>jg*Oo)7 zv799O{@2K0g9D(>ctPm9g6V3fErtd*+fUAW4Sg3I_os=~Zl2eo&-~cX?D>#=w*Ntk z%B@4u2YNwdUXv7zABH~T(Q~hraY=k9ntsrs*S_mGhrn`h-}Mkl(?ARQG`=<#I#bwA zl*0PJu>vTlgU*C;g?yvzT+;13oD(G@(RZeuYkIPEu!X*}xCV62YUb+n@H@(Rku!{2 z67ziBzLQUs042oD7luAg>CSpFz}zL9i}{Y!f;C)tBeH)Prg;3VxYu`@>ghD` zeYH0MQ(w{EGVFDl&2v+8<{t6uIOaGVuRcsnovom2>~*O67+G&nUjz0kKav|y9>J8j z`b4l-f%fWQs`WWzuS~(A6k%$Q7KdUl%e&zK>-l57LG>0K&|w_uUYNu&Lu*eisFp64m5un z`py=>?bkT4Tjw6!PyY@#`4r+n>!pFjIPI;$K_@A=hW9`7D-Zg~@}ddTg>mo^+S9~* zJJs`Xu=#``Zuxo~Y+OCo^VR2snWtRB1BRgx_vT@lvK#l$gt*q2UWu8T6(rC7Jk~#* zHQ4gnaqBI|tU;6@Wr1%r=7f!Z)BTd>r!nVh?R8~; ziM<~=9~sX+E_lvS-(mKxrdP)_E^q~An+^>zIX-3ni8)t#`HyT?7biQ+J<;ZuQK#HD z%w1#mxv0cp7Cno3MOu6a(VH~4jCp710twOa%2mR=Tex0=7C}^Ek!A0&UU1%<$EWk){ZlcCf#k^@cH;3r$#(&Q{+0KhSvP}K8g!>ZidGFGv?}47tmZvFPz;frO zYdKG$y(d`I=UX<2=R(iGtJr~e0v37v!frWcS2SVKOo`py3f&7Qox+hbp4W?z_5wsa zy`%7IraK&SEkqt-_wnuLVB!1LR}nG4BNpy7-f~27ROe%nUyG1AFKhXvqDeaEhmQZ0 zn}bEOpT3)$VW2~81Z7yXSvP3t@bXc`1l3$(TL+aA6Nq~^k)!TWxJ^Ob7{4dzG0z@6p~tyi1tSPXor zerTwZ(-!x!1S~hl{h*fj2?jIt7ppZ}GxLbJB_(_t)JkjQh@lv~!1nnXtt+33!J9NV z3cK}~&HSNa#^C|3*y7B9GabJM(3%7luz*+Wt+vj8RUVnJ`mfzVa3md%t@KCY& z)7F_k0z*aScV1)jHVhr1>nyCczE%ufR3Xje@Ml1QLm0YJgC_91^^@}a*nAjE%}0fy zvy8X7gb%I!zG7(1iqD^%xEmH(&J#n|S-yj0b)2{_h8{D0^JnAS?d1o-xAwBL{$TT% zPmF(op%(<4z8K!`t3A2Q6Vh`uyk`6o3@x^K=>)rXU`Viz2Y%~bQG3zF7}9HJKlh=? zir4JG&<4$+!+N#v48ro&*6;X_^$lYA9^>`zeZ7YH6kGvoym|aEn*<_F;LTU6(BFPcvdhnxQF z-nY3L4xg=qTKAQ>e9E@r@b65onP>iZ9KM`w_fIyv1)g3we4FN)+%8GcUo(sI6Yuj+ zw4bXK%Kq5ru* zhSnbRB_9D@h37L0RcXH5?UZG9copYS%+J3=YUO)2((rq=2NEjGcSOT4Wqe)RpHQLO z;(at6OmEyN%U1f+G~9Btuq)*W295nh!+UFAIqYKU5l5A2*e;uwRSNC-)*ETq68-(4 z()zt<*oXG{tbyKj z_;2m|fO^Zna9>8IG)Y3e$N*1nrttGBv_XU7gCun269|-)9?SsE{@V!*93d1RIiY}DUUZ`Af3WSaS((dV1fj%lMG2hboUVh^^ zaX*4S(Bvm6?m8FRB?j_S3;Ex9P&m4rM^N7}`R_B{NQbD=H*O~XM14-7!~8?`$kKtw+_L#ga~)5{{p8KAO#q{#Sw zh}KSyVd7V1#RM(yo^ zPV0xFk{8wB3Z2*JT$)P8s<8k%<+}{{oJulI6NfrAargQ4Dk6>Y<^Ja zGJhi#<2)g^G2dTvyHpgD;0-{Rou8@bM_rGh>z;+&OgW5-ZZp4GmvM5a=wRy?=vpd( zieIU)o@>0ntb;D|KTzSv5(^p(-Gfz^qQWb^`lbatr^!jP=O-~h`|c>)eDn~HtL{tL51HRTZd@G7KGAr+@xRz5eeMd%PBY$Je5LxB zXy|sa_i%sj&(8?xj)tzb{hC}W3@-pK+g}8NauLxx35sfN?z6;e3{=r^(9e;)|WHi z-|N>&pL;OB6VE`Rk3I*Se_(p*rQ8Rr$AJK){jI)xNT}?59i<5#t9vsf?$*E)^PH^j zBO!6QbqzFNr}1i&V|1ON0hR-Wq?accFrG1d&5O~uuf(`#u->3W9XubD;^1kNI#i!m z^x65GQcNdBpYf-uf0GJx==;+2p8oe~KNk8Za@~2UQ>lN6)b-wpK08-XKd)ERw^+G$ z)bBC9|DkVqyt_Q}d+$H@gCIh3&QtbU>${}pco1<=q@dEIoWe%eap>7} z8Lz0uJ4Sjs=;!4CYMjYzBzp=y%CR+`@lxbP^Jd|*yNPckP(kx$DR6Wf#WqOu;e|_R zLbk+>_m+JfJ&QyScB98TlJd6zJ&PIm_nq4yc$AUoSt>jLx88EAJ+_yuPW!0Qvs?;W z-CC|adWQV>4~c;0)=V5kB#770qy0y2^$(I?B)>IZ(7>(wnCf23|0I9+at=zkm9NV| z4w9O8b1S|k+Hseuq@PIPk6X@iR^&5CGCt{!TK5E>G6uguebB;5aF6Tf2MM-CkDKKl zlVk1#`mu1e+{0X7`RqTC;CAJkesK@7+(^931h;_rE_L^_>_q)FiLI308&mG?)m|^^ z!w}A}yIcG8Ai<~LTP|=Vu0VZB390*?;BMx}W&BD=>|pyz!2OqHrlP%&*duckcQw&8 zN%*0B3J270cYl>y`fDL^NI1goe6dH89<_(slCQ~gM~VE~jsE=N3xhAM{+Qs${qf&m zDUTBmRFnQiQ)=pw|5LdF#5)pU$z9l2=d~W~1#s8Q9P>iY8(%^XkK4K|aers5(B*%i zNBiI0pOn*uo*vZxc6JMQ4pCPU?>~;7SHu_V&ORW1QS^MtW1kCPvT~o$^R4zAEaW!N z^KL?q`t9I1#!mEJh@QX201kg^E{60G5&B_0Q`yGR^TDyO#3a}v*9iwbYbECn+f_$L z&tK|;*ljrpoIBFH@xju{S$=cC8Y^-lctBaUZjh^=nTLhtk@o>R4 z=y_9p#g$UqbQ^jshof3^jr4vr952eTU;55Gf{_W8- zZbpyQahsUpem3P_Uiq2?wMQUfzaQtA&w z>Jsvt@(!{9qQl$R%nEGxwdjKX|K|tE`4An(NEA-Rc7HP_s|X$CMPmCA!h=9(I0J^~ zV*9xCZ=!R{Ng{*gV}~hn4nik=9XZv{!j40=pDlUYnz2(RWMQWr;_HG$6=MnS#nhX0 z-k8vHIi}8%!5Q`I2%ig6H;R#t`reffmDc<|^T+-0H<)&w=rfR*CNDmwjc3s3$J7@h z>oKN%ul+R%+s~R-%>ko0B zn#0@FM2L~dLyiN?I!bhejwc|d`AE!GT^3^6BTEC zyP5}Ey&!7)Vsm;4SQ#3pB`9(I9CjWg0UT(w{luLg$f1pL3^d*)=OOI;jLl!LP3|nx zA3obp2P@e*J-g*Ta8=%q7m%5}%?>WSkAAnshrZ$kko#c=Ci@>Twu#562Abz#< zXk+fV+Q%1D{|DwCQ~yD12^RuP!MsbA=O6oq0d`+u-gG_B$Cisvn)C&CMnYW?^H zrO)u-7^2IEynW!MGqAwUH=-h=_P~Nij&p*HK3~ld75u^j-vC4__7WH?9}AjvJ`>$m zK!xBDEIgmVZL276%p2}nEPRQRz#8_neVWPC! z6XFMp#>;^M8Y;x!NcjQfwKZ@Y@DAb`?c)U}1`WDiQXhio5OhDI+OW=FV{xYPnd;+W zc*f#Og+l=KtHl?K#m|WU7wXyl7+H(OzcUbHDb$dt(e>ghvG`8aeXG|?fDemVZcS{1 z>KW|t{0)ous^6>n0Xf&AFID{-)#nR<27Nu`bA#&kqW6;Cp!}MuEmCNKzPn`qgsM-4 zON~CkL3DyD&CR0kGis6Z_kgPNM6jg31gd3O)&Nz?2_$|IQUUCJP$^@&)6wtIeXa5% zDe|Uyzkscw@=i7oEJFV|x7_{c%>O~vc&^JDfW8mqIfN=!ak^ei{m#6BT?AE~*ckRT z`c^7msZwI$LGc!WJ83CIr4&||1{-uS15k~ z{hD`!a^0oujgrSQh9~wKO#OsIKg(zcV5Ln z8r5SSc@2&;?S15j7#JkITX0-rM?nmXS3lyh&)X0|sz33OgwqX2Z68TshRo^V5T&OH ziGYFm@|?kbu2WyQgZM~Xh*b^y`P%)^Tnx5Vp8EmiF;ai9@)i!X5u+Lg@8BZA+hCtu zfA7TL;~X4l4SQ`~DmYPc)UaFZwxt++NBQkLH8)9oe)U8DXXneoH$=z-wWpJRe3tm! zU<*?$hkrwSe#x=Jzk2?oegXYF)~f#vgA#Xt0{-FC^OgHCxIp%QSi@;g(qn_a>3m|f z_Jb1N{}nlSuatVG!PGY_8wLDfbD%-1|NLJ+^a}Nz{CbDKM=!<8H}_5*79r6FayII7#w9_4WBkH{1U^*d2Bub zR@*#7q(wU>=fO&@KUlIKBl+r&TOsvK7hvQJ<(>bg{eT#`TntO_D?jG%R$*j>aFoH- z`87r+@PqjS{4Chj0*t&t80O3`U?ERmdOnMh&naGd`G+uHaG~8XvXsI8U&CkioEq7v z{ImD${5^79{p#bn*7x=(mTFGIebx4zmv-6Nl^lld49nLm?U_d8>g(OFeKGhSVF4C?=WcKA$F8DwkW+fOI~emrzMN1S z;pn(KS&r%cDTWHgxa#g!E(L~8ljp4h~_!q08JlhL}Vgq za{q;ca!fzVgeyBNn090@93)E0S&L#Oti2m>i0#7dXPWQ=TLdi6pA0Fqp!tAA{WSs7g$8Eo8$zc8Y6CB6iG{cmfshr&tHg8gr zCEQOq$+lDY+=OZt@&FS~GEMNlO(wKKKod|d*v*g$eXl&ja>4pOWI|KrxrGX`y+2?= z4-sW0Gl%r?GA^z&p=;~7pav=|A0;Gst}~&+@=!wQ%EPMI%RsJPq*pLLAdm71lJlT^ z#jMTk&U+9luaO|C34X)1=VwFZq$)DNbt4{>%^$KX`q4ZSyia=Dpt4#x7$$fHgSMwa zRhjbEgWW$M00ux6Q`OUpO|ZT41*@it{$~P5=`_~sU8wp){n~+*AF;Cts^Y>&Gl4nM zGY-{aUpmJGCMmzW`c~N?OyG9y`>9q=I`wzc?e?5{sJ6V9K#)>+xwE0VLC*Om;FbF% z)F{W<`1dGZv1XX?7>%FfoD2Vi8mo8sKjP(p@&~H#8~@{U>0UO~L4j+``tXr6G}O+lLM zOVl4g$HaSAnEchsZ;EOT%H+Qw0TYPInEf%6j|b@{vjU3ZXS1rsrRidr)~$F*&yOF}a_p{up~k{FNqm zSYIZcLDQ{loK2X{Jv2|;^se{_sDE1L*-aFtq7jtIvHrZKDjHM0xXa``#Ty0rcSF*H zY;yWb&IA%y2}haw8Cp}r=@*dDxq-?4NBwq*{%qj5)nqG|g#3TXm&xuybuS&~L4s** zIUks;y~?LZ*uH?Q_XU6q3GJ^kSwoqqa0?_@jv^jjR-Vq05{xk&yv=0(C%PvjIG%t0 z+a}ZUeG`I%$TFG#(?0PgkpsG!%;C~A12N58n@r8kK}`LBCi4s0-p;6?`VF@If%yj#Guw7%J z67raNO!{!fz&SKe6(Pr@m*{^lNfby5c$l;r^%o`W`jYmW&I^))p`!llX>u@zWaDQd=`A)1*I0KO=hbT7P%#oQq7`-`Q9~{^CcZ*TS^5 z=Pb`$;h37XApxt>JW~99rp+gEzDMg1H*IpnUxA+O$~S90S&T5~5qb80)2c@HL-g#I zf;-dd1_8>T=a3juO-r%4k^lLm@*7(!{}4S=;}$S2zLkXqoh~xZHZ4Z5G59`o`pVqF zw2(3WrRcEz^NKG_%4+G&Md$jz&Q5MhH7OU-Y2l1X=nM|f3I0^$ohki;=(i zqaEc|yYZ{veB$m=Uy|Qgxb$wUh_}bF=w!AWFDP(bL*R@VO)Y7xWy|d+cK6YSH^90~YvQ zKISXweJtXE3jEE>^$m;AvzZ3~)Z1u#7(G^h+1#v`)abc+n?C30WGEMVyY{M~Bd>We z>{fp*I&D8Cg2Qy!yIXhw=(LbN892akmsRw93AW3DLt-Z+o=;S{Hb)qfT^}W0kM{f2WNnZ9gOe4KTa_LYZGRR}Z6OsW0REiy@4SoK4FQ}@Q{1|%X3r`Pfyi$Bd zdXDDIYI%J6;K!tQ5EgGjoO-FW7uYjhIXd;%vhjfQi789Ckr^89Blp(%*Q4hp<*G$l zjW{bzJTAh=bzDx|JsG5;XM*u?r=An#Jtj`_@-hxvst!o{85h0( zg{>yb{S>_e2b^0eZRC{O}ZPeLxD6(Ce4; z9k!8i+r#Kp{{yxu*B(tLAw6K&mgD)OkE3%$dIPZSe(f!Aw#az}+l^5D%=ts}743G& z-~*k{M2NxmV^3iv5S_<~UY_$Uc2Ivbt*^5FVF%@eQqMLo2m`U>Wa;Ig^+`Eioj7iH z`_I_ScS=2-Qc{m}q0du#6EH0|XA+UP=<}m^Q2Yx_`=8`@(KAFYteEz)1f9^sn2}ZQ zVA@E{GbN{p-viSw=NJ$5iQgp)6{bC@{^X?P$D}P1<0vF8e<SLo6W)Af76{%$U7c_z@60DTXA>R-GPVEcav{ z#vHNNQlHeVgb#mo4|Z1l5Sse3;JpqzFOmfnnsUT9f}P{i%L|QF`aO1O=1HyQ!utu> z`#J>|53kx16L;g{SaSHCXMLHQ4jkA5^g28$ii@xJ{ zQD=x&sb9EAzjyLeNgfr8yGbt{M3ujZ#iP`p7ro#d0&AR!#UDw}B1Bt>9|4OuNii!l ztW`g{uZ{HFK*MJeh(urHeFBg@4K>>5NW3HMtFO`fB^Lju?^6vw7FYj=z77n681{d> zC0}I!I%X2WHd!pD~AbK^5<+zC!eSwU4oC@ohs%0YblDc!E%+`DygSXEcfK z3spKlLI2H`=aerwZuCEH^A{YuSyzYt>GE7a?Pyhc1|ofpiHJ5{Gak8M~-&peIe8Zan}MVnclr1C}3DA($=?1|*gl zfr_vU%rP)Y`%KI2IvkiSJ$F#9eV!N?F1|-7m$*+61||we1WwvKN`Q|^mu`WRHs2Qb zUVRKF*tUKBI_f{5IPaMGaJV_|@U84SaF9|ZG(p9{TJ^ggi65nyKMKLDUWb+H9euQx7n|KHy3W*414UK zKd5<8%5e%e8-wE~6G(LnY!{nV9tNMGvD|07;J;MeM}r?d`s0ubQ(zlWcIgCwLG3w# zt;)~D;4v{S!xoNd{n~_~PBPepjm>&Px#$qEPL3nQbNWeor(vz_>j|#czKegj7JK4$ z@`nr80siLeuvrr)!>Uo!CbPlb#^`+OXDs zpOKMr&wzg{FDUZ3_?Y1@#xV3=g^{=DwsfHjt9YFG^(KtWWzga@;1)(Y>SE+K^;0$b zf+E``hYic@eiNxtKBuw!OKJP16ll2_ezClw(%^Xn*#8vNF5VqW`^py&3&bwn5=*by zL^rMb;Y*^s6Nm~+?dSOkV}4fri=|Jop=$_CmgB?YSo-#lbO6}mPPBQ4(yt|m<$j>L z7nUyP;_18HIU=|Euyou1&VVzC#1ruI^Twrwd)e zwMQB5HjXP_@H~e8C%#H|yUi7c#)&V--SMylurTzB^7;0Q?Rc~)&87JHUF+e1;0+!# zk(loP2iP{;=}QyYCOJqrsB>QvSu8p{9Awu{+6WVQUwKc57z_ULF%x-AbIXS~o!EQ4 ziQE(>06D^8%j1ch%gfdyaG1BnXZM?kTn}2o5w2DGdaemKictWLD6h_hxBtlpayZJd zoqNAE;a`-Oc$8x|*$Yirx%+VJ5?N}Zqwkn z@=r~;K=Mg&Laq4r&CZ1L2Z8SLO1{KOBF`@b{bMAex8Y(nD zWI~&C-dUmk9ur!~MLpX{PvGl(I}>_K_0~!~r;%Qv{^rUTg$qY|1=lj&3zgP?96D`0 z1zPt&Wdj>HZZn~@8`;4IRj06!ey$0YYu>WzHhC|pzk-dnEud<;@|A*f3C})-@`~#B zG{KjtZl}fDP~Adub|!e2&M&L`%%_1g@ueDS2_Iw*BUT z{jyF&O)H|?X5DTA%hdN)V|gNhPo(G&YVMXEF%x)-Xdq;mulbM*V}_Z)%~G5IHGhv{ z;)V&Fqy1Ag$q_tQG6C(KfZCqY?_&H7lJ|yM#!xNWXZ)M^0(A%F5oCWd{_n}Y^YeD7 zb)^@`_@@Aom3Bj|9D`Df{{aS^4u(28Rz7U}I>&*!%cVfj_`B&wn z`;>i$Xv}xv(@;lLHTnXK?|03I*L!3jXneEOPhQ_$jL60}Q8~i(H}D3($oT%pg_5hN ze@s3%<2zS^eNg|6_S5=uWq=3u+jO2-%r-On^$m>0+SNe)6t7aSeLDGD^!qQq?QtS; z%z}m+7#KUz6c-D30~(&DcGs4JOwl&BmtF`BUs6r;RSQkgTXY=SUk?q|UtV;T%x|C} zCOuiEsGa7Sq5%#Z>^6nJ=^P?TZ63stH-%3&l2Y%5sQO?{;n@-tf~aht{fYOaew(Py zAx**8dftn&8k)Du6x_+RFe4$x*M#yaQy}r$`yi(L4wKJx>p_1*O!an?|F#%`AT~~N zn2-o2>mZZzeyn^uU;` zE2P%|5*5;uWwJb6lSu#man0XksxKH4+HYwxN3#L-V&dVXu##^wi#1=7;I^oN7nuyr zT@XiG`=2u=ORg5;wQMXt)nr^L&nd*!4`wnt3ilD>HGF)%!ldiD0-7AgM%{1HzfqrZ zLV55eUGrMx2S1cTCqt9I?Mgm?QhzMVYq=(UKGCV2z3AcCPwJZ{eF9MlN@+fOsr1yC z^z$ipoH37h5X$#UcSbKeX9D@>uc0yW7jsP7GV%YRM{xXSn6#%gx9b@q`?N_rPx6_> z7m)*=NflWym-z1jf;XwR3&#&Vx5$QJI#KKLq{g4nGh6~TrqjhTS49t}Kb{(CI?k0m zD)B&MA2J=SPr_sSlRMnijmhoAgXcoI6Q=zJ@8xG~qxqh4oru>Y-v@f`+QP-uracP( zko@}cz?t^Fr5^`9wVo-IL^tg_vO)b}bP5>DA298{;o6ypn)w>0o&0rMqI16L*KMcD zx<>PRN^K8%-L%;wz6NyqQ0w%l4W^CYI|ie3nsB^KYr&h}kIotL-cx^r@L5Su$YbZK zX=U&6PCw!FnU>WotaT>-$Y^@vMwyn{D^L0X*&g{qjRIoxs3Na$q}KW{1@ZR5???4So@ruhs6I$KjsU-yT-GQi%$2_k5wP_ z^b|l8`F&-+>m~z|A4TVXT<~+qZPMHY`GvXQF5xx`)}jm@k>5tUai%PvGl6<&#qZ|E zMldM%b9C+@JLi{wyV1Ut-m}grK}R|DZbSAx6rdQ0&KU9Gx^+aeCQ=?c>fdl{{}DeE z{XAXMZi>4#-%*@t2d@lB3_X6U$~V!&gMZHdL9#AgIhu3 zM9zwA;^{2zd3?wwx4B2ra~~ha#=1xCz0C8N2*&QA+r|G%{&BA7rJgmh%azgmmhB>8 zcaP0+d)^Rz(cLBSknY4AI<}RX6Wy(?|1O>8{nBBE3HXz;#!W*h2k(=;*xEHIo~dY=BO0xlg+DKNlVX zI=yJs2+newdjy@+v?t+H+nejyUV4#nDkq}TQBarnx`*`$$d*c3X~seIH@($Lf1`E*Jd;4sf0G zyF2LpWy9rda7bj(zUW*a0cGk{ll>B%v!zgya>gwvdDw#fJnGv$X?>bbG2wV}Uxy0o zt98$~ma}Q3iMDvHcMB ztJ(Ndf}R7~`_;hqhTlm~*;zt`1c%5M9bscdbAAfqKJiad9);2d_aCCUs^lin!?EC$ za%j4M!Me*J$=8XBdD!Z5^;0BYVQl`x*lMc?m*|}-xioBL^+m53?n<$>U)B-yz9DlX zY&}l|81<P8+@Np!adPM`4@Qa(_p!`rxtc=)7@j+W&~&n>ely*iLgzq<_eH1lzqM z=MnT;zIMB+9u$zuMQ_)>)`j%n=8CXY_E0*^g6=f#|~qtHR9}h(V52s zii6nkTH%?{dL;Qz?8MmDYo0}i7B#YnVrnb(9Xjn~Kf_ebnUdZ{DX(#RF|Bu;CtZ{` z({(NFJ>ff2-c0gbn6{7TM1ImEKbE{LruP)#6FqkxWMc}ZKd$ea=S&fDG5sUDzMps# zJ#AF?Nqe6>wKUrB7H&UZAtB?!i-VcKbyRf z7s6XHW2WRTAZdBk89S7(p0xcDnfV;x2|+@8hB5O_cV!>qXVyDXOf$LvYMJs^Ih00c1mqy#IW>0$LV=YZbtnudu`ia9UH^9xNN97fDp zqxrX{kZ{PcbEfdjps9`Y=3?g?*^bj58jlk`XZBmfOKL@=@Uhf?p`Ux_qr8BfpuDc= zwbr=2=beFhMRRx{0*!qN2@o_9^F~dYy5pTXh?ff&2lGDH_dfoe=792cE59mk z*P;BpXNc7MIK;JQ1@niBjt_Chd*!~4`O~z&GCrQ-Z_7Wy{9kl_6(1lzWX!LlsZy_J zA+EhLSa9wEQa*=~-XVo)SYUafF{{%S{H61cxc1UuVH@pVi`jjn@G{wVA*S~!EPRfZ z$L;??Y_4#Uu<&>BJwl9Q7iTtNQ6{x6b$AhCmRDbN3+)ag&W6}CvhZRN-_AxQAa=Lp z+p%c3HqV2;YlXi;JY4O^@I55PNNDKK z|N4{YdzS%)8=;m&o<0xWioVMjBsdak+sNDmeRrx}ShGnAfrxLUeApVzQBb~t$FBXM zW{mRYe9Fay8Wf^F^(BZA9ct`+)89ghTA`X+pJ_mV{-E}SR)0!k-TNtzZ~?{XkG=@i z59+zff2-yXs?TL$=uz~uEdIbgsBSF=2lRieyv-{0RiJ;#p`*i}TMbnoNKOO&+hvXg zRijoGX6>WjKd#)wD$Q|XK<`0NY5m%P-kW|HI(;HkS{*wuMD?r6$@+N&#&T`RX<+#j z*v!YS>?{R4ls}L;9#k;4eBjr_H&Q=og+12%Dzwj(^Z>S*k$!Qi^yCuH$m$n* zpTnT~ZlPRa7N<~uf%tXcB-5lijK$zY^#>ll?P3bPTuFV)at?<>9Ag-{0E4-N$sBqT z4mI}=_m&(59MnE1;>D={>!9}IVekRTeZfJ&_Fad;S7p);2Ux~BM0}brC6^5QEsrPo zyBNPiEPz`YwUZ z9NVm<-|uPZ?S}1wD;a{J=S7!?gA(Va%j}Dq13e)1^1U%MTlsnWh$?yd!r@qQQu(U; z?D`pQ%l45{*eloBGz?q4VlTf=PfWuwkj%aD0PL~8m+(;WF~c6^6k>R+yr;1H2kC{! z@ax()vs>zRM`HL38T7#}%L@ws#)W5B!cNBCZ&{Avoyw!$Zh1W62AW=u7zzK`d3Pj3 zxZohzU^*{Ex+~9oE8Cc-%)*HFGQt+iSBvO97dG=)fbJ;~otwd?HqvW=ktvM1>;fCM z-%KRZX&CuR*CQRDolANGjRA+g0RK|RpPa)O*&*C%SVwRhdJi#DN3!qyk6|s_{$4na zrK#FSu!fhvc~h{oRJbXydIS%2ufliFur~YHHp}XH=Da*>!H^96Ld7$$v zmU%e9dp6A0o+B*l%)(T6m`ZeQa@1kjDFQTe`{}#}%Py82l{?MetIKX8+T9In+}V32 z_km>((RAa6t6afvzy1Q2sb9?fp505C>#^(;InTR4Ge%?hRxJC0Y`_CIyRPlED_g_I z#Pi){wtuB;AHO)Cy1$7nJc4CWvj5#%;ck*`Hh`hI@;$j*v_BR@%S2~$x7t3J&^7_L z5&uZ}Mx}R(j}Q)VdaiV)DZNbdH-`k@-qDnnjw0ZECpauN(g~)tjrMyT)*eL@IV=MJ zIHFuF6Z!K(GCY3(M>J1qA}kM_zY&g#99(E3lO#_~eG0cAfKBlBEgX3<2O0iqDHYHtz8wZtKKlS+}(kpa-sFd1*38Yu(J*w&q;bc+1Lj8(W zdak2rK9RgL@t`DU09Bi_sFAZj^?B?3uv&A<)L$WUIH=ZMGZX3{h7YI~n@4vO zJSMqIsGcj_8xvefs&(2AP`z7xuqOC9gHx$r+4^^b&kGk4YAzMfgb9wUdgH6_uOz()7<|RWqZ-QgQjR6wdUM+BlQz^rHy&3 zDZ1m|KNh{Q38Km)G(~>C2)_a`+y7pu91w{0CE9G+a8vk}=9yx*2*1x1Ua^BG5D=qM zhU}N0F@-wcf!J5l&t(dX6eL1S_is~R^L4RW(RED0>6)*K%Qe5f$v;NN+*_tW{5;VW zsE^8S&2Cx}b^YDbednT-V-A>Pb? z>L=$8>H`$NvB`~6tIMVDK_jPguQ+US7d*xW4rr8P#UH;>Gk_pf_PtK91%UhZsPIA3K-CNXWEygTJsxQ{$*gQd!r|qdxlXJQBtdO6c z3wT|V)0U>4*Anks^>~xLfNJPSsz~;e`GLviw#)mkgQW6jO?I~W8B`r$JBR)AO|;(_|jv>tQ!Y_Ldy3$$X;+6DJ^XnB{|~OeV*# zUY}2Tif}|shW1xNg7Gbjmz#`d)bG|rtyknbFc~AI_Ys<`K9q4f+s^KTgymIbulXw$0B`0=CZ{1;M&}?O!_L}zY+gK zxXdQ~1?fdX&urCe({=qKzL5ARO$BERyLEU=nRx}OpsNb@?K^0l|hqkW~O z;|G+!%VH$Y0;vQ)s>~JvOGJ^}{>kC3j&uP2u{At7*O~ z_j!|gu>`M)2O@JHlRCxv@yjVj)PKK8wK-KsVqrr}C%M)QK}Y-9Oh@e%K*va~-L!vG z=7i{Q4bQxFrrnv!b#^|`d`8N-+C7Txe2-+5)M3~^IJJI=8=D%)Ij^o|X z`GMrWj$7P>$jf)3^RooT-6rjGM#pVS0_7WSoGI!fQqfsXxSv0Fy0Ndse}m2nHiY$X zqfbjQ9y+V;;1jcJb7$zRk({Di&lrPO_o1^^=lgXj61YOgay)A^*M!a{S=ZdEC)Ho< zRETip9<`heuTRd0?l!LTK75e;*b?w}R|=lihu&-DKH@H5n$6WW(>zoBoiKHP%;nLm zy#?@-&Eb1T3vU}%SWc_=0qwn9Yq_aj?el~Us{5n&RkD$;m#er`bTM&-I5;21V>WxQMOpL5Ej^>A3~VaY$fL-YIt-6Y9E%KNP(+lDC3-qFRxk0lo5{p8)kMC3k|(+cIBqH%ZM_FLd4#AG7;!^Y^Ja zVRse3_TSO_`v$q1x(s%g**<4S@H0j34}w!Z1s(NExt})YXI>pT?CsLO;5m*#-}M$c zuZ#Z&z9#o6`;;BaGg>Th0O}J^zcs9|ec6uA$KfA2*5;$bukp20VFRVJ$WThZ{!%gu z&xLI)pMAE9em~{H@8bX4y$hXpWR47b=SraoI`7KB0uIP{jP$^%@)v+Z&3Pf^zrqpQ z^XR-l%Ua7{;5cJ(r2oGYP*n2wXiGcl`?Q6ABpM>&H&-l5qDC~cchO=*`yG0U z&tXF@w$|Ph;&<^MKOI{yW^g|}zt(TwdaUF|(R)O79_Pau3m?!_X(Dt@3Ry9&zwmD;eLefKv8Bqph zJW2iJ`dnv*wbvx6d^60vLvrPi)Sep5{GOg#XBH$MrFzyk*I`yGo&P75JBL{#RF6s! zwT3K+n6+#kfp5A%f^AfPe}maluX70`rbw?JX5XfMo`m{$Fng|Y(-M4)?=gdTN;1cR zgyqfTH1nod?YX%Qb6%8-E+pDBAn#_(SubE~Xwv%&b}kTI2bwlAfbUN1e4Eb0nk)~# z^IY+nK$G6Tv2&H4ubY&6gI)UY0DB}f2{!&Z>@wA`a0`iS^-JdRGM=>`5 zPVjMcJTwj!ULzLtAsh3TKS3kgM$$jTf=A__L)`Yz7jR7b_e~HtvVdX1G4&tExh;5n z2P_PVVSv^J&2birosala)ILhhd|3FI^h(kFgmD(*vG6zxAc84`>)HJs0RZDEdD%Xg?kLTZw;y{DQ*q zqI`quGqpF1P)&M+@}Fw$y6JBrJ@Zhbyae=zSm1mCYJO(``<>{&h+ib~-(A(4iPacr z$H98?+vRINZ=j5WG#5erAySzy>y80EPeXOB=q%`8rhS>!EWiD=7yWxAw+3}r3XqiY z1t+Na=T$lf*nGeznGCFhI!8Du7;xn|qka$;(y2dTmz)Ek*6P!NCJ{=YR{f?JEYRnn zR_7NO?5q5>8j17VNO=L7D?*LsCI%nY`*)@FQwMX%_WRYxP-!`Q!Cr)^9OV-KiLqF> zV{nl2<|>Y}U6J_l4{HBtg^XA3!{F=E;{z2Bt52z!UsTb|A6hLOJE)K`jt7HBq!<~> zn|Us+)o)wgY3Z)na1cYGl?-%%!+e~%?q%w?l>-3YHU-2Nn1ojM+br(ZFDUWFP8S+02t(5N(c2Y~) z)E5_GNc}vpgHJEcEDY7?ynOQl)%8Prm3MYfj*tB?+)2PVaM1cR!d=A|00#(aOX z92A z;B_qB!nmYMU=_!YKc0rAl``jrKd3Z@6geyt4Bjp9yZZI9ETDSIGQp+ZfMtEj1vv75 zV6G5u1(ppeI9hehGFU9NRz0!oZs}=)AJ}fcxf07P@A_Nyn_=1eavlU3?>)H~%N9sa z0(?Nf%dbPz+4!7;8^-@M&KY9zl4$1_AA zFp>4j?>f$3`;^yAWPt#b;e_6kOytc9Dj<3pPD~a*hKW4L^&-9DBvY5pm}DYXi+>YN zJ}Egt;zN;2dP840srsskbSiu3?X_=0b6<9tTUHfK&5=`nI@c~KCw#s z`IhX}zUNBiT$>UjJ|C#^=zON+W0GUn{0UWZ{J+$cJTc|RM4NA*O8JPUWEk57CqPxR zzR{PksP`;{s-1+_`)VcW70L&#reW<U5tlfzb?X`hj>xgb#~;YXZ&uqH|>4VFDrXgF^ji=~XiU=bXKC z<%arqgp*?YJK3IaF4XHe*!Z>g3+i>AVf^n3rwAH~rAOZQ$FWfRJTxeu(fF?wa1t~; zEF3!H@2ThS29}*R#*DwcKCcabi^0bD4s%Uh88k#iFsD3)7zrR6;)~}j{e1cm~m#S+w!KYNEuxNKOM9TTvXaVvEU-4PjscG?uYZu!G58 zp#AHOdfqVkcij)vCpNEn9RqtuOX@Zt0uFM$5|~PY5O)Z^v^|qKABgU zj5%ZG`+oZXJ()ZXzuII>6Q4Wvlgj5}GG5brfah*`U`@sg!i6Wkh7=^2jB&D#q31g` zrtUNu*HaDYQR*XIbMXiw+L?^*3_1ehfry{Wq+8y$=Y#~fP5O^A$3lxtB>(-IeAq!c#D* zZ_C`6^aIJAnbdSif}(SY%%@GKnZo0x`3?tQ*O^Y%N9m|P-E^{C2#4)vw@fps{U!g3 z&LOs8bT?^X4sw2s-eNA)_|v3)C>srW`)j@~P5p>8Z)PADm^7EJ?Ne8he^z>3O`7(> z(7!LeW~O7gfGp6PBKK6&LHoMVX^{M_Y2QW9Jx-+zcuhOMaQV@({UU9pUM7uxypf8p zT9`I(ywB1mI_3NtUT<0}rv{x0@o|{es^g=hyaCfndl%5D)qF>*&Z6U>!*RDh<)-BW zjQ{F`PLl19g{H-3^^tj7$-L9FxN;l`nXAy-j_XApGbxLdqw3XMh)GG|W$+&KcGSKs zZ@v_*(T~~g)6zIC7}IkadOPX)%F|l7`ou@!>&Sg>;%)Vvcyq2@LckZdX$Tt_Z$~db zF0jsR3<;--K2ILAUhl>ji!-AZy^N3Qxy+6JvSZWkfvwP6Lf5sQYTX7sr=hn@))}{+ z+Ba#Cg5J|sGO*39wYhPx=EK}d%jB!+%l;@iwNYKMHmeEs!RJn8Nkj2g_lP zy_cr&WBKRDuutkg24Ko55-fm&oF=)y5mS2QQZO+Jhvn-FU`lV{#llhR(@C*8$`c|N zUX3aJME8O6%4sR5?VE!scfLXnv_()UIG>4_@-&^wO7}q3?UED2lnJ^IRjUsKQz$&l zJ!sWGYA!rwsPs=k&Hc(nPPu_j*|-R5xh3-%&NCx*rzHa{K@~$25ojM>F5*kobXMEo0g`{E3corC_7jkx6gcB^wQF<2tn! zjp!T@e<|$d-Ie_8j{W!du|2H)9(4A}JQ)s%{XC4$&P8N|DuzRr59a86299!F*>$Av zZIHkx9Jg~Q=N~=*%!QM3oTj|QO67D^$j5XCI?FhYkPB6pvEX_MI!hQ2@$mokRXaZl z7YJ&5%RvDh)mflU?8}rt5jiLV^_t@$ee!?Olin~#dnKI@bdDMQrv^dq!BFlLf`6}JD|+tT{DU!t~(4#UxDlKq%`2c&BCBR*RV%WS7X zlhuZ6ffDbgbdhm$fNotZ3TeU548 zzRAT9q|Y%x?paKG?gb7?qw~@at$zG6jA^PnqVpI{dwgv$T{(E@43NAPra#SC)w9s? z5avF*0yA1YdoGcqi2rvgPbe{CI0M7JLeE;chhWAxgx&dlF7=i0i@qN-Q^e4Ko;TzI zkC}`g{cQ#D2^q&b0yAHi1&BUh@ws81(@BfgL`rLD<&q4N6NM1^G-u9`OE!#Ko>Dcyj z!z|2>$$|$-*MrauK;~|cxLkF$E^p}h zHNpRSkJZ@4_7@~<-X`}{^-m`r5FG+@-;wo^`o<+kfw`97k`SC^9_IB{e_~=ll8Bxc zU>@ULqtqwVivi%-n5TLgBvA5dn6JHP#3Pk+Gv;5feD6dd%N9d1|NWNG>NA`v5Dd z&}4h;3!miT#wpPFf&eM8aGCHhpphv3ssB8UMXd;*QC$mhw(ZrvhecN~$f70PZ=|mt zi)=q#{4y3)H)7FN;eJ7!O7%wPjmP4A;ekV}LHee!_-Z*9K}>r-u=sp2j?#~n?^0YK zpnZt($MV6CSbWZzU7zdI7Giu%9_3=OavC6}JWnkCPUq7x8CPdwaT8-%&xaVhiLVNv zPjjje8?JhvZ;IS2A$FGft$nlPoKAh}G~VX^=q=jc82y28Yjd7KUz`m)Z$tD>u1D#L z{(POkMFqRs8T}Ib8BTe7^@sa!7H|ke)jx{#4rJMf>$4p!OM0%O3ntT-=czA&vAL;Gcah{~F!;i0bdWv; zYMc9FXKQa$t@^Eq|GtTX*-&fsq~IRyE3Hx928KN9536A+$B2;_Dpo&ZjrDbe&ZFaI z%PCOPi*YDdV(2CYX+8p#QvXHzMU-~;e(j+m{t-Rsln>}q#7)ppA@xlK7&?owYUxn% zoc4o+u2arq#iexo`EeqK9@5XJqP>72G4$rOUGIlMP;T=+p>O25f^ypr9a_Wn0^{N2 zr}}w^j$LqZ?bq+XNvSy)fhBEuY+nY4YL!~_SC1Vcw9M+TdxYo4s6mE3n>6JNI~wqQv>&QGxM0pa#w z$@$Xr0viO2@+6iFoks)Hb+BIZ!dNn1dDZ{gTxp4YpVvt|wG>OfX1l!~{vol0@69EQ zi6Fl68p{hS*{}VFt8LFzNsFwj|i;bn8HWz5g&?{ouxD2H=XBV*z$>& zv7PsZ*D!py08qgdtYiSg&#z(NH7vILx$q}4M}i-i+UDJf;h**IvxT4s-tSXMPmug2 z2o0m#L@YHNq)NgjyZ)C-a3c&G)sK&*HM&2pCkid;h*&0Z!Ex}f;Bz0vvIqkVyTLl; zkziRrF|NW|ZqH0#Fj|^{(F*JbKg<^5O$p}=LYvP zv1NA0u7Ao0>CTsBy%l!dC4(Dxq52K6Yuz$7^0+^9JU{j|cIzlT^sdqT0d@K5RQpWzR;A;BDeL~zru0N!W~ zwu`?L%GvJr)^y@SDIdRF`!P&px^S?eqQ_BA#+b+>ns2EP4Bagzay`*S`~M6TpGvQn ziJU25Aj&7${);Rw;yxWJ3#4e!gsT|Tvm7diNCAlnuT?*IpULtog}#08Mv7RpzM4*{x|38>VR45hgB z4=2c{r+o<}*1u6>`8y@qT+~(vH7r~9kD5@m^k_lNyG!T~e2EFIWuOi9Ew7RMrU}i{ z{8gM{XQWNeif_vM#!pn7|6%zv~xrfFRQZW(vmw>XqA0 z{3p3@LxbL{P2eW|{Ti4O+UG$NI6KG(9cZ|hg@?l?ko`M1u|dOh(K(G@eQVJ0hva^Y z|L;Q_D1`>wx8eUvidG=1c`EADmVFtbmUrgAjbm6>QvQHzK}H$B?Q@RKSVfIe_Zxqq z?w?WH|Kf}CU$2zTdt*5_Yt?>mIb9W}hj%oi&aTD2hI~{>|W_t>%yl9FSW*jFe0^)spUAW=y zh$+5T`w`-*N1Ni16ca<7TrbR1DcY|7tN7P)?k3)o^yom``oW6^QtQ*r6CiGR_(dtg z^@K*{@0mj7ctT@8=|wSx$|-@y+akf} zkGl>f<;7%cehWRlw9g}}L47|SxxV!?SyF>>1@Vr!IJVeijS+nZJ?BzeLGIrstIYC& zbWTbA6KwQpi=GRZFqs3y$VB-D%_n5G6MYCh+zxj01e5W% z6w6URshkT;#(UydA>NDX9~nFzK9%}>e-u8m$+%SbwUj@&|H<fJcdhB|V z(OS>RPM+ilO?tT$Ka(GpU;kT8y6Ro%T$MsX&PtO$LwLUE*!)HMa4Et-XOy1|_%ls< z7csmOUq^Z(O`6!^2caW137t&ZOVT@zj?Ont+67#9cqYwXBp_!}o4D|b{LE9ShWORl zCY9*a^rBH-K>1CnC9+@BJWb9irW1e7?H1E~PW+uFwXM}3j;P+2dfnl;=a;4EZT|`- z?E0D1ucc?4=GkH>FsVD`{)}Eu(eyfQQY8-LLGRhpvu8RfubFsw&yoU4%$t_~llwV(MSk#_mZ}S)*YYG=tP?*3dT+?4gF`pdVuS=7(0en*bHA8s zQr64&fL@)Kn3Ns@S|*;4d=JKZy?}Pmd&dEK06sKMj_B^>7v=)@j&AaK$#0@}G*Q3X zOm~|Y|M=Zn^h%tzrQ4|eE9iYla+_{^xa306JAv&K?cG>0xu06o=l7KOn%oBE)}i-# z4hqz}^;H=-6L`gxD34w0xEYmsqRbje;W6dY<1V#d$+e< z`i0y-WXzg_-h||z-Nk~d>WC>FBv;_RL#sp8&mUrn=F?%W<`PLS&|JQe>+X0=(en+g zl-Ifirj(IO@bp{ZUwe;Cv2&5lmgkfr@q!fC-jxj{k73FP;fup=iRs;hDQs&m+YWoR z_Zd^36deWjTYV+vSy_nSAWw@gnT#nSt6v6(dA!vvfhjMkui^+Dwytj515;jAj`1<6 zJGuo^-jYBFoUlH$6utjKMLu7I-oca~RY$K>t{bNOEIcu&vVFWMi#69)J@I@#Kw`>L z#wFYUHFnOG((H>AyHz^|>gBp{2d2!DFAnN0ha}|%$x+ieM>*Ij z&#DimfpHM?cVfy!I>ysl5LIp?I^%_h0~MNsBOaCLZZMn2B$QkCg8Cpo3mI`4x` zd_Ak*kKP`V|Ap<0>-?)8y`@vAsId}ub1Q9|OK3fyF^}(k*e!A}try)?&)7q$CAuM@ z_f%QeVISl2U#dXwDZd~&h~XgLR*2W*?Jk9kaF}goZ#_>uAjbT(g`?Kz?3LqtS2)4+ zxqcs!9;dvda_cMf`X$E%l__#RL2tg!9joLTF@)9|k~dSR7gc-1NFS6W57e;zXI`Av z8?Gf70JXN?!kZ)g>QJ96JZsVyPx7D&8qSo#5qev2K<5gGULrYA(qC;4?rCz~rO#J= zDluKh(0jY~SjDu51HHFs4nNMefv307dZV24CjULR(nJQmH*)Q886;%lW_hzcO*m)S8UzLOHm1To+KZAuogPsp`?%#d@#TYZ* zBfWkBH=bkr9p`T(XENmngd2n%Wb8(L7f*^$2|Id;n$+SR>hop+>vZhM*vXUB=dJlC z?4;il=_A_j+UaM_O?U=LUkauUtfMBnx6pIhIkPT0?@~-t zvrO|yo(2ZVeSn!`C2vZ7D_762dhEOZuP^951+!X6Zx`to+Ut`g+dv1(JMzbLJ!Vb* zn2bhGQ9rrn;D4ipV)iM*37~w8 z_z*FBycl&z&mh~?rdrI_TqWr{l6S?NmK?J?6_PUEz8`Zg7atuYEiXT3iu!4iJRY1d z1#`B^=MTx3bRO5aRD71y_oE!P&QDl=l=4flv-W^NlHjrDEIJRnWYK9OY#_}I3YYW%spjDi!M{gQJ;nY@i2F+@(B_vBP`fq z?o#=nAR+Pjk(kHhh;-`X_)LJPn8zRMj&~s;vGa2=PkCgJust~Wg4^v(KPIY8|JyPD zE*=Y92nppWWBzy2Cj^PHs?+7iZm7@5TL=l&BeCG(7G!7}4T*mR2!jQ$>byF^@$sua zzycoM%_V(?W3Q{HU}2W%AdtB75+?s);dR0Zg@k-v7h~ZI!rO$VVUjDr!gCOdEMj$~Yd$nG7I*(5ESk@MK>BeH;RRq(o#q1?`Hy+$cItD``*?i2^h#jy zHIlO+KbG*6Nl#F|NZiiHioe*EKBl}qC>H1mEIz3I>#Cx93jcg|~qL z@^KhEUC#5wFVJ&i@N!w7p~31Y!P}J|Q@>o_ui&$K->nzy^jVY_5CI$N&!ReIvit;p z()ml>F7e@FaJ}63pl%8m8Z5)0U?99ucd4F(LmhVrU!eAg0GBY-gKLjkLaoR_cVlSa z&s6-<3TkzJh9SLIK`qNkAAf4WC7IF37{QAU(%HOqP5hoxs*2q46Rb0M-7kj zCN*K`2+{H`Duv2tmERV6o{!z5$;YAjx6o`^D4?=KHYNO96Tf9A8{DDdAN6sC_DC-n zRM>sF#G`z%ios+Lq9a#Hk@^`csMUwwcq}OE1Uo<3Gx`LGyKQb^VeQNY8I2?x`f}`HrsgCoY+rs@|V*$zW*UHLTV9G-_taGEH9V* z$5qD1{8UN=qynB3V|6SxnBGB*XEZ0?=sV-l_y_cg$_(3IVX>D+lPKuYUJfNarGX? z&->Bu!>&I1Zgq&!LR=#b=IZkmD{v6ap8W8@I^xI{DT9JCgat&N_4fcc72Rh#BHkNB1N>8cY zk)8S+*x~EB=2bmtZlmqSA9huzV=zkFF*dx(RqcbK5ZYn-sH+;Fc%74J2W0qjT(Z`9 zBs=~2fAZJ)x>M3li~}xp$&XdI*-X2PE9a6=V%?%$mXCMIt28(|igpjuj{&>nad*jp z@WxbxdWFwF3@i3%Zx;_6cevqTJg+Xc4ucYEFs`FvdQ?Mc?)Hf@7^eBs$jeF-`h39@yPQN85R!=_3SqT$B*Zr6#*~ zxM&eR*VNokAK3LS(gF@THLHp|{0SHN19LoTzEJ^X@3_ck=67#~-Qi>x83!GWnvL%& zeHGxI%l-~OoQoWD>Ra1G_0(d0UM><58TRFWsO19mJh+HHPW=~9i%<(>UvQN^&#`3| z_`0t0>)%BHKbl&$so?gTtMvOcTl0_uag{d!3{R~?!5?&$C*t5B{tKK7U1gOlf0s?C z*4J2bhbxiV4V_Q=9elNS?y=OV6>ZFb)v4X$}1^uSh?It>10FU$}fD)&XiSg7MLnJL}(QH%@{pe|54D z5xP)2uEFHW$KZfW?av>q#m27uRP^OgyS5YbjJoo{&&V6MklNP))Zxl|qF9B}#;b5; zKO1Kwt&i`oAGk8>Ii>XJ#>*-@7`y^Xo4?JK)?r_z^c%}{$9JWE-*9@q#G89Ixzh8& z*P-+_mW?6dN^?h)#vW>1_w$a`=Jzi4`K+CmuXRN~$o8|>QtH(9hLW@^ zGCmD;;<&JnE86c`B~nnQ^+dQrKd;^C^PdXeH2+8ETUuZ<+!cI1|uq*KM+nGb)n|Ar@!5yT`*~lHc{0SWB^c=X{*ZuqdWm=GTiOaRVY7Y2%QSMcy^9NqNQ40uN?oiB?Iq)TNZZ21ARabw* z0pkj}oV3(-)JmV|FV@$R^92mP!k?Gh+mLFPGYp0hxxZswblEGQTXEoP{2ng*YJlhD zYaQrZ?6P~HpGUqQToO0%ORR^&+rIEnaga*?gmGpAi!tbQ0}G4;5m5QL@nbh&CJxl> zbNz+y^qLxKgy#)jg&WXciz!awz;eucT>tO%gLlAx{iv?L>Bt+eC&mAMZJY9;S*|Jhx?5Pf0T5*dJWas4g@S4?;&HA-N2{Vq{kyzo!{28YA- zJ6{`U#b3M|f3NG8gZ*2+mhn^aDcAQaky*wFKYl&9Lay)qOJpUPC;T1D zSjP>nm)ZfcW^r)S8=}ZAbG`8Pdg9-OkI?m;jUqe_?W1v=t6fjyAaUq~SvAt2>v|pp zBO8Z~IbTi~^{&T#cy48Wi9Q6^{a#T^hHjL3CJw!-wFwaywqAId z_oG+Qd2fjeE-rZq%d0!@zrF~JRY$qd)Jydr4%ULJ=R)}i>WTkZs164{?1J~g4z zaDQ9?^0D-9W9)aU3$WcYLRs*~r83pv`Ee*)fxsuGI$j4jjzh!1CrPy(2LA$ks9ifN zwE;M|yV=|OaDC8IE4Ah+^(uSXQl0yK>aYLi;e!EwPc2o7TA$z98-&4pYB8qTRqUBx zD)qD7_t-0wy2%wAQa}1UD$n`|QnUOVzGwR*z2^I}yrZ+E0qq3(R_!q#zr!Bv-oxkz zm2sNhWA8)&Eog}z2S$Iz-o@4%zf6~(=C|2<(dNagdt<+3Z@!!cyDg`6{`2YmiT+gD zfaU)H_Ew?>mp1u*4c=7&%rn1qili9QXowobFv2b4)nrLTN2zMNo z)B2<9uaI6y>*WmRLP()njme((6Nd{X$Um=8opBU7Y}_WQH$NDM3qKjtx$Ast*so{b z#LT@oY&w;2C!zau*z!2ybJRe`_3Sk$ZfI|6Qv1x_GuYeo>)~|+Bo~U0Z=Ah##@T3A zxi#Iw-fHVlXxX5(n|sUef2QCS&lN5r=0)r+GabJDNG)E=W$zCdaOpn|dkC@TJZk)2 zjh4r8h~+ka<$F}SS@1M>i~hII2Xev~PW2VTwjcgaq4WhPh-*4Ez+NPInrzFx*ZUme z5J8uvT|O5$bakE*q-nFt)TQeZU? zKR~UpS6v|M1q@u&YW{T&eTsf1YEK}D!J+B!n@}3|57A4eOYCS(gZQ%1FUBEx6XRQN z7auzwNDjTXQa5A{1dTHj(psI{#>&3t>zyk9oV$sGx5KxyOAtTi%7^g~xQ3t&5ohAsleQ%W8yul`?)$ zP{C^C6sgnrc3fz_2m`jEnF3q~rq+bJi zC6_#6e(SWTBGN#`B^#huQM%R6>7^sAA27Yr^up5D@H|oa!(XpjfA?1Df3SIeTBnSn z=at#LnbM=}{V4lNjgB>v|3?2Jmv=Y*d;6mww^x5$#pM;?kW#zPV=6zw@(k@lFVen} z^3mwcruO^Mi_7It$aXb&`~UT&m(Q@iy7n>fKXUm7+o#*jPskO$6vQp}$y1jp7=SDG z)54;G)b8`dDlRp@e7pI{xWea2x5p9qmc9kcKeVI9^m@rV0C-1j^EJMFIafxfsbiJe z5Fbf!<;i;skmY)6I~D#SuDs3iG;QV3d%5xzHD)al{Xqkjo4Il(IAzqj>YuEteWg#~ zZ}XG3DJ`q}i(FYJ^pze{smY5e<^XTe$F$P)dyUL$@; z|Le_)k-CJMwT83mF^+WFJiGZ=(?O#J=Idy-+!99*7$gI(Jwy1IINAf`L;^;D)-#02{_}q4mwy4qfXlle5 zD9W({;}$mhyTf2uEmW+}Yd_S3w!^cDo{yq_V8QeUoeMzu+ zkAB0keZWbjTE#^V*v_$2jBi|Pein}1@P-u0ze~HkE45tTz2FLscB9;9`O!+E=fqZ@F}r*)|FIe=p!=xVf9 zTZl%F;aEBLcUr61K>hs>L*9p|f?Ii55xZ5*FypReEb`ab?yj(=@^FiT*cJe1?V z8_)c=l>pFjeD|M?LuVGzVjPcpbD|geo#qiyFMZX>wbK;i$8z#?_|oWwwB9AhF=k@sCJc9@2!p}oHb-eLj+Ev--hIRsTUhJwKFz)Ft#4pQT zm2uo@7se1rx+=0f*KX8g9^tA=kQ<`i!0R0ClI^y>@78PmFUwt0ah(H~(r&+hHu=@Q zGT53#wRl->a>*CKkCycZK6#hC5$7aXpHxtKz$Hi6Ilk8K%T3z(it6;o81kG;_Cjtz za@o*dU1F>C3DgO_NLDVFSOD%H)maafOH48Sr_T6)F7bfz$?N4bDwaE!I3L_Ys<(T# zOB@P+s`M|9mEiOHE>UP);QD3gX?F2uI}bHzJiqpR7ysRSQw_)HK&E!Sj&etR>0Wk;;}7aL>oYj8e0g}yLd=yBp#Oh z9csnKNPh)teIO;ig8lnS8d~#e9BTlh2Ef-Lg~+1%s*SJmh9v>=g6A zH;os(%y;j(*kF5qo8~2zXy#%)?fGl69KDNffp3(WHLiNiZWo;geUO@ce{l2-@Lj3d zj+ricHw;D83@lc;i=JiqzGgoU6WvdZ;t%~F&nP+ozy#qrO6ohh&_#A?%w6)6ip5^{ zp^N;8{&;Hn*!bv?sT#Ctq!y*rUn#t(2Q>KeIJNd7?Im)NQF8p9IG$REyjFHW-pejB z#P~a{u(jOlBDnwxNPjXo8m_WVu@l!)>s<71xXNF|Jy$JxP6=&9ej4X0-;>j@^p&@1 z-SHqP`GE9OAgE340LDG zXLe;H#3g%|od2;bmbfxKp1<`Vb@+N>DF$3j9baRP=1Q#xP4WfsAGy*5a?jL}L64X# z`Nw#Zot4Kb=*g8li+d$?nh(mA94oQls#@y2OlWbvCb{Aca9XMJF=_L>`a)Oyg@WPs zl|BRbGo>$E4YtQn=T90~U{_oMFsJl2qes{kEdf}MGQExeU-Srk(UdWNlPfwzD2NAC zQpWn@TwyK1uaxoo-3zDs{9)KT&vS+5tD=m(53aBu`j!97_q&4meqW-m{}$Y__mppE z^bnpgxFn)atP+yI!5rwP*Nf9cpFq(5KOVKqe;FJR;W0>CTjEfcKkNm0gU1N(8s{XJ zH^uJ7K~_W0IG1-Oa#S2V34))?^ZSy6=YZSga=$Y_XYd@YU5>ikb0=*Vl%w?bg1;ep z1qLe|yuhCSoL8X#N}n!x9WLi!^f_|S@2Ah+EEw_+>SeBi3zN(C`zC`=*t|P?6nKNu zF97hn%Pv8FoP#f*$IK1%=SRT{G~l$r4GaUwE_@?!hTVYs%`X}pj_2MD*h}R05#LK+ zF#Nf0KtOSB!YjEQ0ae%E`ZeTh!Q745?fMTxUY~;xLDzNtGQPg>A#^0yZzF_h(E~6y zb^R8a&osCS#nrCgZRo?4`80Ccu3xrZbRH3&3UUpu?<3eZIHwj zxIQx_p6JBS++EyxdrWtIrs$x!Rs6fAul9LU@jB8sDk8Zk<*v`=52*7+{K5!OyWX|t zI}JsQ2iIF;ap4cd&wPsng%5YV7C=Xk`6EE`uGiqr;uMkj-H|W=xt^b*SV#Q-$Pu}o zw@6Fu=_@#-vi0XLx}Jv{M>q6_9_TWz$4c{|gg!8SR*%!JS6;8o%WhKP%5}%`6ynfl zk3TE~D%Txv|A8Euh8{TAZT^!g^l)gFKCb7wZfB!6gF`789$Z(az~=8cG^b7+f9!NL!RpO`q8N3wN#eDU`8&ZMfAkilz<)y->bhFGTjysm>+vbqh}m zbCgtv-wPPB{97uWEp*D01oL-$s3E#3wbsvdd!|#R)=D^6M&iOJ!aOUr zLF*6Y-tI*J1W#@9d+@wIQzYo}V`}q%`V(SE2cCZy)8b@g}IHul4nY4>sR&>rnKJari*!ThulN{t6E7hYgt8 zb<7}hv+&-?hf{hzI7A%Y6Ft$?sV=y|e{r}Pb6d(BuP?C7*VmYz{|}*u2?2pae=8t2 zN-He4%%No{oTAmb4VLfX(C+{`&^jHve)pby-f%vq4LT;A{I`6*%m=aQE6h(gWSoB5 z>T{Mu^YOybzqamjXs-Flb|{YH9m!YBMlUq&^7A*LuhAn;yWc_|DTnNQLbZQsfTf?T zFGBx3N_;~qOB^lz3bVoMpa$!ike^T5ExUg}jn-SlA$22NKZ2UfZ!J7BzX#0Dp&SxZ z=b7sYsKw6V@_9qi2(^v{zgk`&;}EvpWb@w8Iuu+{`<)v97{#Go@M};SxaV$+SmUGO zlc*CM;l!!zd16aXJwh4N4LOtn&_R6l$StuaR0tXPad5v!bzxwyhxN7uGcQGNKJ{t& zeyJ&0E&q24xQo&^VZ3VZL~&~za4Uz_qCbbj8uMGYO4dK)r-#1=A4Jwy7!){5Yn{HF zEP4id*SO0`;LvgC`TGsFEHnwqk`%v%BXyK&L5m-y;#!srDK<4 zIB$mz{Ba0mgnap;Laqk{35`5Ty&cG7dyKOP3M3HF1iLrO6ph(Ul12r-b?bxLW9oj&c%M8 zU#H)@RE#+L5!9jWcyi7v{t~%h>M%bJ7k8Tfu*392E;-uzhC6`EJB&;2L0>v`m_Lb2 zrhKiFT83U(A;C4rs0xOC)L9eh(qNNTt5e2hycz<(os88$C2 zwH`=H3yn4R?><~+Ia5me`eWG$!CycA{r~l2l)VK#n$j{Qmbp2XnQwy9em{MAp2R4Z zOro^E&XmW&lccoI%PBtsoPSEI9cswCTs|sa3PsPNc8!1b`hv^v1}~7>VIMh{%O@?@ zz2m=^bF0_8#Hpq50g9ZdKX@&*`8=t})wXZ7+5Cwk4}ecdt$treKD@i~TC_5_EV zqlf#txZ0{t7T(bL;1W~w$Ct|rdI(4F!TLkZz;y4+(MdM{Xx=xf!VyPjnNOps3H%O@ zE{6_AO+UjA#L*`G`1PkI)GHKnYyd#p)P%9p#T?t$_emu6U|r3z^WeLr#$6gW4|41w zsWD&CN{#dE9vM3mIb5n+q4A|VId(L-UDCsa7l31zLWiO{>nG&c!-}Q6jOya1i^rxK zzom8?296w?uXu+OXsd1~*{vK6nqIZ#8*nQ)T7mlqZ8;Q17>+X5d)oY8KlS<8M`^R~ z1Bu>?+%#=coXm$S#!``%dzJbXnG~B)3;@4 z8^=CZAkx0H7IBPQIrbZRaA>U@4y0#=W4kaHqcs@U1UcSYg_FZ*jp?Wyufd#&R%3aM za{O4u5#=;J7`UqqJHRSH!&aO#2hU!n@Yc+HfJ~|R@=|_ zli%}}XxBkvjDCb|eJCgM;P;~iI@LP;22SpyW9mGbZ@f)T4hIK<<^o@S5+|<|T;u$g z$o*#LhvdVSSC|D{{0Y)m4el^~t;fgrMPK+9K`;8EMh&>qm%Yq*;~)BYk7T{&wkQ8$ z`MRn;Uuxiv#-nCoAFirWTkeIa^G-z}3|9>`uI>vm#0#CUFISBc++*1fsVRRN=eO#1 z9Pm>g>)2<=X0Cb;xun#WsJ9%-RUhL%m-@zdAzZcaAWi0^X6qlnq?4=Gp}!>co!;K0 zU#lves}BUt(;AhB|Kgff+;8c-XVKHig9f69k-qiyk3oaX5B#-%j~{e2{EYO4pO+eR zKJNMS;XO$`dGnw#HvhC^O(hQ+ud$TtXt#*v!VPm(_2#GDZT(}e>bJ4S$_gy~3CNMT zs!y;l&~AM!j!e0#r;Ha<3tRN5uIftc<5UZ*+byo@SnId0eMQv&lV5gKF$9mO*7_4& zl?Oi|)eXP{?2>ED7gcBd=Ps!=C<5@VvwV|FPJ~~P>g@C2l4H;>Ms*!1gmB3-Okb(j zaq35Zy5v5_BdSMD^rHtyd~sD8Z$+`e;(A5GtCu>6ioykmV- z4W}Wm?-CDL9<$*|^t8Feg@UEcf0r7>y)7eumpIILgAK+v6ukl$cxn{)p!lgoudw_> zquRI{M4$NG`f?gy1OL&*KZRk48keH?TzF76zi+}AyvoI|SfJogYC^0rEd3QWuWhn^ z9T%?@`|RA+)HD_RWEbnyvC6^JWWD7s_P0<|Pwz&}<|}luuTUr;c?7K6F7}+*nl67- z_Al@yUF>mR*-2(2x!#Kk4m6i(Tb9T?ikiHb37``Rxt?;D)K) z^lw)=0e}E%_xlGbZ&ul1Z)#WUP2EgaIo!_|s9F|y*Hu>I;!N#}tnZ^TYmp9Ksl8Eb z5f?w?D%P03pZ>3ZVkW+i(#8{Y6)$4nrnK=_UBwOloI$sR39q<{Vb*t?Rt(R;4p)(| z^KDwpRmWbr)K!E49H)+cYHU2vmHz{t4|Nz<*_9jrTKqxCRlD+MpVtWtbv$Hwp7Lv0 z$Sj{yhd)0rKL#9P>JU?cI5&j%WcpA?BMQS@S)1B76LS8?zU|7)$48yUy>Mk01JEIT z#+JV*D<}|WgK!HThOfqz{*1XFb-pJtm+zOjQtPo2y#O2l>7x+&_VfGYz9RLdOBTA4 z?Ukx5O5Zbd09RuEOvP=2qlWUGZ!TxG3||S8BX* z#W(7Jdhc@1jR9 z<-n!j%)5d+pu2HE@m&w3M4vcS7ZwgYh~7q*?{h-~7r6DoAp0wv2iDj(2%k=*Q!r|NQ2DZS$|7@#0H@bSA!{KevmIBcZr^S(bn^!1%She-_M$;}*k06-Pj`!n-nhaN{j(Dlx< zKIPD}&^cYNJB-^KdPS(UhkWUJ{>L+U54{7fr$0vu`TBLwo|bzLtr0i={_9sYk1U zTfX1+|E^*5(X$sqj!62fSAQc<40~PAR-w*iIp}Ka`F#&rXH1pg$Ls9%*TC`hE^D;; zB10{>H@NV26j(_Au*hqXw_NymaD6zm2|!ulHNmebdWrc7yt}b)i5`R8uk-qXYcKhU zYt=#HLKoV(IW+Fx#s}X%#0958zvj?0w%+eJ$?;)gVEQTs>gOx z&E7uP?^AVmE>TA^dk2+@qjhwuHlT%##q1pk?oVo`W@$XYU2% z08^jO1@5_Zs%JW;ps-YOX&A@Gb+NKQ#v!`Xku8aBA`Q(OOUdF6QtDqWTPE+9>eoA%{5*TknSSO(0Lp zVPB`;_6+9M9QJd3+fny7fWz+y{`=)gv`giy9pgFtwvP7(%DGt&I@uh4Ym5TEsm{-d zhu=hRif}nG$L8?s8d%;)4Nt?5z~R?U636;a)VQcUXWC7omrO)&JvD2b{^?yDHr^(+ z_#A|=@!qLbV_fIl&*A5^Hf=by`M%At#+*mUT*`V2IQ$g)wq!1bb1a9=e?)EDkXvH2 zTOL5`d>)S%`%(uQv{WcX!?w%o9l7XpIXTd>O5@~u8V|VtA^Hc$utCD(5;{WY0$Mu( z2L<_B>X~|eMH_&bI8FY%y&ju%IX^7JUb%6Ax6B6Tk3DsH9I`)cv)rKQOU9Ajj<;zz zd-)Pum{ChR6%&#EhP`YZ-(N|)Czc55p}TzEZSGjB*#8S9kJSjjIn{pv-BtQa@^xAgU zJZdi%YWaxI~-O8yAIMCzP-l}@tQ z1NP!1$`}WfJxwd-GY4+aTEznPu&od0U{A|4dS@smd;o`}HBR`*?Ag6g@((zF$>$w8 zR}S}u&*#6q6NfE_D10?=hB<4r|9S0&dnR}3X8jwXG<=8LWhOX&9IDOJU?+DyeXADN zNFV%NM=hE)h`Vk@Zbg1y^h9vC`|$$H>t*^v_X6CvMK12L8W_yF5v8c5nSWoB*mhKIOhaAp9P|U!0+YYC1Mwjjpf`?;D2)P46Kiw`<{YFCQ6^T z`JHncEcXx`0xmJbgcT_7S3I3bK=0N zYyZ7I?s49rleBnF@~arwaNeyyE6JP#DFmB1?>pO=lr9< zm!iy{;F56uGuH2xnP&Wje7|or^M?Ig1&YTid5$vAgFDLwA4*L6{a+~aF@i%}Xy-c0 zOau3U3okN1bmloVkiN}@{yLet9-IR%Tn~;7Wqdz(k=nWYPNj_T+_=d4;-w!0_jUQ& zbiz)Rvrn4AMIRu)LY*Juz|TcKPqov3-HIcYr|tyqKhDLM;W?Im4AV`EKezdN=Wu(@ ziaSuSM4kI#|L2l}tpBak`VqNAF|h0Yq|W{d7@o%^AMUF+FY2fVmzhgy(Z@s`hy(TI z(mikwrVgd0jku9ZwZ`DZXQeN^uTHqRRR8*(P1JFxYy;cA;8IPG9XgRZPR4q}rLW7e z;^1-AF&J}j;X8dVg%pyrvVJu#I{|t-rJHg8ugW zx1;to@Vjv3B;yaaV|%)iE59>8c)PzoRPKQ9O7sq`JwBTwu$`Sk?U_C0MpeoYJp$`3wd&aFe+?YY+Eh<`Ww&QDQJ9Z z`Es%pAEr3^Vcmc0Xw*y^orWk0JU2eokt#zAw=abez_Yn&x88%CUEC z-q`f5#^@^eKYwh~4YpszR>D_AP1VB{Jj1a@>>t#)R^#v2OP{m#>oiWWTz=g0uk`PU z*v~n-m+4X4Ebqstw~oenlcPS*WQ$Pw?`?dD zqrdH;;Aq-n{#1_chJS=M>$Pr}@QeCc{$jJ%t=28(*j`e{c=-a_D>rJ!~Hq^U0HqQ7x8*N>X{spmtw{NBms4+Z|V>Y*-4SwHpY`eti_xzmJ z<1ssz<2`WRqV?uS=6IFmLf7f_e)f~1FUaaXvYOW6#}%H@WdQfkTL0V>AFIW1-_lxj z*X93KNluG17Cpt z(qqNHuSj0O@*97SM2?LU+i?%4KO}r1zal5QBL`2v`?`2Cj(jXF*`k8ML{1)g)_xLA zkS0azM@n9xvBv-{_I+u|yDb0mi^g7O)N;~(4*JRb;+&i=$GEv~(2uC=xQ3HUFo>cB z{_C0CY24NMiiJ600auw1gytZgeHT~7W!azGKn}~|{#NE6((VMU@N`J*qIA79J*8j^@n^BmSvN7WT zuEutGa%uvwZbx%<3H$`9se0|5w2Z3{L|!!Ysm%+x`c(98q^2pRVfj+7z6QR%)C`|r zR{bbA;Hea1A;)m_WDOEOo|@xxS*vFmw|Bmu*Qx#!`c`VeWcY!(dN+EaXcp>j4&*@% zrsscU{y5&FkNJvftq;ppA6YE`p%GMT_c>Qxj-qO+)#J!<&$ueBZ+UYO)&8wD2#32W zf4*Jk^J}WUmgC2>UsK(wJM`r1s$M{U8r9jo%2nNH`c)n5JCdgu4qpS+XF;cMRf9DC zT}kz<7w#KeRd?%ut@n9C$xX)BtN#*$kW0>$m_S_{)$i2n{w*%~hWRZTEC=n9cUxYg z!S+j+JPR9*aC;#Ty5#=WchF${M=m)KJqFa+9o#mT*ag2RHTpkK;wSXeQR8jjNP^^8 zmv|TVT;Us;KR@x120*f@QEO)&|6BA5dw!Y<;p3Ei1vqZhq_MDr*SSQ2>GMqw%XGZ( z4dFqV-rF=294i<9P1>-|D4?cY#&3^*WUqg76mwb^e@t=HcT=}Q z4>ulAv)YK7pK?upBC5jKAiy_WEj9UEujF?bVC7MSqe!q0= zNpQQV1u^?0UF>q`Yt$mNIT_Kq*pcS9X!Z4+SlMu$7*OjlNi+OU^oTaCUp}8&?-Fd- zz~^1`PyJ)ZQ|pH)4s_Aa&=*OqzTZ9iq!z44ldGa>-B&A2N7{W%4Cb$EVt((pJ=h^LDC0iJf+Cv88NyZA^C&RdZKiZ zOVE!iePTF|y9iqzpnbCOc_Kv!cu_lSr{%7)>789d;-_}Y+e)9d>3!)a)?HWmAqJt8 z_UDO})-z0LO$`-Ilstvn+fSjiKvl$AD0zw#gs|}or5Aw{>MC;)c%pQJ&6g``(I-kB zifOs`Cs(n^@--crjw$)pRZP93?=vsXq7GZ{T*ZCp<)IE>AqKmObD-N&$1L!AUB!NS z%)OjCw3c`5qpqSK=DXDC&x6aiX&guNgT1UjwtSw-5m!>D@jhMoB;z@D-l<007hU=7 z0Ao_;oB0yVUMIXKTVFcy`0we;_t1k{7IoU(!RUn;}0a}8xoKX+xfO3PmH z1OKNNlvSfoK>S_y`jw)#<7UeE{THPu<`KQ%TNr^|sjuHBIn>l};%n`s#aYe@e;=p~A^&sGijx}FXz&PEmu>BY@P%P%aBn3up za)loQ1j~Vs-~)Drz!qK4fmwo)%>B$2W-G4qBo6!t&XFtl9zE8=BLb(}72K`@Z;}I> zjn7mt2=*cl=ykaMP3gymzk-8a@4dvC*t0q4 z_XlOajv@-tQ>-5&`((Ti97NpWc9-qp`Q*^sx`18b25L<2-+3H5f3_-8Zs0MS)!8C` zPV~^Y0sc8WbOS!OZosYE7G7}10~{KI0JH1g2EHVR?tvl8^?%UjOQEsI_q+au);kt@ z;@Kfp3+{0JzQyO5L(ihX()GK{*H2zSPrB=uZ`|dOw8o1P>H5BIK8DbT=(TZui&5Mt zyblDPT%W1Ff8Xf`q}cU2=J?x+U+OD;27T0%W;|L+iljcfI#P zj|zwM*Sdd)>-7@yjN-4oN(M7?UC&nI>4e%aFL6CF9_k``fZ&WO-*G*@GrpA96Fn!c z$KdBQAj_Wd++Fu+dVL-y{2=5sT=&y_o(#qbg|6F5%TsuMeyW?V2Y9E*%XRxZt}DiZ zGOs%m0dUu~0QYnDMycWMOxH!nyam4q@5k2PEW0nVcM0aDF3WNSGGCYR$CTMFYabnq zJ|^=$_)%Q=oAYE4+>5*B?Sh(`zjrN%cG&YCFixS&`*811 zWe`_AUHs0-MW;G+dpdr)%o#BcO|>Epa|e54^?0#os_8}WCD=3nM5+^Veb_bC#QCx2KYGk#H7}J>$ud` zDYWs2k{tHz9-rEHr_E=*>B#$}*7-SJ&vGBB6*|^>eJOjJ!JAB_G`{kh^g9^uCG`ik zPti+ku8{iOdOg^i1wAqK8{#tZyv@M#ms*4x)PaN^9lZI z=L`ATxX3%zE*JfR!}a4u0NICj>+xUw?qMB&w#}j1Z}!v+w|otM7}XnxkHfV`Yq1?Q zh#5z@>S60)p~h#Wo%lle^E<7dyGdLGOICiy;T;e_sU>E4obWd5TWGa)io=^E&NFc) zwfVlL@JizcwV!1@reWjlQp@RYgYV{PjmDr~X^r_x*fS0q{i=5U^CpWvguEy%eI562 z_ADnr%hb-ZcrkmXThc#zyAMm=#?PCqRh))A@1E^{v>wa0JU`du>j#)Nq25-W-z%}+ z&=wpsE)=~>Y}HSHO53!ZYM;+UAAz1Lye8wwc#4C`euj4ah@2&RS12HSDb?XD*v=z-{AYSFr8eoOjN zB=+Cu1#0!@<6bx9n5caZ>y`9uZck~&vM-q={p!75&Y_==g527RgQs8J`?}MHaY&!;vv*34u2~gl$ukTS!BcdWmyQ1x z`rbH!o^JcQzF_Yma7{RD_fzQ;vH5)Xb=+^*lTsDwU*jzLOmDjKdjGBs-ki10?vb8s z-a=^NE~ZW&dJT4P=mHofdB7_8xjAI_Db9Xuo`6>+&tp6` z&fZ{i$50pR1I_W@uOQ_9!JIQ%>e$z;7JmhD>zp(B%;CeX6~3PNFC-sf=e6Lk$X{|U z36}6q;WPUEow;{HXXoHt4Z>c{xl;!zz@39%p-_u+H)|VK!e_GmJqR5A z;hbNBo_7wkDk!Zd=bQhM1B#h#oXh#o`~B!I;Xuaui}4`Hc@}viF36MG$7dc8{uA;) zTyU?PzKTEOz(DxxxL~6e0nFw=*4_Fa;=)7BACQ@GIhW0aW# z-#QoNTAy7;UzC&H=AtudB(ZQAWu~I1fs1_IH-os&>0GqY=Jy%3TP^vAiz7Y8pL%;c zWsbAnkm8Hr-=NGO#iNYj;wgd!e?j^&v}S7ATrOS>ur_tpft$l6h-F_yoqr1s^rM%! z9xE zM;p)+EqsW{H$FW0Y>sYLZ1W&$8IRs-j;?t}FBH^r7S8+P=ZD@(Ek1WKR;n*=IW_BY z*1wixhocvqnt`L;n`7r2->CTkc?^0?<=8!17bV~C>#MOh6+3k;HLILEa|g#3T28S! zY5gm)ZTLN?S*QaNKoY$Hxp`_@ig_W&_ceY`la6^u&f@sF;P+CKpMQxzX!D*XmFdR6 z!|_+9YM_GZI?Zn#GhZ8R*JbtBjPz09yhQ){ea_MK;y%xQoBq{h^J~!)Jel(BmrL7( zvj6y}KX5E+eK6Yw;Qqz2q41B;Rvk;d^EbyXF@E?~KhF{yYk9OS=1=6<+wi5)mjC)J zEYD4wwWj%v864Ya|9*3h^)|(`?9Xq~W5wi0I36=z{wCRcg`CFmq1H#f(f94dFV$2gwr%}>ekweX?Rx?R@Wm$27~)@j^( z;!IAI0oY1w75AL=EGLXhMr$=TkoyQH&Xd^4@-4LH2je6s?lO+#8ns7|eE%yVGxpv= ztAYEIe1i3K&?=pd(A}K)3%#NAkIH`~n>o>FeGV%T|38(J199)76|(qCaRVp!HobGX zUL)tOmb?Ob@@SdOB{_KwI4JbjQ$K%k*Mv_v>941MTHi1y-?jY5A1eR;Gl!Gkn;!Bz zjukOZu2($9RkWlQ4b|zPqs*!v%Ek>N@e6BheIu!kaTJU?h>P)S5 zy^ns<j{^L2TjQ>}) z89Z2WiVc|jJy(0st!XA~-iL5?8GHitRrWWFE^<2FMeBjhO zexG-BJM`?-X9MgWQj?2$d}_LXo~zm0_kmf@6W0t=;qRA})7q)jBV2PS&flpykgX2m zn)?A9OU?Il)HM^~)1^9po>~2@^{>~#PT0d$`~LVkrTiYV%vBE)yvvo(Q=QLCs`mN# z^?hJqa@AdI{#mcKx}sgKYCU+rRBzmPSCtYQ^4=S$UTXlZ{m50l3S$D*`}5nX+i^dm zhJ6HccI|i4X8|FN8q9y^s{SW*+}?Ak!PYBR)dvSwYFLFis7r2Z6M?BaHRgfK;F1e4 zf1yTgXW##6>EG6ks*M_bK6=vcD{l08=E-wlV53I!E4kzW)}P*F{ogL>_g^>Jz1byp zTduol0t%U2Vv*FGUho1n0q=X0&BmP;9+dguny;0%>%t#h z;$Zkmsd+L2sxFahe)ndrHG1nW>D$IWKrN<6y1323sRgq7SuXw_0^`(T`6w438%94@ z%Ug;!`k#wm0Nwz#NE@p7r(FDCa1yCiQegY+s&nx?1y}RRn&Tw`Hf>g z;{s2ueqVL$UHG}E^{1CL2;*W8!e>sc0(X*gzl)u3eGzST-gB`b;0#e4mf?tt<>**u zFUdn%pK5d$z$DZ*1HdmA{ZTO^cT(FH2x~6-HvE^=u47H%cSWUTOd7zbeJDVkE_x35 zCDg9Av$;y=74ZGLil^QRWe%>m50Vtz1;DckX`~b`AWK36Z<^6pMXCmMhVi^Y9-z z@Gj2Du6QwcO465%b;A`uh}TK_6||tF-WBhMUTonB!w=_*OwZ=PCiF_VBGl3k6@36X z4Oesm^d%040f2Xfod_~YKcn^i7JiD{2?zC<^yZVUa5Qug4%&HH@)PER4C>f;`p3d| zlGMdfO&mPI@)-pxuYX#{!Lz353CR^ysStUT@RpBRmbJ0o<@^28LF=D#`LOR32Ng>_ zVV=uBOk%l#%^bA-&E@Tq8kBE02tTR28XH~So91%~zPm{OgD&qB+n0lW|4v>Q_Z{ik zR6LgG6VtFT2;azfH@TMzCS!Pm^c!^j;*@uXy4*bE-sJvo{J)$ZdY^sHi&erq(y`Zd zF30=@!rKQA)8*7aC*_d!@`+w?%H}=ZjBse6dYxlIqv#)4eWA>)R) zfy?kdbLczyb>}|e20jKptIYEyPAdGjfjX9YUU(({^-)OLT#(WnS`CiB8}O{OjNKso zi!C^hy8-)WzLO_f=FL)DcJ8yT{|{Kmh1UVYf$MJ^9uDdFeoV&oTVlPUq57%fxX*R{ zP@^DuhZfU2`cV(Y<~sICFj8w)uuvEY#frU0ff( zkJXEd?SB3PuJ;0Pg2X>>d7|DYnUB&NBC_Vp39i>Xt&iPH{I-MDfh7DUz-e~jp?(@yZ7uEHt_P@+0z>S<=c zU+irK_cyiG_vLsS;9pB^uyX}_Hm6Ok@pJv&Y8c^D%VEC>vbS1pU-xWGEw$cY_FCbq zNc{j@RTmB)1P*cP+Xcoe3s?3L$I~gPA7Iz?*lWi6oLZ{2kZ;NBy+y%Kb*bMp{{6^o z`S~#?NG-PL zmD^gnXeVc5WEn^O2kEtIbZNrmr)8)u-D7u<4|&z^=DF}=}Mf{P1*x) zoJb9FTDoKHu^fKYe5%`l50>JUy zEdNHo_#6e#{FTzn2ksJkzo_hdGyQ=vne=~S{CEH@_vgyqPp`eU@0sG8Q`_N#()Y0d z7YbU7kI7l=%{3qLdf3k8&)YnfHYr~6ta|zWqhw(J7i}>vCVPu)ZuhU+XO_r(eGzzY zwA0Urct4)IQ7o~vTjMLw&l5dML9TmIE$ZsSqEG1?-Gk~6G;Y23QAQ@~i>TpW+t0lz zb}nmr2)tePP%C>bHFto|D(j2Bak>Xk2 zd{A-8D_Ys}b->WY7;FgtOkA_w<#VC6EXTjep7o7OE(zxx_J(4P!Qo!jM@jUYJ-Y{R z_!$Ydj0{L0yv;AO_5%ojy@%0r%UK)Imn?ZD_-eU}V$A~IvNs9-0q$zOFp_sN9lxvf zr^?sHh3w|%OT0IXbJjii{j*J5M6a;dm%D$h#)=QJ)@kE5)2!n5-z_gIS8oxMi^ z0N|dNnBM03{F0vS@NJ3Sg+4#-<@@SA9k)%`!M*n|e~C8=eh%)v5Q7@_PBK1IA79@K zZAH%~_aCdl{IMK513)&;{@ys_p`*>$kyCxw+4FArl0%1_u7Neq@#nUF-jQ>@u{nMy zhQ342?P8pfP^q+5-Fge>o>HPpH;1h6i*sN6V&;Rt?jd>zdT=@Scj%b%@3o%vM$YT5 zK^x)!<=VL+?-1)P4*7imd1G|YRx9Tp<1XfXZoQ^K;QvqKytL`@LBF>s|1g{rIQR(q zO*sEn1+48Md`cCRw{iY77}q(t7dQf(zZx7u4hAjPQegdX9N3`6_m6PF!Qb9lzW1*j zSOku*=nv*I54?+hC@%QnFEKDom%Og=$O}X0W#qt_;QVr-?1p+C3JkLxU*ShM7jfV) z4A8i+6N6y!|8&Sjp@55yw!bG(h5HK^Jz_bWK-6+)MGI|C7broY0vGo;ze&K)%@m)b zHNb~cW}Ef37VD2K`RUB($XRgl&p2;T1~&F{xWs%El)=aNI4&8A&l_c0&>PAnM|>v!z%iCfE4dQ9Tlx6~d(-bpF8SPajX=KEDfHozcDt`;jFZHrN0>i3 zGf(aN|KrlfEJv0ZryKppT)J4~?6=ob<}A}A%Meelp^W9xxa@+J0uDHhI(LI>&1LWV z{;?UqJr&!rn9CX<)KI6t&Xt!*ty|Rs>O28lBrZSt85NkQv)8-Q)I(f;od#e(5N;m~ zzg+$e@~YH<+QB%NuY&KMI`lCf)XL>c5d@=-N4xHK&t;N-Xhq(KI+RA)J;N1I^bk_V z;V7u!ijfMsznD4{BeH21SKO;$gbkGT&oLEmp}$1>KHz`hir)Zqr1X;j6mw;Fz2;Vl zA5Y?IOw@wC`S&ne&Tf6xNwnMmT3}&(z~H&b7ZRZ52yWgIP#Ooy(fH5 z>Aw|3_&G;=OAGd$<&=ID91f1=z&}InUt%NU$R@Q7^r!X~@E@&A5{IJ!uG@Y|{Fq^>e4D(C2W zfa9qZW2$V9{%L*bt#@Id%hAPBJG$3<)LJ9>=97Nq=-OFWs9NMu((9%VIhwKFtQNh+ z@3%zy3XDh6@`M7tKj+v{m)tvj!dPm#ZlxMeId--AgIg@;#IfhV?WC4N#9qIB8^@+w z|3^zd%Qd29;j+=xybcFtjuHfzi|8m;~qAJEq@lDj1K_qOu%2q(Ry(BX@}3Nib*=CzHu+wfml*D z$M)A>`*_;!_lU(t!cR`y$#{aXG1#Bz-?<0KAZ!)KCRpFfzdnyCHp9t{{$<*R>s@b- z{cU>Iw&P7NiltTdj?h-%9M0o-Ne@{Vw$fJPig5f;Jr-5a7V~>>d=&UOv;~;k1jp|| zj)OKYSoeT55OI7GdZ1|YQGGgom?!PthjdKOfI%LD>(qQQEYQ z+66ZO@xK!BF{J&IL(ps#@b`ULlFt~vo6D*6*+ z#A>d(0y#_i1GxKAu6jg+NPX#d|M{tU8|N!pYW@em~-rXPKuLG|hIZPEf@9S#&d0pCaSPmSvf z!PVmgOYp@;nghF0K39K$eU}{K9U-n>X#FlTZGOPj8_?5E(|vzNP2e9boTkq`=%Ugm z(R2Ea%Wk9hQDb~O*BoT~&Fi8jZh!w9>7%y!>?5!_oXs`Y3+89u_o@4(h4{}Wui%;| zk;hM=b-p6QHSbz}0;*To&(#mg z!FiMFb8-H1)$0T&yQrP&75Db{8dsep z_di#y*s4trQ-hr+T=m|9*WJ2~8W6|6*H!n{%@;JN~0ECCI`=PiMLfa zee?hF2#Nc&SVQ#d$Hm6c_OkSCqd$#W>^|rc2l)NWmh*Ip0oM1>YI717-!V>=OUe78 z2f@V`!bd@^=8JLhw_uE?))`_iojT3M?|E1@0FPS#1>n%dO*fZ51myf&d|wz#7Go&v90Kzqc*$ux!61{{(g(v%!le?uWQk7DYaYP+r@525i+$Oj6!r5 zJI&`uUO7nv#V)p|t-tLrqi@m0y6Z-96t$aP>7whc55B!Y3s72IbhZxOo)w-Y0+%lO zGI%JGKY-!HMQ?CaN8#rcNyX$ ze_P*jhtJQ6OtZXWhxrIySr;T%|wH?_3BjovS>+ z_+p*Ak)w8%{oyl{zBm+2xr%L5w9uY1GEJ4DXIEid70O%;uCS|k&Ge?s;|l2P;VNzu zx7(;ml=&38jH?)7yt9m6b0-NustWfd%2*GjtMH7k5$J3BO1bd_#V-X;h%284J)8sk z;@;)T$E{XJEeDR$z@+q3TyB1^fYv#@_L?g{9QjG}lKBsC z!1tGz8MlH1Hji;-$6Jmt@DX%vGEC?7(I%v=rzo-IB0%PS9Frbr=?GLj0(v2 zxxx(kx;SVYLs$5z=^;UkWlxm+1oUbSPPX-|aDak3PUhgJhkvo|Cd8Ly$b|f-ev`; z58{x#nQ{apC(wS8_Qa^D}y3e2!f9 z=Mav>Z)yCcY>XL&2UCEJ)MXENSA+!N%S6RpcJE1U;2fVvvgb>>L%V^dv$3ajB~MQj zzLRmMy(5elG+;?@E#{T^5_~*vz@1v`F8<*YaqpErZE&yHGoQZeZ~R2@-z&zu#`Q0< zdy!}NMb~ep^>ccsz@H#}*~o*+{2JU4*RR;P7~TbXZ9UEPont;P&)3`fo-|uNaGTh> z7F-I~XTJ56dbg+nvdQ&9O?fGMcd23MGuPX=L81?UJK=gYSWea(XZ<0)PQ!VJy_Ydx za6M-rD9)bwL|spv7WWswyR@syz|i%0+~#cF7tlFfcb~WA%_vmEz3YA=xG~~~hYsnw zeE}VYJ)e))&2(t?R7My5wyWQl;2|z^nd|bi`DDDmPtgyq>r$-)=xOY&!anS>95ee&v9WreolLgy`}Icx$qF{-STX%;kTmxZ z6+Rq!h1AlgphI%_B>0k2%X=QAfIbe71V1OW9C(3296k&D!PM`j<8t^+054L%>NWhA zSESDYyn)pBir0AjRSw_sk)9Y+@9Q<_$oo0#2=G~GsrgbkOIq*r+_cJgX4~k(_0|Y^v2Mz+u}s>kj1UskRQl7|uGfRSgQX6Whi09RBVj zc@XxeRhCQO@Ng}x8$utc+_3034kxn}kdk`U=N5-cz~iU?$J1HISygsl{KmO6bTi#? za{xuLb#KK)QBh391`JdT!T{_R<+T$714TsN* z^Tb|jeb-o@E8rD?Q%Bz^#`3KL?CCgAxRrmYz4@Wv*-IejMzeh`u2%`aA}yGX`#5_= z*5kTF>xEDHhrOJ&(rhxHmc69~=FFb)9B8GVkMcSQZAtnz*7!XHp3Mhoz1HoHds*h> zr^~@HQ|{R|r}A1s_@FJY^^TT59|c;p-OhRJm5JM|c@FLLIT>CF=3TT~F>;ePNME>u zv|1eYS+Um<{yy5LSp7$zmA}t?Rr?o!`^TP#el$9$W2-HPIBdNhRBgRu9NvR|4FJ<9S&+@g#99O2yv#&C;&B$e7%@-drLW@*DMZ?YbO@XC8N$j7ZR8WVA>+exXMgSy8fE_QtTU~LH#7u>Y0fe~I)`qsb7R&@sk3`( zy67DmhaSY)$;Ensmp&j~bLY4RIeWO}bwa++A^Q&vYCj=*h1hv#InF*{T%AyJ`&@GJ ztbZm5jMSOZH?6@L>Fe5LI#|wB40<@Y5ZoTl?PNT%;57INI9J>wGI8agKQGLkBn3K! z0S-PZyYU14ICs@HF`^Z6@KpGLICmvpFXOy8cmW)kk3M_O zJ9D7^j|09xG|$gZ241zCYu-GNCHC*(l3yq{lMp0V%OO4K>-kfJ-kqPmG0!s0p=hUAT0N@dldwJVfcw(gt@KQKQ-$wm-zB z>u~O;#+k;?DQk}Xml_2U(B@K)%er=#MCVXywEj)$oA&#~jep8zL*;GA`9<^(_~5zh z72_{AtQ{_awcjQ0fZ`2m_y_)0F580usH~gTOIL2W8*2E){MqHHcVr-NpY#o8$pT!* z<>!GPLJfY-x%>`4FOq_9l*{k3e#&|rpMqRI7IRyw_w|DEZ;hi@uWh1*NiJWqs{LKN zT1s95y(nDX0G}S!o9@6B#d!XxZXxC`Tydtfphbn3Fb@4yTrmXxAgVKdDp$O0^R7BV zVKG-Z^+So#%JIA zgvw!696e44``^<}t+m0l0N96me1M-c}{+wS2Sq; zFl~kGc((LABXC7q#msx=-4AngiS>bR(R!@z?{c)JPCyf<)0Qv>=p4(FH0+tz&}PIe z@;P=Q=619RSm9wDy9zzhw8`h~#2&EkYa{9{MQ?c9^wy1PCpvvB$E>%7HmJ?^)V&;A zF-McKw88r1IMx7tnARJgo#RCS$J2WAcXRw?(mzX%PfwM1eb!= zN*G8u`5b>6ePy(^0zI=F{~6~ETB8`?tM_tzx!`e1x6&HLa)|C9_w|j{zCMx2vtG4T z5?&HN2Pck4&Wcw41RX^33OGU03jDP_Ibpt1T0Y`5F|xPe#4G4gqGkU3l9+;?5L)Wr zdlU02m>6m)Sht4>0%LHZ%YPI_|H<>;wOD+OBh`>MP5>Od;}$vg;%T=o1E zQRXDK+y=d5F4f)cY5R4|B>kAFw%~}>S{d{ou2w10RAj?vlsAze5LB!aw4Y9gIhRP;n0*?RSZt;0n?~ zf4-df2mTW}Xy*}^_z>r9I%qu;E@8qA9klhuB^00X^;SAmCA9q387^@w&Us@^382KPBr$fHJ5&s7P1giF~)03x*kH^ME)jlsM{-EtI)xbjwFRI_M z|GcrKlB)fDL;M))^Qc~gFWAM614A`Z$|*Sx7uybB2-R30q4aHg`WH}*)}tQL;9~EI z3f1insu_>>*To({5en5B;(s2hVh zmy1SpAzVszc0Q1PZ5(i^ZaZEmSNQ{kM5>oCw{U1&<%@RDu0LmpI2x{VmAAK44h+>> ze%w`_jlNx~ACH1AS6PM+PVxufWx9$w9K}J^+#oiz9g;uLF@IS^`!Vvr>L6qc`T@}K`Q*iiaQpTV!vkTTAdz4Wsd2vL*JwI$c-%5F3L zx5@TrS9X@KCkR!d<_XDXlz>amf#%(1Q2L!Kt+8IcKmmBfu5_-=s{-A?Kal=x<0J-* zv*}7rcjG``@L*kO|13#rZ4v(yfZD=)G7e*4gvR?vxzaY%^nl3$l>x8##+7Wcb8O(P zuM|k(N}RON+;t}hzJR~amAr2E$Uqvt99MFu@zw)#01R{`y{;5Nq9+Gzot8cd1m`)h z&*q!Ohm4;a)Rvwz&UeM1*gZCA{!mwZ1#%}G^!3i-7Rc*J4GjlnkaPZ*JjkrI%oUT1Znfro6r~$jv zWv>7ijYAJ$j^VPOJ6XY^(tm0CLbm1iIrK7k-7af;y4E(h4LdM$j*wN>Yhu^gItmBmcv2oaP z2(IJddCnKs-_YSZJ9mZEZZCbv9R{M0p2Ocr+vr(GNPo6*F2j(k2e|gH>cLy)EpLnb zBs{kE(w3=y$nZE@f7`7y4nf#_;jZ2Pj583P2%nd0cbZ}yayk6o2 zlN-Txu5C{{=Z4)CrP7S%+I-;q_fg|Lz_kg(ZzO(b_(@&s8?DDNya;}N*XmE>FNFQ~ zv6am&IgHxPGS||-KZg%sAmv)DxA{uA!JelUdOV#W^X=xyxwz)zwPx=Y_6l*{a?LYa zYH*G{>(g@0u1Ee@=B?;Cb(s!4Irg-cB{;@q>h{+5C-#EKLAeZV+pXxqVe98}8Al*@ zBA*{PGcICWMDgERJ}`1528|qk5DU2TOcxjbGYma0d=LXIc^>-e0L+Ci^!>%pel5b+ zS1zRT)rD_ySnc)4u5zIuj5eazzz5@ks4bTK#oOQ)y8u9)OGUqVOOi@`T%fh$yiexv z1nev6#(ym5>^0Yb?Dgq}V-;MxPv)sO@1^T@B3H>?TlCMSYq4CM%U%cceWYuy0$)-5 z@!;&Ft6^^vUeRM}xcN1`|54)-ho{PNwd~pSKK~vWcF4P@_Xgm%CM*DF8$34kgQH`HvbHJ z&j^-q=H&D`VA)IAoABiGkLO*NUWGA4FZQ$sZ@`xH5`Ql0eTZU#^a90eJt_LjtLP0# z&pF2UHQs~JmDB(Fy=va|;HaekQ9EV)efj;!o2DoEx&25#>tmj+Sf^$0ab$^cvsVFY ze>F!I8kcs>cJ$P9WWENfKcMxfqraXb^W?Gn@k!dKHr|{~@@o`G(H5at2&qYa-Af6j zv>nS=JC4keQ%1?3v{T1b!cC6+3g0sAv~wg!23gPLdTrx6aVC4FuhA487ae?wJ?jNe zPnC!J=G(7ePh&96UE2BQdT-PeHM*xK3EWVQ((GBTfSx`)uODH(nBO6u-=4jDtVeSi zPkH`qKc>Au^b{bA^n=_EUOnw^HCGOhlE1N> z4;|3Q;x^H%{J!yn?;fcqVfHk|dP|o0JnekpnO}lxWP6o2k3Gf3eKdt?{d=r;B)$l$ z^Y7W7pTDX9|Mg4jFVCU+8fkxP8)vTsfo^IPitnOn_3UYV%^h>8=`8cD`|q#l5teiJ zr1VPkLJn*&j)fP*`^rJYM5S+{21Okl@_TT@hx}gfZR5a&@ofL+uwq}wJS}>S)&Sqn z-V*><$@*z?_()q{U-ENIk#|L&`fZ))Pk50zL$9N$M)rittGyf3;K&wc+B zXFdf#sr+-((VHCs!G^sf&8OaMsnpHqt3DirYl0k`@|Yobq;{R6!P+}h_hcpao3(EY}3dMLK& zTn;am7Mshz=XSqZ4@CG#aALW0N8^TsJQgg9k{vtv&QQB(4gPOkG0f6Cc|g|czR2o6n_RNkdiIeU^CJf7pw zc*`4Po6m|vKG!klG`Y36y@*4V)+3bjBOWjgLRK2Wxv}Ham?GRRvCj?O&$*`C3U3Pi zDV+P1*cW~ZXtq;x-9w@+JoYw%} z1_%5emVC%0cXL2)UqWQyeBU1v_`>*9`9Dbw)!Ja z@N&V6SeH34qeucWuX2I@_1TYbU>VkXE|Ag_AxUwtSyV4Dl7|40Px8jrQ&rdl{0a`L zS}UJN;a%9*<-bRRkv$nQuk6RcP8wWV#)Sxi2RYapLNga(oGiRhzt^g0GUlfos6}3j zi%<6XSevyl<$Erk2tPUp{9c@rfG!Y!iN0a{{gMjnCkcGGQWak=Im`H)0gRV=3Qr01 zDDiKhw~$LV>DZ?&2YSP&%cWiH{Rwop0-Dkrtd~BJg&&klUsWuNzkphcK5JkBkf_ndGu-eta_esq~q*dqpOO>$q$r zfF;z3I7Tlndsou3!VhZvtw1KatGR5N&4U{K`F+`r8yD@~aSAn#G(EAry`-$m*HU92 z_@KG`$lE4~5s<2j_Qp2#g!LYe?pz#pHg`j&VADRgt@i!A;VurwIAELxbj<31Fr5xwbxp1 zx^gjk>!}togA`ZRm_NK`uKDny`6zIw8m&`YGJ&HfnI2VhiS>j<`&(aTjrI3&bd>q` ztIZF|(Rbmiq-sgspZ-%mN2emkMb&<8E^5ACss^U>B#xP$M%9U%WyNU4vFNu~3Mz*V z?X_H4>>RbHBh;`Hh>{GPO zf4^c!8y{*LV)-pOcB$oW4(Bmq!!^F!hPL{AuGs6x>p+yY{PDP+kU93_!$L}XfVLR# zmSf8R+M>;9o<$Rmb0*qlRy?SbA?ZoZ%g`LC1L0U*-53!4|!>n$|1E|2yeR4%z%} z9cnduaiYxTTkCEy-8Z4ONa;sei<;RmC$9H@Ezn)*_v3{5siY6X@+*n=!GoYRz`pn9 z#8lI(R{KA1VhwUjwA$w{CIjdLqgBmJzfP9KCCGO?t?=_kNkSfwmb-{JJ&xz()z&Mv z>~-tYN{+i!K<(Rj1neH+8t^c@6-EnMaMxV~1~=E{1mngYKM zeP&!Ru9^!!EZJj|%T>FOOQNS?qpIL8sJE=31ChJLh}F@h9#Jrd@Qes^FPFOJ7$wWl zfqNATce+by{ot@~=)h$70$nOgxgAVFz|E=(yX3Dr{;S4&6TI+jU za)Rl<2VX^RrAt0)ddYyAd?)`2tU5+B2NK-H)}YUvWXjjdiq)jq!|(ckpD>c_y1aEarr z52E@<t^((j>ehg>;-Wv8-@m>c0-7%R;)!|!qKs~pp8r>pe)yc=Rm#kikxm7gPbK@FG0u(ir!al93H4kNSAG)~K5A0g z_r8O!{M3)Hn*Gxq)MR?ME6-E#$ZNtUGCy?LJ_VhB$N~TTD*Lxk2?-oH9=rutHeT?z zJKvY{XTCJJm$|Z$$OCcUTJ%G@GSfrEe}o0cm35Wz!oU~AZ>093L9Q&*`V|AO8IQem z74%LHd?r+%`zO27?+1wUzKxuZ;rnr=FIdlD!1pVc-VEV_18Y!3;z~~y`%>T&(F=?> zQ<@7d2M5(wF!fhgviCH(vDb4jYxdZYw+?hA)3Kj&5ID%QT*>?B|KZ^AyN;0) zpRX76I!h))4@e({@gRcza6fh>DZ!51{VE4<{X<9;(q9pV?j-jofSg?Mx7O1YeAfC* ziU*>2R`^0{JL%_&vxX~~nu8NRRmZX`^5-4FpTQ$`MZ;v3zGevr|J89fyP`_{y3gg{ zGPR{vxWWbIM+_Rj+ZEcnBKiQhKCbX+^lb<~XrCNJTDyYvTBuONAx-18f7=zjXuiZy z)cU9kPP6-4=x8mbeca{m#axF&J&l)@{~o~g95Rl!%a?XP8A(dt0dm5UpYZ#Z2d@&) z^Gnh{F;oOY@#o#AfQC6P&%fV?ofNNy_@9P1%{=7EyepfkQf9!G<|9Io; z9QqQuP?wwI^O}DG*Vg46?koNq&xy+!iXImZ&4-W9kD(q(tk_{*gn_QdXgaka}@Y4d<^JIsMy*0Xm?08jW6`QX92tP@mb zxP}k&hdOUod!6thjx>F@^Q*=;4xa>|w(EQbdLkr`fOCQCv=8eshx>rz?>fCF)Q1O# za9DAfBVTr%4)cZv#uOCbIv(bE3;{RRb^KHfZaX-9FLZO)@p7U2XM8Wb^=CY>R=SQE zx^cDV@N-&s8F3xHk@V~N!rw5zr|ZxT3oD0>li}KHTSc2sIlK)VaMyl_-Rr`}{dMh2 zG`=H!u+`8hTs!NH=Wvr^h%R&OM&p5CFS2adUs9EO;2yV792sDXBj`M^%>xzuvdTsi);0v;^Di=d<$H0 z*D3--vCQ9)BX=z|E|W^LSBeeNwSXLvCBNVLIa*X`eUA9&i(s&J&9z4QeVG@QJSfJl zJ6*Hw;A*j#Y5fh&?78OfLKsY4W|J=Kh2lTP{nlj;HC|3QjouKKv1GCU+Jr|l6#|OO zI1art9G=!f11v7`viVQLGcX@_p5=aI9 zUXPwQ7rGyXzZ~9(eZU2m`p>5f38Zh$1+k5a|JQu$E?{$J;U@vqly36xsbS!Rd!!rR z^79tsp$ny(G*x@Fio=c2>C$`ev~#uB7lFIMi^gDj(rj7g#0ksZdKI)kNYAkzZ^=hs?vkFbGRgk8+51-NaUVU9o&(I^ z-Rx;h{?+%>e+z_GCUETipn$zM(m$bQQoax4DHmJ8K`t1EGcFumU1s{YXMILgZ`@n6d zw^?sn1MFaZ*t=C!v{AFAuUcxqAE{yQW`Ou)?q@zYPsgT`qX;~R1%f@}Cvq@qd^qnq z^JxVC1s{UFE1+j^2(QJ(>|J!D47hKX9{ZDJQqh(D{E+0l1h4bom!jX;JlR8yu=JBW zhTcSuw3B1lfKS;QEpL6%2^{hDQcv+rCw{;g{hkp}mgJRgwE2H#Xr6%nKaxBWc)pzZ zQAm>s?AiH~oB8un54B*Ya@y8H?0dx0LzEq(61H{5s>tsrw8%ieA1spZyT>lN_)zTviq`_gA%F3Fv8tp7Uv zB=W?ZbsXMH4v#RNO4eJpK81bVAZyJdYMA2iHCQM(yTb3QxJcSg5|tofeJ=$&wCMXq4!(>6SI+-XgVl1L ze$0Fg`3L%nB77bPb$R>a2`)I@?*sR9cLgun=Nd#z{SGehd3`~?TER|S2stsAgI$sT zObwyqZ*>-(8rw{t?_bC%-?D$aJu ze_Xi8{3OBAdNFvOi~P?mI8x(Z5iYWQN_betTPYr3=bzw1i)13+z{QP<_bKM!5UGLv zcMO+QS^gtieaD|SmJB!lR`y!{mw_5ZLHIQG)C5udV4D3wk z0wR43rVjK(buiZS3IOaL-7}O(*y)p zL=Y^e#vlweT+!urPpmrBFxT|FioRMr*@+t7Kp!Yq+>hf8HJoWV<%;)F@J03V;Y!ah zS4>yq_ch|D^!0~5a_oDfk?J3^Tu^1_8QNS&^+M6rK9b54WY@V`e!riisk{cc393^Y z_-lK)@-fB4-9&ZzcuP-9(B5RI4$M78^KvIebx6tFpD^aiYVm^CvkK$d|^}r{N2eM3lG$Y|!5l zn7@&#?R+Zwf)+4Izv)Nz9L7F{uaTVZKlHmWqS0ox-E7{- zaoD1I&}NnQ|M$K0ExaZ{)mqx5bvc8d;e>~I6K%p6PWzj2KBJ9T4y3>NEG;@Xhc^1X zPKldZDQJy0n7@q^Phx+d4X2;10d!7GfKQIr%kWbcDCt*#K2GbE7BX@RC$`!-bKN*_ z-8k9O`V-dqeILn`=`U*)$NS)NPWn8iHGb|nIT(F}w8qcDCZEN+ORF_*|7kTRCxUxM ztJPNaW-TXYK&YTqe(zn<&nK-T z|DKz=8TS%eV!UroJ*n}|8)&gov+tkGsgI$9(IQ|sgm*M;tPTWeA?o`2acYB|JLfO6 zb6AyET-s%LcbaE_B(5s6zU;aFd9CVH+(&56DO!LY<|?I5d!Ny4-zQTw5b z0?d8r5XQIpE_q1n`P$MUEK6-%($`B4rA_}xelDx=5u54I!3IfYpW~8GN{#0B1ytQd zFWR0<-eCE_>KiXm0mCIv23L%#-%#N59G8S`;(Dr{tp)b$Tw)*kC#mLeU-nG%W!0Pr zZiY*k&QCS|JSp)ocm$G101w$E`hzb{HH!~*5EPo^E09a0TAx3ZXb-L>)%tzc@$K-L zQ|;Y2N4xkm_=l)gu`0(u?Begjutv3rHH~!f`@or|I^8~>{LjVv;_sz8)302-D?mt8 zcLxHHF5b*|Yjy9|G#8Y;i>MLt?hsJ;JgT>Rql@`{U-iE|y6V3p`?zSmmae{-#m!u)npO4qKaYxUt#6{~Ih>na#TfYesp&iPG`NaEa(gVg zk($=PKjSLc&Xs`(&eN_U2L?qBlMDO+wnroeYP zR7mbF8vd_k@Oe)d5E{6gK)4H04=U`sI*^Peu#rtT`oq9t6b@M;G}Ty zHmujKw8Hqw!O_r3T}i#PI1ayxgD;qVRx;oE^Mdc4r^X>yGBNnU?Ong-;MZlMz<%sX z{P{reH@yZQ?MnKghm(WmM|CCLEoU9Hebkk-u)a&*59W$}PHV_`dan5H_QkD^{!RJ? z6q9&?D=q~Wg+t|-%ekW2roV)`W8HT}qb-LU^82idx}q0V^a1nF7cMuySm;_@lw9F6 z;MQ%>c~LEo6m-)H`> z(6>@6Ry@w-zlVV)ha~MRy;m;ZdOJBZ2YR*3Yf$6ammFFJ-;T@s3|uA-ZHMp00u;J(qg}_^uo-IaP{F{&KnP%nuo^nj#n5nJ(v7 z#ju5iX9Pcs%NcBWhp_QrTuv^6jxzs8pwDIhg+3AvUj-kB%Qh}Qhi|%GjjArY6g?Bd zyGHMa%M!Iq1X~V|?j**ckjr|&p8xREaUpoeTvh@L1&3e80nv3{_?0AFL=W)&@tq%0 zd%o~6)b@4k6xaC(`+mdUnEumg1r}-!r_qDsIz2s83@}mQLBOx>IvopujQCEWtGJHq z?fx8I4uGWVIM(lP_4!sEPf>ZKMELgTb#@)>d?k8<@t!)oD!0<}e-s{$>Hi&qV(XmR zz}{*9oq5g+x4HITJTdpL@5i!dK55q;+xxZRH^)5JwKpA~y(>|`;@VBoBE636T?1Xh zwHttSmOXK8{_yP(*Df3Dn*91SO)$H*zMs(Zc~5N)sI5`_(AS~2(X}z1m_5rWxYl0* zBqH;vQM0yumv*gz^Ses?$KY1DRs((i>>$&dTl)Mc?`9mxTua|~=naM+$F&#@kev9j z(HH2NFWI=-$ z{hZNazYZGc7sTF<;EXKG)z9$tpbYbm(|nc7?|+Ij;;)K>DM`!pHM-+P&N#|?$<{!Y zypJ=uSQl7YKOXM|XXtTj{5;y^_aSGPzD}Erv&oS(<|#DOpSwnEy-d&7Sk{kUbHx1Z z>E(W(x3>#mtMu|L=y2?z?kbgDtdtDdzdhi^Z%EJ8W%%Di^7+cCzwJlqzcmFv;xw5% zpRC50G;CAy{6tdLZ}6dFx4Q1(i22&d9sd2@Fvp|m_?S9zq{@7f^E4i~`Dc#AkOQH` zQnsyq01=;`w9?O^N6e2;Yf*1~2S>6jZ?b+L<`o?21b-N9vU`C1+I*c`aeV2+kQOb6x{pg+oZ<}_Y(F#c}oGP)THCP3!V|ZLxGg<$Xsuf3Vo6XGMy*zjO8&s3$}2; zdf3?e9tUC$`kV;wJLA5Ea;)FTn*i>u^d2EkFZv&f={bBkI9HNi0bql}brBf=H<$I= zI5FNhN#*egvffy)eB=z7hWGeI_6w~oznddFt#{H>Ol0V3&QP2G1bMzJugIBa0#L@@ z>&Ac2)MNgA|FQ?0-`(8o#h@BOCBI|3Wb@-}&fwj1W#JHpRA0fZZp);)yJ%7LH zP@x`n4k$PkoH!1Z>Oyrf7d&Tu51|(5Dd2*|ILB~s@8gZ;NHZ6mlfRh7#EkAZ#(daanOo~AiyR4 z+}T|vI>E(<^V@!JOi8BNGtT0`x!~e+NjEjF{VjelaZL<=gG(+meKiy?9kHa$@=rnY z+i=M_IM)gP6a#85xl_R!dGdJxbk8NPneRLJb)Ts(PX3rnoUJcG>y4JYL%K)^4jlBk zm!)m>wJhQwaBM@l^g7HVIB5PxE?pxviglvLc<}XenKxDoqB$^Ugs2(zxI;)TFVuU7|OWRfN#P zNR8H$&J`8#$B^$o6uuIQ4XIJm_1d#jF%bHq@DDDL2S)lIo`Wt#jRmWR9&9M%itk5B zu<=16Fidc?B{&dNw;q5Gjvgy`sHz{S?ql>K zaC88kbE+F*`*QS6vFj9UqdL8g_glcxMaHYH>uMa}SccfNmmQ$m8hd|YU9DfB*7DOF zyBIyBRIAw1XCCI*Fn~CO=UwupB|C~I2?7fo{o0;~J$mff{RKxC7(Z*z zb(5YFBA)P))RqyaJ-+WDR$#n~-J6ZOAdL??X`|hr8s9H=0}L#*8#ao59DDrZT{5|& z-MX3#2ytuz{$ARJxO`vHQ;^rBT{eH>*e>fI-MJofF^+c-6|mqo+KFpqH;(r(J#B~L ztq(jZ{R^f??C|I7@%uiI1^*h_j+p5A!bigQLfifR^mrN|DcXj|E+qK{EsFkww)wg3 zgeR`gle^Paz3x~2DEb0=W@#(%w>>yxWcqaV^6{*Om?t-;En!zkUR?O z2yK*>S>fz(vM>BZKvbn=Ni6K#)sujz6aDq#n2|u#%<^a5MsZz_|Rr|c0WSvm=TUJoD%3zg`x#U7zfT<>5 z7xYS(oMb(NHNdyldYxb{`y;ejXVk^^wAlJyP!fG$b*s{xd1jJxZSxq`3AnJak& zvAy2$i|7?IL^&Eywbl>i5;Kucl|CWl&?H|0-nnSBFAB*zPk2z)XHjeSGMDHFfB@C$ zYr5w_>92r4k?O95PUaGAwf6IFs#Dt5MK8Me7I5&XE{(a1i~ojuJk{+%&xVV?C8yY| zuc%&+8HM#OK6JM#s8oM3_*yQ0fsCi>pQn1C2NRE5e|){9z@-=3#Y4C^Q2hq|zz@0D zGSizPZYL2o-WKG+tQ6KCM-d`TtSqjdB&n z{pG+}#&fS2kGv!Yu0r9Nt9Sq)B@QTV>e@zE(HEQ^InRM-=qjqL7cB6)+Ra8uo&tP0 z4t$Q>hAUqVU$NwqjW1IEjpcp=^T%tGtt)>Pb6E~-mU^*M7P#^o&DRpBgU;g0PcnW( zunlI&<($6b!ktH}SqnpD}b>S9Uk}i;^#Z z&g{zc`gQtj4vw@w(OUkZbb|T(f`7oc z?MfdszjtsUat5ySGUS6fxJfS_Rj$-{d>q6wIog$G+%CYMpE=YV0W?>#;!7FCZ03;h z4P41LcFqkYd#Rz$l{~9hwtG2r!u$Q7yLXN&xxsRMpBl z&f?H5603M+jw|+i07Lg(Eeh~XS3C-RCc+Z}H`EnZK`7?X>zL=cqNR_?pz$>h*?Ha- z`5fDj^}M>G9>#GFO~bj!6`C$0c>xS!T;W)(e;ir|?uaWqMUT}X4x!%ZB3G~-{7w!B z@IP1Z`ZYR$JR zxV$>#N<ALOvzzg%8l^S^~})xw=qU0zUaOX3$Cfpdw={o;8AvT^uP z%ynIEKX8jUEYOyUd-}TEOz7#tr-6>;a=wu<$6b#Lk0z-TPnUC@ULz%cFa?G?m($ws z4?sM)ugk_VI+DYFzA9UfAuAr?@FL6CWp}{(!(puz8e8YGepSQuM&UQXx9+lWoRK`n z@3_CX>?2U5$)TC(i*s4aaXjMCV#}jtJtuB>$glul>Ia7S>3T_;U1HUEsm1(=7pPKraD^$LfL zbL2Yu`TB5Ik#R!*xQ_ljCyW}BwyvYv1|R>N!{*l!JwxnCC(Pxr+8gK3cO5LBEPiAB zKGzNhv*ql4ja-du_b!5l>=}p6wYykc;>`!keA)V?+Xa!&lzAHF2Ci*CJXbPr12@C9 zQ7n=4ad?R7cXVxhjFfa?($cl?eQ4f{h1U=NqrYp>O>05KA3sB7*Z!_K>LKrue;*r~YqrmT^&ZA=_qk@K zd& zBKF2vo+9Y?0(z(y?B$S#l=+tTbHpeHfKyXZU?7~y^p~AOgElpep~NF zoDb3sS0U&q^FVMC)AfF@q4$K)Wm>jP*P-S;hrLl4c%^F^jR)@Ci-B6Y8a0N*o{mj= zewsdrW8@7oZ&X?Qy7VEX3VW{z{|0=$^uaBvGZyUF`3ZiQx#rT5M~ zdfOY>;?tIv2`L^=?}jZ`_(jHJNpHK;<|W=P_}J20eV zjmR0NQKNn6LyiQI3s0}rV_NQb(I0SuN-y^B-I25&tS?K?fsNrFjvT@~H|=zH>o|ck z&bE91$6K$FFXjQxxVE(l>-2}uPs+FkdJX;ObKWy>jmf6j$Eq>$Y|h9QJj9rN^yH23 z1#n~<3enOFG>v)1N{)Pq9A?*5)#uPgZ2p~|==-B19}m_CgU0&YfQZIzyDq1RGVPMBk|V~;rzxUN zio>2GI=1972^q1C*uU{)akMW!SQyJ{kzd7;+@;WpRvO~UnzVLI?B3aGk zM9mSU-$;&lx#ExB+`y50uy4?6KSv%>?0fg=v<}y|5gfT0d|KLI=T?pk#Pdv>FchMte;sVS8t?fMbYxaJFVT}V#ejW{vaTW*t zo@wus{(7R|;Cek4_7;7^xNxEStbfY;8hL9D7n%Rs^Z71e>xq-~7zZ2CWfe#!`@v5a zTsNq^QglA^n|t5riy%6aq}#-wB>D$@uAE`LNAmNve?kU(oEZX7SJq>!XPo)9zQFbD z%|U@BH@nd0!JfulC1=rWJ9K7Q-yhS93^#v4jbeS-`w#tl+`{jr^n8v~i_OrLB~ODs zb8hK#LcE`mZ{=2pd4(HvoYs*$4)Xi%Z?ySMmY*N+d_N|zzxxh|evf=MXXl|mO?Ywu zEO7Q6n9s1+9UOVi{zL6cN3vI89R8eK9ehgur?d5W=iDJ}9{o??a1%ghoHOI$(J~gUzWKgGEpf#1vF!3ZvK?vL;da9CBKKHa4M+4{x8XCSZ7 zc^!nhcJ9#}K1vPtPjX)Wig!-0jmY;b@rFNZb@jN@wD=9FIB^eoQI5;l>ejkv4tj~w~z~(ncf^4hu&K*xD10F4n22|DuZ00 zt83@|9J;^r6uB~Tf!2YRf54%ea6jR~Q*HkbDK@+R`&>9?h#nj`#0chb;ZoD*LVn+G zQKj|Cg?ye?(aq42Wu=zgPO-%>P^b64p5m?9gSdl#4f-P7;7UvKf~c zuZ9EGU&SRo?R^P+D|XR>hq+`h3e3b0X6sDJOU3~TjMdjAk4t{G{BB^B^>df3S2^Pd z4%~XC{zY8cO6`5aIpBZJr9FhocEqn7@b|&e{^eq*9L_=1e;&uBzFrix^^HsG0lt>J z1@6UM7WezjuQVOLtdIGagFWGE=d%06wmDnwbE(IQzVEZ0%f`cB%fSw#q}b$XE}Lo3 zO~Cd?F0016%K?9WTVD2Ot`KWP@98f^6s@?t7jo7dctbHO&AI$K`O^nI%YldX$_te% zzZQGfRMCT!Dl9r$`Hc@tv6}Q-^f8`C`3URR3mk8Gn(~+Rm@$Y0<@x~(=JM~1s}rz3 zOW`T`eSg_DFRf?|?j;BOKGurkt#7hvot)nKIj&HQ*OCTmQn_@e=n0R3b45+hDb8RR zSA6u26b1I8rt2)HRWYr-7|G71CQ)Z33dj{3!6Bw5zrVGzxyY3#zbU+B;}un=6bL?< z8vUGIGfRs8a4!K`0e$@kNkKvS1#6Z_YKrAtd|6bU6Zl zRNqGNgGC(cj($6;^Vi?lVB~G7?lsJjIQHt6wl#O1MRkL4o{)Y4_%f*uIM4wcTRl)t zB$rSf>ZZ=&cnJR;(r+R5m3-m(z*ch})tY~h<7dNHPqnwI5#v;j4>o>!?a|0@a{LA4 zvZ=<;na8JKZbdb^jEF8CUxMd?YM#d&TlxfW52c#^@F8;|*Z=2`v)anMe25ljQuWzV z>oipS{HswkP1UWfS1zGxm+<3sNL*dg@5PCP{riX1UXpl+6TQ(dM0 zUfB9GI5q!P!0}9x(VqN) zb}zM_ueksG?0yRc6dXSv-xKZjb@BLJ)(^W|$0duu;P}fhRM9Ss<*(rQ4@b$4AifO0 zM=HJ?2UgnY&)4Hkmap0A`|T5Drf=+!>AvRW?1lf6w)$MoWM^_{TP0qK=OXeBW(74Imx%d?WIlrJU*E=KlP^D;K$*uLQ*s*Kd#!o-aj~XCitGT!M}H>23cSAdeqBFU-Ogbt)=y{ zI;u}1^{H_=*Xi^vwn6wu;6c(_jda=53R=a_;%?}!1<3>Ay$7HSAA*uoE3H-p%WQhUe(TUE1mRxPX>w?CH&)xJx&DFto(inY&y7{x&W4`%b#tf&L^~h%w|4 z(G#rie8HQTYjc+`BwZEQMDu;UtBW4D-kL%4{QOpz?LW!}kU?`KMJzitca_Iq9P2b& zQb?j~an~d+Ui6>waJcI^FN@=E7yS!6L@{^03H_loJpk?(cYPc`w{TLWj&9!XuFCR( zRBg|XtGWn2WU9XC<|||p=Blcs{^F0Xq;I*SCVgC0rtt-x(N!+h3qD|~nSW%epmW}p!$|evYhmjZE-_k* z=kNZ1o>Ag*%OllW?%yT4V}3yOs)}5_!X;WNZn=W$=dTo_RBsnwZ++kmu$6akapQMV z!!dV=aiEurzXDxY^mg>-y7(Q|pVXijkF}D&IJ-_rUDs2?H0azeUW#)uH5^#@_>R6D=)RVj72>|+;u4CfyvwOlj2)iKkB0CRpLA?6#YPD)gCVTnvMgK z)buL~MqG3VIIGmO)#hW-v%ziQfZw+fEsY;9)c_nQQ9xXitE|z-@;VM2WBjhlIir4* z8=Cl6^uk%`Dkm6MH*l^0`ybM}9{J}(KT(5?tGvQ`;Q~*?H}5Ksgzm(Fap06mpZ4&_ zgk;8n$vB6)3ggjn05)ymHT_`csK9db|5v;KE-(jn<9z5UZhBDwXrslSA~OB{<&vjB z?;!_`-{2~;CB1&`+j2g{e(lP48OJh+YfH$LPeb1|2QPxp#+ARLMwKr(IN%N~NOk2y z=WnhHNFSZ~A6$8F%OwW={789)`T2tWe66g`=c7(SZr+svxRA|3%OOgCw%~yqrf_h+ z^?yG>3dYap~c_zy;zqKK}(*dOeEII0RX)z?B}4xj%=7fb;4~+Zop{^iU7I zS-X;rzYlA9U@?d6p6^P2F>Y|^J=}|2$xD{o3w?!x6jySK`9nif5pa{fY~uigw3hDI zXI)9QTqAOS;LvKt!R5PR-$xhPjdP7FeoC>?Ejc9A8R4V5;$uE~x5E|VL?5s|>!Nk? z<1CVX+d>^gUFnKmu>4He{6ntjBydwWd;;bfu5gQ_oJNVhaE|FMg)dvbX!tV4{8qWb z)8v}feHDkTchD8=oT?AF8;WIFhcUi;1@!;?UdJy{C zWtH7_cJNRi4(sbE`KQh^dvnEP@lzV_(RChSe$?<_6rj7#WzcmwJPf`w*J-Bp2!_Sg zBR6>0X@nemiiGF%Jm%1K{*X zf40qs!k=N#=Q_*;_lm<>uPDz)hvDeW;qXs#8aii|>rgsNHw+H{4vv{?|8JSTa2%cv zUEj4IHdvd_B=4cN>>Ss=#O4Sdj?WdY-KpRlvG<1Yn%csqDSF2AleHnlwYkoGlOF0E zhPu|)t08`A4YEvgt?v9sm0ONf$Z_e%<*wySaI3^$-9^BTi(Jd7=}nPR+z(v~KbIfD zabvJ+ZaFTFgwgZrnqQ{1;y1F_AoT3wQt7|89Jtr8MZv1BSqpGw*aJ4>B$s)et!G|6 zdf!~ePw=ydzuxrS42{_YKaf8UJpe9pv+=hhmfv^YF9_Cf#B@^UwUd^31;wz%{r7M+)I9a)AnP zdc;qT{XN};F-9+roC;r4x^dWO1yOP2)@(7poR+TNfL?fxSYJ)LPGb@qALqz;_~+6! z8yXbg#}Vr%Nmu*4|HuR_R!F1|S&uwNtdBc=z5baD)JystChOyvm0l<23|Y5io(>%$z1ruvN2Z)0fXyS)%Mlm9 zg(D9B)bs+_-Y(_{#(wvt{}bA%aLYKO09?=XpYrye{N)(VI792DZ%)qx=2p1)ReEh4 zkzS`%_Tp0EEn$w3-q^&Iy1d63?ev0iTzU;KOp>o?t1{Y&>6J>I z8aRtHTEmZ(UhMl|Gg?X$-c80y$!L!IO8Q^?*w=AJCURowsn(m!8Da2X(vyZ^ ze!>|6aHrBoS5J9z-A$5bFrF-ZV)<10wGQq}>07PUnz&SczqnYsA4g8d8yEk_84+;S zXqw*QqNmB*`L1-*FDikrlMDcHu~K2i1mWdW}T*{vgP~k_^T|P zwDoX4L(&Gy)z}Wq*!}YS!JtJu5r-4~=9^prU)RuX<7mpSG54cAn${j5f1aOb*!z_K z{`~|UnD!4c4t->T7CfFo2Yqf%#ODN8zY1d`M|2D-+=JT7V94i)%{!=Wm0U~qivHqr zY#WruQTPc*lIXXmMrWMqNS5iGfdb59B<~`&Gq*_Qpz`%B*(~b~fQua5Zu3jep9h9} zs^BC2D0}_6{}S{!vbW9h{TXcBBX7fi(cixQ7-!xrQ@4=h+;rIXgJTGo}va~DTUm|+!iiNAs z%ixxq6X$$5;6c$*j91a|D&+0iLrkL;cl^rcz8>sdL%CCi)__Xhs=N8~JN3i5F8xC= zgmR}z$OWsNksz56Qo8eAb|eRW9=9kioYsM_qKdfBSjd zE4euHMlrlsaZqtrm(_9c)##rT{*&5C&*$RF#zhI<2tz2BcqoA3patc)qzlds9PFt! zo}(o1VEqh12{nmr7zp^Rb_F@D+Y&KPe|EY=JO9esUW@^xNNrHm*MBu%WC9f={=8w*VsBXg~ww^SU10M)>{oXpR@b`-V?Dr1}4+*ww;Yle@^M0;) z4ZZ;mi~whdD{NlQfdL3)am5jnf?C?jRA^q}K&z>fAKc(F$rJ8dL-jV;e8hV1_m(V$G6_8y7%p#9=AL#)#193#qn_} zEI&_meh*Syj~&N8BfKab2lwOn+WWtjQ7+Z`{G3Ek>VcpAglc_1d7?yYnyZk0W49HI0~?a^kbg#~kx~GpfNg|42^Ewtv4G zHBj9+F>t09v{Cg>c5hBRgNqJTK}azR+Gt1;~9v`WU3I~4o$MV;si@cGgXV6#u+WWNdt>dmI@7+a6zZ2ET7`ki#EUAJNF&wXU5>3*6U+<)LYW0pkSnvq(@GR&E(gk!I7eMsQGx1tKI`2h1U6b zfU4gx-=MX+o0UAyRqGC^A(z&c!I;5aB67_9?=e~30a}cctCb>Cx zITPm#T0Ow-aa{(1^G&Pla~0kZdVOdmuy03l7wgZY6-vVzHjcaC`h6WO_w~CjTQJX} zr8eK=t}TM<)TbpHGpnx_J)u~Q3AEVw{@k^f{dy7VEAHj4x7hDrXnmyI^(k=UX})4T zq(`-@f3BWq{wVJHH#kEyS7?6fW9zyZfqt6f>l@uNEoWV=*W2G$xvJ?9Vx@2SEHSn| z;Ht(8oqFg8RCB831FA-eyZXAZR5Jp+T~~EEE=W}KrRfb--NB!s8VFLqxT;nvjF(ew zzR>pbMQ_*$qYBmb`L|u0TN+$S2<(sU7bwpYrZ=QsM~+we5fqrV)urwRH-&2V0A%1& zy{#X9^1_lwP~&L}mkOA^QRmO&l1tLEA%07Bzo8e!B_~6OqB`SHxa70L z#V99vg!loO$R;FTf%$>({E+W=$x}?PtjF;pEIcUqK&amDn@#Mop1u0LSZ7^g`td?4 zyjHleNlh-h#0SQgYPiJu0TK^Ljr8=b)bRKSEe>#rzO@l?!cYU`;&WW0i}epQY*HZ8 zk1mm+7wDglqo1yO8>b(Tm`M8txM4e7lkKxirNDx3HH=ll8Tqa>M}v-eu}eO+tB z(_mUThWz9GSosOvc6&FP*0CW9gnf>cPca7OX47i-F_qWuV1XL#^QoRR`2be-mbt5G zb9jw23M=!zryKEn)5bO3n*Xq(Q2+v_O=8$5V#PAu57|5cR=oBuff#a48&CaDieklG zWYcN4^8fn>6@$c!OZx-q?~<>A;zTD-rTqc@+dCFug+sc?SIB>GyxglX_7~T1Q^D7d zaJoNk!x+DG*LiKA zO8pS!tou9bKM3@c2M(4mm``Lanl}%S{Vn#8wi1U;_1bruf$ga0me`~z8Q<`{4VgloYSx3f3GyDmoG?%0`Oy^oa5Q$%;evq_g<>CfUk$VBA z5uJth`!pYtfCQ!ukUbIv2TEZ9J0InR50?B9c0QWtzm&#J?quvVrHl$0=MX7FhO%B?i`u(Vye{Z&!qV`zm9Iglr4JC^lZN|v{mz# zo?rk5VyFlILhb}_{Oc5y{0+Uy$_4gppT}J*zA*4!5H1J0$L!_cC3vq;4dtgv7<@qb z#Nf@6+#WhVzfLBcT=3pe-;5JJ5s8=yp4|rpbZ-dWe96C|f3g02Jmu=6zd-II;3=O4 zePfU33ln(!UyJTaw#`y*iTC;!zYKZ!(PXR5@wt0s0hnyzHTPe%-`Oksz~m8|cXpeE z+n+ql>%~uLUatO-zw8oTKyp*TOI(DduZIWQk0#gIbG_U0BL&}kCfD%T^&$RxxMo$C zTrKhDTAHUze=+$BN!{p8Okbbu_mazhmpm5zwdCcJU$@l~fTo!C3$jN|erNAV-i=fX ze&wm;HW`N=3*K##4@+)iT;Z#agExkLtzS$gH_H%9x^@s}sYgCJ&+Y>}^{gcaki?lhM8x%%^QxI+c|qRA%CY={ZO_-y_v2#a8!Z-m zHGTaTb3C+zS!R3Go^oQ$3SO%h9{_K_vlMjjo1gfn)AvpAI7Yqmb90ni>-CbnuUXC1 zm{D(l*Zo{dkp6D|WxVpjC&8)Bc89s@-ol+gX=2^DFSYi}@GQ>^j=-XjM*l!v?$W*w2OeKh1vK$uy|G7F<2g($7)u1>jypl%Qif zL5j`Yx&zPXvd4P@QYWd;-aX?w1_MC5kEmXB!(ZS+S31z02<@LZ=?A(2f!kek107DA zOrSv8Pu5D#4m#NLs2h{M33PmiZnww153co5cN#eOCo&L#%Q31Mzd)xit$+RKU%x{b zxzugohUKCS9p@Cev^yaH%v`xfr;(*J>W2RQE2nRsEpd_&}6Xm986!Ee;lkvX7&f@T}2uR&Jz^E*Q3 zo5BZ%;9TirLuT_B0(Fq@NYDR}b)M`!$ycx5<*c`)H%R?7;lx5#tNIgytYi9M4rHIN zbAjNkjQ z1Bb4KoWYj&S1G(M$eF8ofgrc9%E%WH5H2qHf@Hr7`8`CW3(lXCKY;v)l*8mK)tpQ| zYlmK>zN^#&20%f9^%GfsR>8I6KcxMI{+tU$XW1T{d-&s93WXlU3FlFM<_6_z6<(-0 zP3IE*+!nsh!j6CFJSO)UDBQ(Z2I5QB$($C7j`?fZb5B#AAyYkeMK-4zus-G@%U27$ z&N_qvQ1tXAELefSh3ZQ#viq+<1!JSrplGhmD|PP8fqE!vviznt=`%s`*`#0X^&I#~ zR!B`|D7HNW|CS)#6dIwpO*!~}8CRVQC6@?Cf$~(6?}L&BHV^i_cxR!soqF8;x(|iY z6J(A7{*URWao(3uIzr#iekuX-zrXZp?eF=Ym%=jj9V{>QQPM7+-2kPV)aT-t*ji^O z>#Y1%{|FYtJOpJY5dQkLJ>VZCa}44sS?^14S$sp;M0xI$??O4RWgn2H=lKcXFOYs8 zlv%!<-|h#?9oz3X>RYJNe2;If@He4+knL~$pg!&LanfU>J_D_fhJ6C%uk*U^Sn&NS z-d-qQL)i2KPl5k7y{Co;C@0MSmOh8W9P^y@7u`?GDZx+=VS7IJE2jg(TLgGb_g@a2 z{|1pX4gwc~zgqXI5ymV<8o|%&*WdO-ME$Vf=WpZtiy-o#a2RPXD;#Zz%u-K+Z}k)+ z$Xp4LABIp8W;yLMG?x(B$FGNT=&vP@1kqgev-u=0I-2$inuGVvq3hyRA3$`3`uu!T zwC5b1BrkZHCupxR`nmQ8eSA$AwH~5^h0X(CLZ1V%i1v+q?O0^dp85%L9x!c!e?A>z zH}-u$%mFrad#@ElAtYvrcA2bD|dIP}p9M-%tBtqg5GKU$ne)xAtbbgZ- z&ppgxt}VR(BE)CPxy>AsR#Fd$TMyPDk}Q&O2jYUs@tH%c@g*)`B3nGV<`AbMf^CrK zA$v7*a6i{AG9ht=_!-SXzLpSgF!3<8(gSCkgZI#MKJhLjX3Jd693;4O*|y^$u~IpX zjeJce{#xY{0qvN^k44-BmD?FR88MBb1xnEOPx4=;QM8aThi0V(BOrc{^j%HEy?Sqqzb+gj(*TqB0RZu(dai1a;}H3vcPKw=kDY@h(nw=7X}#HF zeI|*n$}igk%CSpar2L;fKJjfqg6rZ}Y&E;>xhnCB=E{=Wuw+|9q zj)`r(W0l!yzy7NBa^NyM?R%rDP5@hG$7b0JK-GE5i`ilKcU8Ab58hDK;SNF}LX~nx z%y#ADK$Z5-%r=eeJvd_D7@J%7}W zkok*QV{>w~k4Vwo{3Ck2_E0;kBJ(;(Gk;T?gUl9CyHxVi=C82=UZs74?mzw{ipl45 zzlORL;c=SPQb!9wU0i-{=6CH4K;4p2{&9}>^JIlNMOyI6fGKahKxBQ{T1-CcUP=7{!Xuv&9v<_M=Nd)|yy+w|UYgspyQ zuVU3V`ulZ6)@$U`ep&k&%^l_6i&eLYPu4W^cyGyDSal8^pGv+n&AR``s!9Rd~(h*OvVg^$%nZiWQne1mBf1Xuyi8jLRe6F|T>%HIlD_HBm*hKOl-?^gXOl zZ!F~@)HhyHtT`heTT92jh_NQUZ}=q6eiFuh(EFrMKEBx)dqW0#;5(##;`=cSe;uLX@Hz-+uN%Wt#n(c<0ukh4_y*-92JYAWVz{qx zn<4Ow2nETXEqguM7f9X?%l8Opjkv_>=O|x7l#<#rA@Hr_mau%9_QwNU-y5=vcu(Rf zfdE0fDUyZdXKJn>(99QP!15CH>pC4hUdUnDe(|Y;L(;jC`L|=)_Y4}G3Qn#1YRXEbgHi@wqQ zpi}qzWu>Pr#iRE}NBf&tlq2sO>Su5q@PAln`w-5Bw;bE=!K<-wl;plC|1bX@EX?AA zK^8cphkGZk+K2^TDPPJN$Mvk|&Ukr_VL`gibDd}8K8E?9GX~}^@;3+% z0P{yk@fRFfGp1sGr#tu;mHHYoPsO}XC{F$&@uR-h=X)N>0=OULET=l!ML%Gk?Rg&M zH|2iFzzOQ7aJ**YM9dw^50*Q~&nx{>%yo4h>)7XM&b#V!5Bl}rpEFo`8xU+S^9#)J z*?s_PkzaikyS#1lrusR?F6U`}Fj%=Mh2AuneMAPKl+Pp!ZT1?>w)gVjN&5ZC?sws; zA7`(CU|;cKV%9#LHwF94-Vn2<$%~Nupt6_4tW&r1g#&_@>pnDdmw+f}UcyC#&oJ}3 z1q2+XJm_c|A)UFE}kM056}HlykN=gOaZ2Og;!3PqSqHDw+N2wB=FP+o7`y6rCuKq zU?$h`?dO~g^yfc?7kkMy{P-Y#pQrhg*;}6rRFQI)W^R|rbBjBAaxlFTYo%W%;y1oS7e#-nR zag<8%YGuD*R$HEoH;@ae>&;48S6@T>0okjVh5ESyFLMZi{r)v;^*Ib)fKJiD>&-@q zS^B^|vXn)LX3IV~XVG6vF4b(OY0#fDTgYc2{TQ=_tcet~ru~h~FU>ZIEl{823n>(u zhU)`VumW)BYOZDPEkE*N0o+%l?`QU>ZR3R_xa$8lO|R;{#ho&n!L;T;3y=SLQNKp` za^_Gc&1tz)^RrgE1HynIJ@`N=1*PPG6uKK=oH)_tX#rEjk zEst+@-djMqUXB%Z0Iz}z;`f996Wu?0Jt##tFqQV~;vE66o9zwW_8~mhn#Lr?-*ej6swdR1`%kMhpu1_w6w1YZdb%)A80n%&_-{o5GoR1*w7R}MR z@5#LxQd`7x5ANx*|Ah>jt8{zHz6Ub4>0HY_R&z+1y=5K;Zl&CFA@hZ&IoU{kF*$ET zW&`6_x`Ue`Kvu{)L+21K$FV+}23a#?0S>`t^+;tMP_JUpa@n%aksd4cM~-1IJ!HS3 z9Q@#Fl}$6-1Ua0} z>iH4`UwV!~!;tfya)N@EGnngXPBD1DdPH(B)qF&7%w<$K{~K~Y;(`+G|F70wbe`s- z$nP3Q7AV~yn%kpK4W z^bfuWP6xtd^w|mp0rjf|TJ+peFj#z=5ZJ{!*4v=q9pU}c`BXorg#pG>`zurKBaQmUOyY?vq8G3Fjy;?o&0p)8#sq#=D;QyT-cr8%6NchIYkL9>%Cn#+c zPZ;%>SWs)Atc0eR)f>S7FBiHtLD^X!WD;uNF8UI(h4=S53g<0^wqkWaK zCHnpGzo_@FvfWag1^=Tm$Afas`Ov;#DUmYjpxkI5-G3FmJ<}hBa{GSvpQl`^@+TxO z4F2B2FNE@s1++lDN-f}p)fDd%wPt)&r_-u;LT|)aHNBLgi zTWsF1Nqgzx=Oyn5zHL0d?L+$t)<@h*`woi34|#<472^M-em}+LpO^^Y{hDX+k5)fw zgpcFR|v^TD^3b-aCvkEG8ZpXkPDzi^TaM!+{&drPsqm80Xk zjxgkJO@-LI`aJguj(HfwHn9lvbMO%bbotsPP!Uu#o~<%P}wZzWmg+5bwT;gm6`++3vmLLxd|~n)Urp`-NTfBAINOC+dDb{;Ko@ zOf%5|si_F@MVfDJw)^V%Cb_@RenTFRkZ4C+gx;5%BV6N}{V62s^;~rXuVRn~BnC@v zjrJLu3rzfPFWnTsC*P{RPvYz3{bP;BV2Gds3cX_cw=#_ON1g4kVURTyozub4b>3S3zQ@EQZaY zqx1Dlxqq5N$2`n~4X8R%@;tQ9&~r=G<>Eo0eTMS)s~(blxH)*Y_Wr7759Ppw*=zTC z@#kmppTsoo7T+YqzY;EqX?&k_LYo#te7*3sO{3*HCe&wd8oNr50TMMbKQj&cIjHj` zB+iq(g=v^CJrPKZmE4PIusyoO%d!|V4Lp9h<9kQe7qQS+j$WiF6^W9w2iC>d{7N zVt*M_-y(bhv;70Pk3+TQUCs7N&DmCeDuExfjmMMkZi4E6gac)^X&)bIeBv=RTgPi2 zpeC$+l`ThvYeRhnst12N!)&pAj+&9eWjC8`?x^N*$q}2)Or4<~WX-#Lu^nSJ*&cAs zPjWvpo2=iVW-nuX&oLWc(_Bn#7xgo5l-S`Qs69b_H5-^>@AZJ%A<`Q&>#4Ox2Y9Hx zTX?-@{l#2l>j1UWUuOZWS!elYwW!adb=I3!yH0%_Yn5*cb&mRB*7Df-gg>D!s=oIB z?AKR!n($A|8o|7mLftjG&-s_67vz1WeL@)l!tXKvSnfvM>^gT=$}aOa$7C;B0CoD@ zF-&PAqY>0?-$Oy#JI!itKX=;<^&ZhAk54y;-;vxl*4(W7-^1(V9F8?-iNDhv$(5ot z)xxy2#iL?c zV!c14j~G@>SN~4S#hU-F8hZkZ%}fi?J()*cH9)xcrsXUCcArf93i14y7R_-|ze4vd zt>u!NrhSFvB#CDvAaYE+FS#nyDvysWOiU2ZCHW8}4}*zeJjOfMv~H5~JSKW*zpG7j z7B!g25HEyj)4UnRw=wqqa(Z7$UI^n0wa?e~hU6iCGh!r1`ruVi3v_Fs@239<-y)%DjUQgeO6<5jN9Q+ZTZ&ld7gTF@~E^=W-x_Cyx z&-lE#?_f;(J>XX#8}XlHp9B6oImmY^#-0;y6Y)lclZvtH)rabTjRW{MV5|=VP`l8* zSLU!7%coZF$mhZTz3>w-x`(WCDK~*%_vz%**8ZuVwW13SV|03FE<8fO^24HIBu5MZ z?LTAmEbXZV)DMNxGJS6ZB>t0!kpuGlCx2YU#fQZe|c=7y^ssd4l1eb)FLV zUGvG|w?s?>fvqA4!0H8 z>Xy<4vk1#qiRXp-;d~%lN4zIJw>jEh$8zh7aE8gf2g@&zqAEDIO8yngs|cU*An|t} zk{k+_`?j95e)2kSrYJ9}>^JKR5bSRjmd%mp0`=QPkV!rYN+}d924}JGcCqY2@ic&= z=V2_X()UK-J>~zDJtsL!>JJD%7RyHIIVB*k=bl&w)*s06hHlSbS@tXzev$84_eZ5i z_dkc_g@mO^30i=|kBi)&i4XNG0nU!0K8DN-uymy6TAUaiZ%&?prM+Yi0!~-`eJjn3 z<i;t$ic>(^(oc)9YY9l<2^#p2s2 zmVd#Y;E+`J_*e}V7b~~cd1mK%M2N+rrMjPTbU%$nHxUK5%Mx&;F5eT2@~mH4`>0sB zQ22M?ERo&~?I#HD(fdPiei6Pq7G}!g8k{xte9*^&FJ^K86prTo3r6UB%{id^*n*BS zCxc+%Z4z9p!TkBk{|z zL$HVCIkjm&CaC-s%$>#Y&CZl({Or-#>?bjIfOwK2I7E6Um~((@-ITu{&WOou%$YGU zHSjO_3U1VWSkCFv+k@a8>dWY|TfJJr`-NMCU94|B_?Y%Zy7W@6Yf$e+n7xU?c+?-5 zF1!ZJRv#Yu3&anI+1;#fR{8Rn^|yZi?A#l(9-?~9voxR3c?f1zT`}se*DfO-w{RFS z^Jndg1%LX9J%5;aCy)2qLvXe55iqk%b9lkEl8?fSZzbmoLG}7##^?)4+&dV84eBq- z=psHS2p*I{GNym2xu~GjHEzN5;o?arUeOm@X!C^WwqNCT)O|{tdgjSTD*+cwyGZ(( z;N}Zo7(2J!z4Pg7$&*^f2ed)hx&KjKlYB0*(~FF^r+L}`#1n%Zb&mp`92bwp_V)=; z140q5X=Y=p)Zx#7P#?OUEu4v|9h6THI%_3^IWWaYza2u1OOJeuA%f%Ia7F+^=gS@z zy=8L#hmg*Z&?})aRB#T2)PsU9(e|j|385jvKP6t1EK=#8e~5pBFeulAn<2!B&a9 z#$5*9NeB3an%whpn1iw4Dc2^sOE3ai)E5}eFZkqkK3+cd8+b2qZ1%3?7SW831yA{L z$&Eavzx{0Lm&k=7x$fxx;cJ;cCD#<{``lBXTXMCGSu-k1wZv0N(4o_8DcqllpX5`fKT@ zn4fta^7*^q@#B2@PVw5P{fXS?xZ}(%|f*o^@Sx2<&kqc?xGE#fd8=0C(ejZQf zZDzB?hsl3^nf8viaa?%@`7AD?HP3f1nVo!GzVd1M{_4JB&v4yed%3UE0XktCKNQ~_ z?K`N3`rHw-Ph#(*iOV4ESonhzC4N}}T2R>9zwyXSfbExQ1Zmxm5 zSqiq)Th@K1yS5)M-pvu4A9eqtG1A0PF$(+-Ywp#HNP!;w);r)`D!elA^Z1>3AKrC*UFidX`*behSsuA_Di7#i z1CLtCm%p%x_Plo!(D!xfGwD3j_0trh=VI{eoY$SA`C9L3=?T*w>cf?HKQtdaJKqZ> zr05P_zgs!D3!!b&Qv&alfwz!>2U4D(seB&?yyInG4ym5<<~{XSLFxm_1^3DY5CQG# zF4J$Hw)Zb^>dZ3o+5BZ%Kj5F zG-wX)<(g~H7$OTwaL?EIWyXg(S9T|9ir_2i8+AbW=Jw86E#mTbGPbq&Q*Mm+^x25LXrwe#C9e0=Ei zEAa#c=uZ6yorAmigzcU85$zwuy9RD2&4uK=uYM5M-^`p6$W48Z0nQNIukZQXE9D*q zL7QvHy^*yl7eSCe=1W&V?h@%CLGUr*Fhic+Lm{ZVN65RUGSdDI2ZEY6g1kTU=Nmku zu=cp!jgVijd$M4K<_+^FsSnz*ysUhiGj>!50|i56&rRoV#=T@g!F=r}JGPfvDD}Al z%Ky+h+-!ov>lVC0BV=$G1916^P`FU%CQhaLd5iMYYwqOgd%wu~p&j)}LeWy~7X=Qn z&ZrWKiKQu>G-k-1)|84>Q z7MZJ(PnzQ61ILpOTlr$;%JC$=mGu9i99b)TGx!BNb3T-Brqu8_>L+}xp0043@=X0) zXDWRO!Y5k4-%I?#+yPy7i;FU8W z($4aJLA(bL>8hM8KMjkhu>+AyIe76s_;bVy36b%V+n{}ccv2zqKG*n1gO7Dfl-r5? zr5qyvNLjo?WQ*=${Y*)upF=dAetibN1%BJhkDkP1=DWZj)80ySxO(pWo#p%o(I;3S z5Cos{#3B00IU~M$g?eslmD?Kqk2S`$uUIC05QwGf`@#1CJq~aF7h=aMhs|f_cQNJo zf$w7F=v6#$<5b#sf$tRc?NrQRk;-M@i|hWQ;#c*<`_ez*;vG~p3vbJ`S^s-w^i>x0 znYN>Sg>z(aVcMSJ!O6|!XV&?B+ek_Sx&I?y@qSu3U2NL4uMCxoC0I*7Z}Im*rMw=- zn$~})wsGEOh-YgqpmnzR5+UAGJbJ{}(EW6LgcLqatHimEgZL!nk+gPJ&rbX!IX9b@ zzwW2SXm5!Bd4LR2J59?PJvYbODKDdCw&cDc&e*FlM@-8Y@mEs5U-tQ?rI+sI;`cMI z_B_*K_sQ|MWsYi^Ezdr_Quart`2{&|L;T=bTvVa`hW3~fC34?0P1eg6$rFyQX_~_Y zxDO!$42(L#G~MziUHEQ*$TeIKJl!-&45B?mp3wPllkLGpJ{FIU*}p{JzmdNgTpl+2 zIX>~pR){LM(Cj}?`9RV5S{B8b{W%Pr>I_jiCR||l{VifIh-!Y)?6c?6=rrLnntjSw zfT+|B2AF+u;Sxb~s|3@{-W`n19SgC}IzQbzuL@`~1+n8LcVqV6!T`;M5aaFd|DH8_ zyQ%LXcE9v8%wB$ap1Tk#CI~3YG+O^nWkCAertwLgTU1VDjLSIF$dAiM9)x&-c%@9E z=z55cHJfffXOHScbsCs2B1(zq0|6AuoRey6aG-UShR(JRdP@Tp_U+QbvJVLeMSbwqE&6)|? zpI2WuX*d}n%x=4{tbRtkn`RgPnCX36{h9DZ%r5JPsNNtxSF=<7Y*3RTeJZol`ip9m z%W8IzRg1YTH3NAKQ($)3K2psX*=w2YEd4q09jJMp+ReU%*?!c&@P+n+w(*$1;3cS8 z^EMUoFEm^Ev|P3gYBdjHwhErK7;0m}*EL(@V>p_83X&5rTUb-Idjiy6PuJsH=9$fw zJ6!vuT=w_{~uL_{vmHUSIPq|P~--QnZo6UcW5gPp#)W?LgVb;ic zYc$k%r!Sj)D*xEtbNv~zA2&xN#&RvzETOUQoEhc_xA+TEv1W$kVobA&7P00I^))ne z9OI9Nu;yIJg`4K<j3AwkMW}WL`jiWxF=3iuPh1Gv4|Eq;x=erxR`XkL{wVWgz z6|9~loEXzGTKI`rJwkZDLQ4Ql7brudfaFnYLqv zhlzu9S`um7+f7@V7`6U?TYF%|5yGcFOZf`TL1V?wtUWrH&Nsp* z#frBxsi9B(1kuv?u;O0%{(;}-Z!0c5^Qr5X)q?+17P|Dsis}{oqy+y8-G@~;r#?<- zL-5mojb1SrTm3GBALu+Me_)Kw(;jA^1MAcc#vT!$4FpO*V-Om~Xz4+NJP33Z-Y~|F zmA)7R_;h;dCm2gvf9;-!hCyJc`06nFuk>#qaFgzPq8~NW05J;!4+`HIqZ2iM5|}DJ zdW>En&tC{IowEDK7(HI*co6tf@<`ODP>x?*e`~kp*J&0Kjnn6TzyBhPZ6OImd{i^Phiz46gYVp z%kR{DdcgYH%g@ogctClSSRU3qpc9mw3YHxZ&KEdYazDYc<(g}9WNbD7%dB_FId(T+ z46y7rer%GD^%R+JVA)xkpK%6Ct`y6P<#|ed40-Qh>E02%8Kgdj%&D++srLMxyCs*8 zr7x>b+?mK?&{MGVCXNfA56%m+N5;~=dJlJI3C9{s^ThKEj&d5X-Q*m zP(Z-otdyKOmQ+b!7@U8^6OYBesL$2eCV53H9;ba|=YaN=io>Ldp#W_#czfd;Gq1y< z@409nfna+4Q6gMnk-et{i&&pY`-uYeod*fFN4-KU{6>0B5LDg*?I&zr@D#bnVPS^) z?t+5BJsAr=6VEZt|AhmH1y@S&5P~BZC|HLDslsc7;LRLYEWrGE>cI@&E%`>wAFTa| z;CRB4zeT=@Hk<#KYyXXyXZ?P`Y3j?)>reQg8N}nBCHHa6-KYJZ;0GsvORr?ieTfU? zSA*p z!JYEC#xBY!gJ2VVdq@6`T@vb>c6~BO$Ly7o_W?Im&WV_PyK=?d^d|qEcQ3;1A|8xW zK3Tn+nDveF+}tqP0t5eI)<`-3g3Ign-5+9B8rgU1iNAlG^xiRZzUCy|ljP@ynM3*D zu>xE>ug?q&N-ycq4cxPZ(}o#u4P1x*Us-1@}tHDPZ~w zdhc?t749RZ8_i|8qSG6UX&aTNI~|lB8@LN(-i96b>3ufTspY#xe?Eon{?mPV=zj5Av8UWFL>ywcLze#>S$p(7G2we4o#JF61slzG(hNC z-5&@0>zphknB7`*Si3~OPa*XIVnBcH5PDg1Dj2YSf)F3$Mzo?|dub4QQ+kr<<9O7= zA3$g>A4AK~chVRN$bJYR^@S(fUY7e1gl39wBiZ_m1T!GSzivmqOty?tu5)OFXlA5brv8u zgl?6AS90GI>Pra8cy>T?Z_Zje2{l4!OjjB_W+xkFYJM~{MmXHbJzP(CavuHfYxts^ z+{t>Wef0GSo@7vRo8{7kv^SaDY`LkS>*f5OT+bLn;^Bpq3zb~W$IJ(bYp?s66q|6ds`!DR_)u+&IH*Oz6GJTP0j9vxV{S zcTgWipTlMw)0un;@O~D)yxGaOv=jS)w^#y}X1Db}c-M>f*X-o$-^z{P(KMR9WV<=l z$Mf_-0e2De(9fGUP3JYCi1fa}dtUa35VD*BZ*u-epH!a*DKE>Q1U%9D zUIwYQFX-95aq4ZP^Vmau8!Efd<^)m~5&m+`LE?KUXY#1O*|T1i_BMy@Sw2wvmANby zC0-Zfjn04$x;FyvauM=CN9B&u=R@b~9p|gBz&mv+4c1^pd@X@K$aqx*CG@=4 zJZ#31(qpI^O??r~4P>6L9Anq!kg_J)_o?L*XKj$Y8n{0%yz8o4Z-DGxx?gl>tT<-i zpBo_ic=egNFEGBkFJwQ*wJhSp$@uIF$UdU`Gxtq-5J8t4S$i7*mr4NSJAy9DlkZwVchGt8@$HeE_*PC}+w|Qx8Gz zGMx*$4i~oGfV{}fL~bUZw)Jx4-NUty5(x6goOmR8_I?xmO%}h9e>~TSY9P2szYqD7 zb?+CPr+>cu9TFR*eTUw23i?XFAA-u=fPz;gZw*1qB`joI_Fa=8*#1)9*h1m$EWo)2 zoCeMN7FzCtvx+pl!|?aDBi66K*#13N>0+br=$5tDA98?IOmfs`<6$bc-2$I<OBR1Balrmpr$?IqHA7PVT+n6bcv*N}pH%j^mf}1eAWu z@$A#cAIBHA6QK04p1%W05tKk#jpQ#OK&9nt`geh{%ZQTQi~1mfhrJNWp3t0a;C`y3 zUa%O-zU;{&9|$P_56ZTy4A%|?RW?eqN&-{haiw6 z_frVpE4^FVhbXr=EaR98@LR7$*mAG@TUg`N3Boo{;$L+$C14+hNJ173;Q#sw8eFV} z$OU~kKurA)^@Bw2`+>oG;AdRc2lqon)>a<)@7HrxkGEb0Sa=$)@qc2G>8GLJW{~28@ z^LX%mt315uZsD(h|6Jve#kxu^3H&-gg4ktpPNaDU2duk5j4>g^rSf;6c;cb=A@=?Q z6s%eczI~D}gVJx7Jfi#gHEr-fiWdCZ~?76=3J06VgF>P0i7ZfTRq(?yWFT&4H z{|4e5>-+X2)7q+g(Rd#&aK2$$zoRit&3uTDVld2)rd9MU*Fjw3ZrP^Q&ST?W$U)K^ zT(3O9@HF-P9^`e}*!Lj3m3q&R<_wm56PU1z0e0)E1N6i6Q3-yJ_Kf-q~O}0N54N5=N zG<_mPABd{=(KOwo9-8PN$vv4Sn|p}fMH=$YcbcYlEZE%z(bvSoYxY}iX7oGZq?!Fw z_@FluqI>$2NNlOu&$z~pFF-6uc`^Ho`x3bQWQg^O-%4gRvrpn~H$rT1H}ZL2%s}h|jz8aM_Eo>fg(Hal!63HN%--DsYKB-F>nwVhz3R_|im2SX&0bz# zymAOC)L%pU4CM<}+`{#)Zl>`NYbDx4#g89w;LS9C!5_mARHn)O+%$@&^(3g|cv}A{ zdp3HcS@V4UJm>(^Y) zPNu<;*cy)d&wbXDn4d#?0=%y!$Ks2xiwnpsJo5v{h4Mn z$EWG}RQJ5}K+Gn2{ayxjpKrf}3{7T}?fuuSA$rHj-SJTRRgQhK5{hxl`TXoNf)eD3lWLhQ8lY`Yy>3*$MJ&{;_?QRPTs_whg( zt6?V{04ABXJU%$}#p+xE2%EOE#}hau1*`VZ^}Id({ktWogjL^;`j&Q=TI)NHU?NqY zW4^y=jks<*#@T*!>Ll_>5q@aiM2y?MyI=h~7=J=}^nSL@`=7wL^1{G>yz;E$Cs)yb z@J{gelK>RPZH~=9OmZ(+Y5Cj!JLKGkl_>i(>K{lCh5Xvu7xv4?E*mRv2uv(GGKKaB zD@g#g8!P(=Z;Se?jNkK=}^~UJ(3JMmkfIzEw{4n||>zeYx;c;vJV;HsXS;zXsqy01&<#gA1akNZ1Z_ZgK za6pFq6x!Q%hU$DPvb=%jZgb|<;5;MuZj79* zK0ik}R~RW3t~K#+Bw&i+{nEz*=Ud6=V0fAIt7u;!ds__8;Pv}p%DcpJCZM!bt+>P3>Ei-KX;!=VJ!; zyoP0hJIn@0=Ym*PDT5bqein{9mNv^=2%P_vH($DvPNhA3#0Qof2JxYG)03L|C(VR| zA3p_4$12Y$sN4-KJzM|$!Cc0iC9t$aes9RfC>}*D*(iN52p%WgZY*K##CP)`2=ZLR zlCIK+gF-zY4WjDw7)kyK$y-2>W0tLpu`r!5jX$lW`M>1; zu|UQX!y)*s@FcL{GCiLM>8(u@d@Kms`?z4OFT(uUZ;^2AdCK!kz8Lcd%Ay>C``)1g z*fE&bq4toNV;|M+3mo+NZwo6 zWwdazXr3?J3+$3D7YA^)|Bcz7$zGQ7q|)2M?8}v_;c}d=>RHUTe0BFBYB!EZV%BW$ zs-*)yCVs!<9x=;utleh?z=fInxbBh-?lhS{Vde`0as=1@{%7`7kE#0(VRa_|fEnwQ zC+7<8`y9*|uiOjwa}g$CM)lB4YS4qbP=el=Zu!-&&bct1pX$`_cXiK#=|_1cdcMIl zj#X|X-|asVNXN9RbnfDA5RN*gg|wINZj*o=cD_jR4&Z6u7(4OWC%FVdI-HFLX;9Gf>?5Y^9Wde$2JJb80L=TzDuM}4WaKiHh5*S(as4&OG^n9d1i9Y zMtxs~7E|5&y#vWzHg^_UM6HfgOl}i>$*~Zk%OY{flbdb+GNgR?XR(yHRH9(pOouIe=WVWPWz7$9~*cZ-zI|lwcuZ-{ojyZ_>vH~S>GpKOX1hP zP4kFLC}2qNnh5jw+!x@i5^oN8wl5HzK;wC5H+Xw`9J%Ld;vk)(eLt_Uh!1?^30H5e zrye-)zSX(2x3fPD#(F{MiGeg&JsG^s>TyXCj5P7z{?vSY%D1||_V`vFngA&)bq?!& zDgsMLwO&Q2v%H3O%VbeTei=QtwYNQeZ?4WUJB+09{a)&CJg<544tu0$ zL_ZJteS?lR|LYNyk57Od_v?MbyI%YIosRaEhHGx7GuKTYApRG%>nV8(X{BDmEnF70MGI<(#NUq*0b}lbgpGqlm8~NfG<{% zah&cyy>t;uLdH`J+Ij-qCbMVP!b<9KRSj2Z`8M# zg*WDX+8MGkHBaN(eNom?AI-%1-Y2tTkoBVs3c$7g$LtAqf4@frk&wNKUI%p#(mqAN zYtZF1^;5fh2Q!ESy1c9RC6{lvLl!|7JJ)m>tMbh<$mvOx$kKV>N-WBOoX6EC?5eL0 za#l8T5(-?)o6gxzx4*F|;NGFR{ao9hac@y>Y+lIrkFHXFLEgE%h-?M-V(lg8*?qS= zK=;IXdo_RMo}zj3{PVSs>)PI3zU9xk8Jg=a7$jf|2>wDbgsuyrV7Z>hgSV;ot#A+@ zlSe^N`}0u9ue(*BL$HT(hl-B&F_k|FMfU3rRxnWTQz+U&8r8YmAy^;)Y$!fM^G8AJ z$tr&B0uCJ0c~^Nc#RrA60M0ha-9kw}d!PC14I-la2qjbXzU{12Z%xV1)at!`BHcf< z7h0OCb24Wg(S1jq3#E1Hv37pd{Y2>ny5Ds4eFCNbv;7dJU0wDql+IEwhQk_$LoY+= zPs(L-?h(!il(s5Y$>AFM+s(9p_=pk%W#9;QhWZbeYd_E_kbWPOJ)?8g03R#-KS0@H z0Rlo`qX1r@Y`=JpAYh+MZx0BMlpZYvp81Lb>0KZ^RnIelN0f^kUPN1> zOJ9S)Smi*5ckko?Ed;nGvu_$i^3~rKAc<)H*?&XiRNX@bdTFmEGDi0t0k#&N`yfQ# z(C2TUUK{-HE9WtK zuW%H=|El^iqLZ|rYV(UU|5dNDf1KXaql=Y`;~yabOo;B%d4PWauPuromWwv|VZ6p#8nrPTInqu@!tv zcwu%8ROE2bdj#2mz39(=#+{;0B6^N>EfN3Ohx$7XTxy`g^F$_JF=c<9OZ`~)wE2WqLzDmtO#?RB|jIWan&>%kUCccT9Hk$6A`_4<`XOMfC zIc#}<;p-*;WDeVNUHDnybD6`g@T(#G)m0R%a?GKX;*EvyX7x@TdQtWqt^I`?FJ}Lh+9Rq+Ro=}0sPOHfqF(tz`>fBWVzBT7 z%)U8XRn3vjr;!hEB&OPYM$hh&7M>A{8rst4uob;kjK^i zp?W3N$=_ISc0VQ`K&ZJu&%wLf>+fj|AM4a+#FYIg8(eH`@_fL}`|n(d+|DTKPwTojvQwx2J&0jQI) z@SSFx`c4(%&9)QgkYVXcsMGw1*~)mr(1%c;D!nhWRj^SZs4o=XmDwV?fC$vr z3Afp7mbK$uP~V&WSLeNDHru{R{UFKrnoW#Bz4bS!A1=9Vv*}b02>u22w~NQYY_xug z`bTM8d&w%Z(caVQUl3oC*}z+=j;BKX9Lcws^^B3}{SVZuC)KRKbkdzPX@U9`GWazu z^4c7NwYN%-!L&>k4m#HMW0B3XriIt@-|WNMi0%(t4om(AYnmlMX z_1=j!bEQ{lTJ=7JH4?MvXIj4{o7(7mu;x+@fb}x1d<^>R1FY#LIYiS|OX>7cCu2l-S28LawFF0}MK7f~1OD;Se`Gx$jINX1#&S15nL zH}lkR)4k`Aze0-o;QO5LgngdFswn^C{lNE&{GMQ&xY~8 z#19YtiL$@N`1>Nx0l#3d$xb_7IOE`-FZW=KU&b2yld1oyeD-)(?MwTKazTGYjJM<9 z<4@E-kX#g2+J0l8qxvB#=M(;?WCraINb{Mq5Gx<&F^3`Ff$%r6a+ux+1O3HQMZOA~ z{}?8@U99YsB3__?_6Mn&RXY#& zX}uI_p{ZIp@ha0ArmrkKl}u90o?$tC!EA5?ImX1sGkR^HAq8;YVO} zlICrkX_EWH=rG1zb^~Xg+&eMa-SYkQzKc=D$XzX#i~E~*_yE|UQP1PkeOHfRM#jun3tahNH7^&9b^LIv~!PosUo!+VG< zf{{C<-v*9y)iKhKPgBe3`$057|D6~q6TTogC(F;7_8ay-(7y)-6USosJLUg6mrCy# z!_(Az=-end01V&EV2;t`+ap}XD?eX zJtqjJ3Re)zKA~UZXNkX``vilnu#7B-6c~VDg#ae8>@q!<2fGO%49kuYZVm*MhmK{g za*BiJN-q^l|ImAB@N(g$VCftVQalGi857)&rT2>G6@ufW=ZmG*R~vj(?k`vxmHjsa zpObzimNbYD2ZFE5y$DOD>bW&&KR+csY0dM~atJEl6N}eNUI2oO)tmkT7Ee%LM({V; zD`Ro(`pIi|kAdJixzJV>Mzd5TzWWVWzf7`Fw}Qr?)}R7cGXjkxlz&@?5BCV=8Q4t=)PeVFBbP=&W)?P zjIW|Rhs z118Pyg`0xeXXw4a)t($??NC3ByNk5EMVm3}Njb03d`EJ~n01_;*D&qwoRcy0_o-YY zCO-fdTvlV|xQiL&1fKGCF_WegL>dK;Yp31;%vh-YZLjcUO41t4xcW3ME`z6Ye#}Va zU;F=om-v=0YCAD~?f@PLfOm}Ct1*2bi_|Ak-um>>i6N(B+CKGFd%fs5JaiML*_@om zugm^lVOkH?G{wL>n_`~TKVoO=i}Ws4pG>D695}y|=7G{XBEL1&c23?4A~#Gq8@n+{;d7|6wMoBFhl*;DOt*ca(JD7 z$tp<6mH7t-rV%~z-sO-|u!=}PKcZi71zjP<`bhjS<-*3*;v`xOeFZ6D@lYn) zM`Yq!h_uJh@0c29QFn^ShQ0NWN?5-ziL&q@3KW=adf~qEFkG2ltt8 z>^VE6d27S;E4mRt=x^2?-C=&S^VHA^zHrYq|1h@pyk{WvmE-}&E4z9&9{;Ncr~6KRtAGEY$vfjlSLo1?!T$H9E?ZkGE#gia#u>oGq<=y?5pgpScY zNN9tA5h0Ypi@!Wb;c@(rbHKB6%#>L~g*$!(c>DDJo~q9g@S61;+%8-8#^70AO}l@U zPk8j7Z~uVKf4n^+aE1;U4R0UWd;@sfl&{_4JKZ08>%QmTZ0I;%d4k?*onLpNv=t4! z!23~(IMC?`1K(2V=O_D2=xqJi-lrme@X$O_7?LF6r z1{2pn`bCnzq0YWO*B?7)JXNNB_C3YmcWVMkjE&ruTd!WG%Ai zf$bc7NQLYY%LDwIfi7XlzGEppVHbcaG3p}7=2-SOYsg=73ndySLiR4{iGi2@EHx$j zK$oH7IU~Qi-oLx76K*fPKSj(A|DQi#JnEwdA?FJ9OSz0wUG{%Gop*dx)waiH=A1cm zLJdhs@0p&e6veie1r$+~E27fu;spy$0Yy;(&giVd)$AaGR_oQ(=9iXdPG6a|qE z=@s%;*?IS$_sLT*$(*wG`u%?2-%pTX`my{wIEVt7IkIQ>Zxvs9rpW>M>GA)=gOD|# zJ6%!W-yy!M>>ONz1XqCnch(aj`$N;0u}SoZoHWEjcgFdL>}e0Khn%tE%k?jQ^yIpM zso3|xy?EdsDct*I*%f@7|(QQS!>bz#|?F0L9=_$`Q+3r%i}8cPct^)a^z|9ivbGrq`%l6Ae_#^fx^qN&2zo*4%zS9C+{bM2Nb?C17F-{ zfSt~LSJ?L;dvmLSebi8B{B)MNKa2d#W5Ic!4XoJzApUymAafg_=zKC*+z8gMa@`b7 zmOZ)k71jqmH5-cFkRm*58TVa6(T~hg0Ba!^s3L!f1!4SJ^rhmM_|&bX+}{Vqm!eJY z$P-|F#{N$zo+5n~miEy9p!ikUQ(LRWS5qv0b+A^5j$2$OJYUOv-X#S*w}3^jKh*6? zE@B}DtQk124_g8ycS$d^b))DbB~&}A=YciAgBL&wl6ow}m-0bAJT~ zNPm@Y+l~8BX@cOiZ6tt!?<0)!e)$^a9r(EpKI2yo{wd#&?>;$~hSHeBjQR$;=LQXg z&_JrAh=Fgg%*~;x;^*?6D*MUMD+Ff#0Q(Y+o?y=7K8^vO452MlAKV+Hwsk0kY7lEN z^fB=A@p&5R4Wb`-3A48KR|ucemw>Ryufkf#k|$Ab;2br0-{tcM>J4O6?*`syzeJR%HzHY*v+}aNF#?hEe1m%Z-VEMM;ciCEUeP1|2Z%gM zLfF;dIhlRu5D|`mYA1}uMPFbaH5DoyQtiScg-9*)2vj@SC-(4s1<{GZWA7edLS7`vH0PqhwbpfZ%KWUh>A z4I_>%@)?u}CrY){+=M}xMDx>2DKscYd zzN!(o!Kk1?cmNmeDBdn%-*xzQ{5C)NM>XEp8wY}Z5PpFDG&|siw#_SqpCZ)1q)xE z!hFpYmn}SGsXCUY`#|&#Hs-53ig7R35Pg~FKvmaA`fZ|LrCxsi@RL<7+b7DfubU1E z=crn?t#yN#^hB##@i#;4RKn0-r)n8j-XE_=0_N?(e1>rOVzZe?j(UddpF zE16rUjvbYGCVo)v&tvZsh;=EH#@OGdj?tQH&~hjp&wNXDj2`E6kx#|go+@>eY-iYG zSw^*fw;oeR%{ilN0iHr8+3E-`@h~U=may z9X39aiVZvmszW^PVSmHJQ9k zRtI=&8VyyK64p3Z9mwbYQmDE`ct!h#R|8cKl5BIQ+E1~G7vF`dmp{PbJV)&#xo5AC2As9KM$AHA}D z)jy`s<)j`s?%wj4I>B+8sk-8ODgbcQiSbkrvR+p#;`6*ZA?GGtF`cl{$fF}$>ZjGZ zVkp+E{`iJ!m-|UqFixacwM)ObuCT|DlU=ow%y-ULx_k#0DX4a`lfyz?zJhabs{Log zSPz@2%OB(C19)hBzIlf(zfPXpo;>dT(&eXRkkJY}effIRVd7TDHxqvEa`4XIipH4EI{v22 zlip>_q1N%~h#7uyKX_@ae$g*FPGblb2YYw24y5BT=~wgC;`({xP95vuRT2#{&_&0# zNsi1{z`kD{dzb2%?neG4^Gl4|(h5sWwck4Uml<07zFEtZ@#kT&dbf|SDk!-*^#++y!+AO&*+u|EXhZga54|Y$^ zFYC}$>G!Y+TR-e)9lDqoFJSjWH4*bCp`!CCxC8be!c?O^P=D*lmL-@sh;qJGhyFVr zUyauy@0E249XgX_Nc8&*Vy>SK^$;F}HIlheI{43MBvgD3)~%S<3l?JkHs=jdFOYp= z(D+lVr?3X}fjv5SjpW*`*Z94tgT3isf_=+W5Ao1DI_T2tjrxe0@2X3-6Ub~XScK;u zdt8@roYf1~Uq>hDwfObS9|jD3`c|;2j}S3Wmkh&ov41t#UaC?35B6C|@0Q(z1!rB{ z(LY$kIXzvxnT!6wu9}RCjS0GVq3ly^#RHcvzSHyxn*N*OfzlUkkHRhO^rgBum-&5o zeqtVkE;=fHDEn?c*XyD$q|eUgy3g};k?5>o({F41DqVE5_(trGe8uU~qi6HSev&Tg zCVHj)1#@S0;a}KRJPJQQS`+3!sS8&~e#73$drMt7+wg=BaPB}CUL~K0-E_)IBw6Xg zQpqX%X-&8Gb6wDe?Ix!oUqJf$biwO{xBL(I$sTjk)4E^))sWr<{!*l458kBn58g-v z7WhxSh!V3p|7m^>f}d@QV|9LSnS=ep&((RqNuPyZd_Owx9`?P1|7L7&yzn}mSKRC6 zZlCW0zx1l;T*ImM-zU7HT*l1Y4gSX@ua?`5b!_m@W$u8^SuR{m|LX+s`by^vL(0TG zW#C`(XL#JA=X7?9@HhM)%kww;6^hMFM*lts>U8!wv;O?yq#?NPXFiC|+ABUVzw8-x z)+5a41V7c>-}RTyGJFvKLG~x;OkT61zpdsd!UHui( zj_|p4TBg}2-NbXUPW@EQN6u}`G0>@_#P8`CzEVm%bI8EqT9vbO${VKdcouUpRW4>@MA7FMnU)Jaby?>uGQ49uKq60R6n2uhl(D#aH6IO7Zp6bn-^3F~Poo z#q6us$+ydS$T4}DWRhF(+!%OX^pS4H-|2Q^PNVKh+iBz)yR>d7uh(7B_WX4F3*h$R z`&@UPiqpmg_o1G^dpX@ndS<|7oM}IuWX?tIaGoP{Qn}>0-0QdxTDw%YoO2Xhdh2xl zSUdl+kp#bHzN_~0<A~){y4Z(_`s8Bq2n9!+udpFQGmK9(L`hN<~iWr%^c=LW4Yww-RYczNYwK> ztr*;Uur_-4vx&M=q~c`V1@65B{=FknL%7A~+wtq^_@bYasK(R7wVUW`8b7a09N{r% z7`QW-zn(Zq^w`@Kxc4z1AhAz!Ncc5#d=q=V;qwx>_w!yd@z*@gf#E;rb97>d;X1q1 z`8k&OnI6Mu;eT%u=gJbBP%WLLQIEKpb^XLz#>e1Zm@yZ=#A}8l>kec8z4~woe@@^E z$4#xHR-`^_z-9c#9qPx9KOf>kF7=z?O}VlUSG%~5FB@Dh_fM+bj87i`fd(!dQvdRJ zfq4j$bBfy4LH_mL0D*1e(NM5ZAv%Ey4h}i`h!ulCBf3mV%T$x`9d&#^EoA@ObU(P#H>%o%+Xw-|=|mgU@v#IP zS_y%zV*!(`>V)w>2FMjVake@>mHX3h@6P^w)k|&aZ56QY~B? zjr|F0q(`!aWR`Ke!FiLp8>;y^{<*QgL40$~7qh<&^+euBsg{Yt^9c-*d`6qm#{xGD zr4tQuA2>+Z!RrE#_#_};`ZYbrH({XSObFci849b&RVN(P8LvWMn)vH{yQ@ifgus20 zIkOI|D9|FH{JMqtpU)C?V9tbd|7P(q;jovhk^PLcQii_1C zz&7XtybiI&DYF#&V1&=%el7Z2K>E=kDTj3;NS-o@ngJoeFRmLQ`Dd(IyQK~Sog}x>!|-Gs z!>#EtkMrpGd5RyqN1L2K9E7G~vKCUVk$sr+x%3RDNUjc?_o=S02vUQ>@poQeE&`-J zB)k&m7TNEl9%WuM>eIqEPP<(E3J%ELKW#Dhx8nPf)?HPQMq^{!Q`m>jfobSDkU@9Y zUoO7jp6>|f-$@alPr4sp+g)dY6JQ}2(nrYo&IyQbKK&)uiLu{>4luhRov{|E=iDG1 zuZ&^B*L8+7M*%WEVx1G;$KvD2OcTDKbB^S;GABqb#OcEq3}kL1BjqG;V%P7uVC+`N zVp|F3Z}Jd>cI*SldXjtiz%luTtZF_t{?|q4%M}hG_{T`ESe|f$u}_?ehF*reuXsNP z_HhO(K)&Qcu@9Vp7H>el;i}opBne< zhr$e8yDVM>Hpemxpiufj!G2PHpM{fO#Dc%EV9&tR*m?gz;X;(fFI$9sPsx!K{vzCV zdyMGrMaj}zU`ziK6j96!`(*4vGKUmR5?#eUl?vFfzhU8ZD0KG%n{5NBP_#|-9y?ul zXvIb+wYy1=aq*ebe_&hUlPex4K7Xs34T@0wyyOL~MmhHtuabG$_OoCO#b(cF7sHjf=#Geel6(tCQe*{8Cm-D?$wZ0=D9N+~e_-0EFTewoLYu|0c$qG}=aQZ{w zqsM3XehA-50U`85o;{R^ClFpB{bW8l??8C{dw;0Ueg$9p+<#EPgK)L@%zdV3D3U9j zDepmEFhk^g(PzEeg!>wqDE<@gl8l4sc!J1Fh%>us6L^h3JF<#ovh%?64#q_rwjy6i zt~ZZ)e?^+*J>@yS)YoO;rw}cn7tvaL&yh@Ci2GmeH3Uyj&ND((^dHsEHo$2RUDQtG zMb&ONpV7^Hu2Svdn}%pBsxLi8tM+l^?hZjL%=-@2ewz4bVncY2RP9Nk3&rl%PsV{(Tft@<-tUB2V%ALp2UHe6LTKGoTu?4o}AwF+_HKj0b`B zs^JgeZbx}MyH_>5!4F=Dp2S7Es)1~cDZfDUD&8xq2CiEULv$wAw_UhP)gPAmD*7(x ztyKLo@tH-puwO#ePmFvVjudYBD;mL2I^aY+PurGra+-F0n zmfZBQx0wS3r3X1jsE!c^eB~QZmO;OU?&=u13+_1qWdnG>s*dtF-3iKsPp*!#oh%c| zmOqUk=^^R}uiwH@R*NZLTdN~Ho{ocZb%dPw>hJ=YN6UpvsSYy+3VBc#`@7VkXT&#G zagXSohuEfn22^sLSgJb6KVBFrpJQISIw<}wsOlm2`vJmuppUZZa(+*!{YJm8dWQc3 zwV&-cSD`+^enz#AY)YteSJkj@TkRt|9p*Jp%HaLH`q%V(pL7Zj0;)ZOdp&h!1Z|B2 z79ih9;@SKHo1<${_qO))VJy-Nb0P!ojd^cSd8Q>Yux}h%rl!a07JWPTA zuDW~1PkELUnPoUT3M_=l)@qB-PSLR$@Hh>S{;JudT0$r9zIHoD!oyvJ6 zU0RFs;7N5$TbgAi6^d5Ya zHh#Lah=QBP!RKRcqK-F8@4V0Wwc{Ic{ruZL@G-tQU&j}w<3Swzw)(RlO2?-P2iG@( z3J+h5N^E>DWRt z8X|vE=35<`ChuL}4pi~tj*bnc#|HL2SEF5{>2Vz^nLZyAUSK)czLfERjy6dzmzBeF zjE-&;|C&|FJzzTe24eUQzlr=$&c*5I6h4Q8W%wu2i^MN$-GVh;)%$g{P@a<(*}OhJ zp(FL=c5MLbdG;Ua$hZ6hf%P_ltp@0b@zYqVg&!Z8$UV?t3Aa~A&c~Li8_U3=SSj{V zL~@wJ4i@2Ro_$q^k4n##Hu_%3!XbA@$yp6pv}qlbjee#SO_+c1c}WXpV~ z!)ekFYmec+JRRD{d^`O4Iq#*zqgl8IYZ&X}*l!{JF6-tB3`(uiVF%SGg`9$E%)QW| z--Lf*31?7;g!=^+#r+DG=}?D0!?8O{hlWx-ek@pt&6^S7qeD@`2bSXRL;4betz;iQ z8}$MP=>Zrb(nW2AL7WQqL7qc((GT?aKOO95v}g3$qKjUaIoKay&ZsV$B>n0Bo;W7I zGD{crC%f$+@XPx{7iCJnsvl{`yZ5fsg~F`?|5@_9EnLkU8Sr030odnt;gbYt+JJd} zl;0oPstd0%eFQggURoEPEPh``@tc0-Ji~?c|HPa> zofqQg5cqeoZl!a-p*qI%!GDPN572PVX6_iz)sh( z>G_x3sdFw9ACu|R)!ByA;fP;bXA4IPobq$N{PxKAI@{<$&M8>CcIbYc^+#w{-THsQ zVI0@(I?MRD9E6o1_f%&U6Bed7IKng5nd{ickNj@-z3I#`tb>AcGjkbrX3}j)Xz35m zL^jOpjQ0rhItm=w|LTm3nS+9UQpw+?AC>-SM|$FP`kXQZyrEz8c^aEibh`AIAn%+F zQ@ZCiw4o%ngYzbH+puq`x@U&)4V;g8-qmTVhLhj`PJ;KtI&HY{kDaf* z2%4+Ysco{Saelz#L(LqWx?tvUY$QS+KJ)5z>RIbh(0m^p(?^o>C--TAv*(eE&YOOc zPPv~KqTo>6XUHL)QY`*6r-nJkx`*&E(f`Z5670X`-UD!i6Qq0ig)OxEcxUo#&P z+_lm--eoiyQBDU}__Dh5Pjb$4IgWgh?%Z2)_%6j{{Ht}RM={3n&q{C&k1EOJuHA2$ zU!&c<%o7DylW>u%1Ahzu%w>H2-P#cy4SR37w_f{c%XHa||NpgxlsU>ByGtkzHd1?^ zrsA8w!A+Y7f@kKHO`ApK&>T(RymuP%S`ruvhFC-eOR?NXF7H}D_G9yt(b|>s%b6?}$%S7!D zoR0=q&Yy`IGgrD7O22hYE@Cq-{SaK~F-=tS`XvMR=OmYQPaI;9j4^??lIq zeGP%b2dMBkvDN6Efok?eB)*|Kx~g~Z`{DaPvE1YvT*l9gQ6I_AiTMj&EUT?lvx>ex z_cU~!P5Tk`2of~j23NREYER-A1!TcJ58W%5HK~31CZBVz%=rh6Ps%+TJcu38w>pRdC#aC4s1a{{MF!= zF>g&Zc?#}GzW8zov)J@u$Zbd=Rk*S*WWKx^&NV}VQdx1d{#9&%&|i~LwHzC zihn^6=s`gf+ye|^p%VhaZ&oct)r(#a0r7{aR^!VHJj)ynb%H+*(jimtKK@ z$;o<6uWaCpYs#L!|4Z;?Jwl{#9b4(>qUJK^p)Z0p57mJM_q4MV{2kPN>J+-nePcFnt(r(yjL zl7bAHhro)@s9_9}_RISs@Gkp6q0>_CtAxNCNDa$tgU+H0Vjm6nc0!k-_t6K8`IiR} zeEK1Dt->0$bMfytdP}z?@tXuF9**aPZY(?dAaJ$#u(~f}{sjaEVQu?{7a;iz;mQO| z?lyS=;q8kc5R~56WUj}&0`ngfEV~VQTsyBC6C)5XeEl9@nD=9?oSRaLMgMpHra0rR zka8c@_@0XW@FZ)7AY})0DZyDy1p?1Q>KRB+4Wqtpc*Lm-A3J70n)W9fMZqb=kN=C^(393F*w^9zTfWbpJ%vl;bd?-m z&lkU?f@yI2jwN6kq-QdK51dk&bJP1vud$OY`HuAa(Z=x<_P2Bw-b?!LKhlK^j$h8X z8T~{*bh4xuA!9W!(omoG(_#%W*BCz63)~|JS-r3>@90i&o@T=&WXarxd^9R1y%(~$ zz7P9g?&lyCWZx+BlQR|LAl2I-dt(w7xQzfu{6dh^hYHyr#Q8+dB{@Wmoc0X%%Sb*Z z*Oh#wV{&e}6Qpn3;drE z_Zxq1L9+14{9Ge^8Wh|sc^`i{s%I&~G5_#%`L3=xn2+T>8x$6Z9^>yO{`kVd!VR;L zPKwTThP%?Hi8C1cJ z$#bEEzMZPi!H#qP8X`%hXRxKwz_)=uGN1b2Q#2L`a#OI|J1SvW|R$xns)bti)sSabP( z0->Aa-?JF&9)Qqu>@x-HTInGQeSy^B>oMG|=Q=Y9C=e%K893+^k}V2Szy`+|@^RfL81 zzd$697xmz~l3!>L8OZx=@R2$neh(sd%Fp48muA@Q=R)Ll;o$pvVr=2yZxH#O&q?63 zQV^tz4-Y)xK`2_q`ZW-{ z=DtZ+?41Cf0^x4O9z&blC!4|3N$%g+|Jbjj+8GS3&E@dSRC6~9XC1TV1NF3)NxWc;TP7 z$@~eymrlDG8%;lsCny9X0h z=V4z+Uj$~qqgtP%1z-X~FEK|0bE25q&Rqhb_3Q^xtsQ;QqT8yLjyyv)->0f&wfOkL z{e^$i@*vukXEb2Gfqhh}WiZ*U3m`n7Inb&F%au`4#yk!Cd{r~!D274!Fz35eGg0hs z`x*IN-20=N2^;4779xP-|G6hrb6>RE<7y&8HsJSGs;1+@IgdQY1EXqUT=qDKtYL12 zYI;O+Ns)hfa8*r)rx;CU-9t4=z8#|dc;BcR`8d@HqSukp`c2hH<8T({9UkNU8r67% z;kOoEcrxLPvkyJC^Oer zwdpl1d!A~SDp1eJr9lG9Rtpd8*jwW3F5AQVI(6(iJO(fP0?K87u8x`hk@8+LHy>pi z|D{kqg6A-G)O^0>;ww}~&?HYiVC5fh@JSt^~#gN2};596uOdv-{^`bjb8Bf1)u+K`A@py zMyh?P0MA!u-7qNHjz2w;N5iw9tfY*Wfwe#M2a|g8(H_#W%)91`MRO) z`<4y5v`+jczL4n};>c6wUNs#t{3lzu(K>RfoS$ukzF|*-j&w2nR5>5&@SoCGU_T@M zu;CTL7qxEZ{Q&lH(^|#>YbKwcb;Lt8kjM+-_3ytpN}X5Y3h8FVvVkSoBhrGUo6*k?g;H0)pWaqdDFA6<)0 zNyETz{OrYRS!Y9^V0qv)C@r{4u2^aMP>50U??H>tvhWbF9 z1WsL?BzbcGaQrP*bkarJ+3$gQfhk7@hkw#V@8g)bdLQ^Ph5Y_|uj(ShWAe|6l3=cj zF2$*3%6Rb4k-SJzF|NTjzX|?V`|n!$S3dS-Gj|>H0oXFxf2uBACxCAMD)v9?!nuTF zN(TRW;kOmuEd8net<1^Ph5f{@4Fi`H{$p? zm#OoOAGO2(pZ}WdznnbDljIX_w*dJaF`k2Tp6n6Pzet52RXT6>69@o6-Vd;^TIWSY zk901g0V<$#H}Lxo`PJN~q;qeP{td_Q+j6_|o)ORA3;@zOOU0k+OkrMw&KbfBU))zP z|3hbUykrPCOld_ug2%nV;Jm;uES=p4uZDB*{BHV%vwjwyi}N1)iFDQ!*5$$ZUnK@d zKi65A;`4GoXI)Tdu9DB&F?}nU!+CEBj_k8^Mk^o8kS{L%$r&$`ZDJ%iyE(tFGtLmb z%sGVZZ#m0!I^lN4?gOX(-Z9+3^tWJMkffIb5Bhi!m@U5dxT=T(=f<$~9Bxrfx<5?UiJpe_5ws zTkww`<33t^*Sg0C%w7C{zEY1d((maCe;oTJq<7Ax+5qHrC4VHoHTU^Fw8+!R1JA>N z<-Oo8r~0v5b@zn$Bwf?z-mOLULoO~ourgV9izn|YPK$s`$BFt`x~p)Yz&*m}0o}#y z8Qdn`yXej@vGD}lR_;C2oea0wWjo|0I_VAOB7rL$TJ4hDKKU(hh4-ujR7VunxX5z@M|W32#u0yr*a7{Uy-MvfeHX6mO_Z;PSV5S7Iy0|BikZ6*p*&!b(k=qBQVeK2-THcqmJDvdr_BP z+t;d^3^rzg`w;7gs&@WU2%?T+eucSNs&0$u&F*Nb7xk(7D}^`V<_cG}4%44E?KvF+ zn)kx0h95)t{Ghc^?*~*h(k<}30fEbTPE^NCuR?&1lXYLK>Y2jF4v?LH_5-TsJ@J1A zIQDXxs^iNh4FVG}J~O#h)qf}Z!GQ4YRO9^%spt#$>wKV6&4rS$39R6`TeS%16at^J zPO4frBBs6dUkI#Wev&%g!Jk^sIY!KBv;PnR+bO7ny=o{HRUX29d9BRxp5yXzCXYzZsIj(dX^3r5~;g|gexW+H-T+Cod zaO2Wr6p-^W>Ot&>fk2(im#*0dy6c&{g@2y8*^p$;eQu8Q@^-o_NWw0--6iMNnYNYZ z90Av+3q?a0mJ1c?XTo#unmZlAEe9ZAbi%Inyhw(?U+l+%ZtI2n5crvU1fe^*&98d` z`(9+Pms~17S%L!7el>Y6=XxOU9Q&Uj`Go9=11zK806oUa?=LXsep-w{kIizP3k=8h zk26+6%E{785Ex81Y$5hRh+ivUde>79O8z&{OZ?8M7YY|5z;Rt4q<$iKr~tJyOjrqN zg~G9L+Qjde_JH&YIS0miL-P+q+5zTggY!9aBcSI?i z?&qcFCw;E;R5&Jgkp8`JgPg}Po_6^%$jIa#cW`+9aVKQlO6w3m@~5~c3^LXe*z#3y zt`jawrs<1vXkCLo>`eMJtG0qe(_GgNAhVSP9dOKCm-UA9Cpc4>lMdN`nm!fWqP;zH z9AwAjb8?Q0E|h&g`&Y65MCO`ol2tID?(BX)6D4TKIfr#zaM%`k738e2vA`Mq6U*^+ zy{{E=OT&qW{(A_Vhs3X(`!Vxfz!@dHlf1K-mjI6R&_bU0lEA6rf-=ZY8;5_vSa9-R zp`uvGpMs~y3%h~SNpy+)KOUnXHqMW7{TC2k=Y7m$nEhG7M&YsgUzOi~VX^c-_#b8; zFBA?-K_THcoQL@r0EM%K6XU;8d^&|6aghq@g2E*&lw1|~`*VK~6lGvN-^Lp7_mx~q z(LmFW7301pD4NdaSj+!aOmv=(rZ`zo%E*K+vR>PZbiHOFU!GZo9}QaDP#Tv*a?0=K*>mXzuO;5 zA4$pMJXe9ei1l13StI*$`voq5#{OQ(P1$CT9L$&N-o97%VZn=;pMm+1I}i|i83d;@ zrw{Dwnezj|cct&a#-$22wnFe1-nZd-R&rG#OL7hNsSIp}Q012^8`3AD9>N875E>!9 z73%rl5D+1lt##byQwyOQg&mNU-)!o8_h^(3%f z5gjKy`fmj0>;>xy(ILXKAKZTD3iQ+6CHa}~2jYLQjJ^|QyK!&i1IvCcl3Vie^W`OA zbrF3watQ}4aepBk?8x0+f35swH10d(JrsG5i+{n_!O!0!eMvsk4-oln6<$C`!6$u~ z5Vh#naWeP}r#LFTP~f{x`bwgsj!ex|&wy`GKK>vtK=e`RfAdAju<$ZOSIAz@yG8uR z(T%*{1@9%Y7l{7OLLqogFmC{&b zd%X)T%+Q}}&N;E~q-VwR0De0!wLq*+^l%TIGN(VQPr$Jw?q z0fMV|Kd6qck#l(PpBXq{zOIh*x~CI_dN5~K9T)!*gwEieOm*D&y+b#P|G$mp(S8tm zmVdvh?K3&2hCW9X`~sh9o6YB62pyn7_lRm6@-qV5Fux#sdevt7e#1b;Fz>2Xu3<~Y z{szu@tJV)i9}Lgs9uU=fm+0W(wfGjAK3=t&e&6sx_T8&i!u5Q(6e8(V-*KU8A(aui zosqMpKcMB6Pms`D0FiObwN@=Aj}V#LlfWpd1&5@QH(Uu3Exe^>!xxGiU_X>ps(BU%{~>zTzw}~O%|sdPh5a8lbKjL}PHul8IC&^UpTU~o*>Ad~FS9KSP53O_^^Tt)3$%mF6 zz6u4CvsCT3cO#){E0pzQE{dvsnAT4-pzI7X=4@28vM+=(a?@uusan5q1!e4=M(Kl7~WaiUD z`JE>ysiCSd1&GySP`-dbGqyU$^;;vL{42@(93xxK*Q=oXAoKgxvFmR>HtX6JsOZ5) z1JpBwlUH%demeN5qjY&*@itV9j-zp=P#q=e4*H%eW^vE8I`X3A_AA~U-A7G7qK@#| z?oO!KEPd^V3BS|%38-k1e}0IL;}0x`%Hp2HIaP-Y|E%&t?u}6g8T(xUm6OF!;<<*; z4Z8Agz8=7H7w2?z<*LUh=!nld{ypkSlb`o2;k~@B6fP2Y_~X4wh z-U+)AaC%%<eTlk!!CTAF5eVKNC(;X3mrr_{ z?ga2k-b$Ab6dsSy!+RE8UO;t+*iVqbxlmnJCv&{7q7|KRlXck!qYqGRX5|CA>{aHj zfNv!4opjk9a!&G1l6`mCg)2WU8-n@(+rrP)Wd-7o@=1@PF0B{dyzgTQPJXIOHw?)_ z#R7aA`CNp0#b^YwEj_ z4hz4<5xZSJ!06aqIX_vuc|W3KW7)6>mheq=?5v>}{QMW}&ip{cer*P$ zfn6y3rs!VDQQ5+u)zMYlgN*YQF9vk<3CWq+BbeK&qt^=0%f4Os_t8G$H?n6kCtXKf z1|cGkpTW#JvIDUcPh&ruc|Px7qR5NuQBnh zBR_J`5%UJ@3)GRt76SXXBcF)*1UfPm?NK{k#{30y1$1PPa1IUc6#KXX2m~$!Tk_dD ze2hSeL&46Dpu&lHj4x>%y9DfxK8v{o0_lPNo9C}cTlJj||JUs2FUh2VLx)cnK9YS6 z_rhYo1#>}go@Gv(4(*cXm_1YaYC|iqhUBV0&^IXive1K)GqxA8E}%nK)S$3i3O36a zsX7#A-45(^XtOK)T?gBwpWDV(o>P|%!aRlW{O!HGpVGnC#LsUxu+LiuC(frrBJewW zUFhI>6f8o2TTk=n(|L~q{t(7Ae{9et`y_wj@58-ky5v(iFZd;wtxF!0{JsA&UWDqB zQB>T4oapPQAn{FIQi)r%w5P#8fqOo6iASz)|9x1O*zH|iyoGR>eZbG_F(2}tr0>r! zK5|`5HoxZ{1pj;34u8iqT|D4FYtXTTeF2|B3xJx=8*# z@YCa~ZILc|%;*DrIb`dik(`4-J`ip_Cw!}m$|YasbS8oNpe{VouOhz@^Zi*l>+s2< z3pcT_2~L<|w-@Td*BlZ6z(JaD%DhK(;dt4PI*NN3bm7^;Q**>$qYI6`I!EV~asLqZdCK*WyOH^z;H+hyi_X2xEEC6%Av%E5a8qg z2%SDo@$a!v;V5Au0l zr%4VD0#9&`U8jYFUlDkY=N6rct$tsu8VrF2ELiK*8!*l?UZIeKCy+5k>%iu4w3j;?t5@o_ZWrF%EbRD?u7YHS0fH*#uMtf z4&K#QGG`}di{H~-k7K}rSJcMdlGAp-r32S7^%IYeH-P)yl{7f0og4!i4DR>BDfpY~ zv{5e+UYz;|!|2G31a~9JWyRPpAw9|N54_J+hbS)b^b+hrM#^hEM;*oTcwFp&D|`r5 zy&!G(>a8Qd{e=v|HLA8l&*8`VwW^LEmnVb!E9-%(UVKIP=b3Y&8jRW9r&xSm?$Fb@Skm(_fjkC) zD|$6}4pR;GnfSGEIK490fjdlm8s0q^(|BV$xMQ$(qVZGgZT*!58od6Wy&B&*V2$Q; z2WE3Tc@P4G?^3~AEaOvG~Y#4>kE94ySj$(rmbeYWs z*7*E<1IcE6q3dYQo1@-F2Hb(r&G=Vb(TAa1t>lf}URYzZxdmOm(zoPBr0+SoKN%Gt z#J(Dooi_ah$%dQk`lZLNM^ySx1J%r}fF4Hg4D66SUyl>AFAQwxc6R6MJ44E7vL)w3 zfN!@EkfI5@hy5fU@&gM}OJsi+cvCp8sgDe$!XOCDmpL@GL+^S*{BdcwQ{V{yK3-#< z25Ba*79hJVa#wo}lf735pDW$Hlx_?NoU#oasW(9SWZ|X+x(U}PoyOt8$U8KB_9m?sU6_O4vIIdj$ z9Qe(1qv#96`{Ww<0Z{A{J;*a%$$VD`_LQ8KztiKiIfdZ4!m+Shf5A8TK?qL3*VN;f7eB-WED(In@Mw2P zKS*$s%%k>q6l=R1g2yF?VT(TkLZyU*9R>Dc=|v7*#r|&OVaeV1Z!{-7#FVhXQ4kC(z9#??1gn8Bw zLDx0uZ`MQ7N7K;9dK>$5!&IU&MY4Id?{17N58;O?pY9=DzZ-6Rt({!||8Y_0Gor33}b6Lv*w7 zx4d^FUTwf~h_*<-xL0_o*w>43`qS2c*X;9Smr(F?B6xw%pAfrCu2XM}FcH^6?5#Q~ zkOgmw8dJA@7sN32fs;9Sq`wv7K7OHsXEz%lAYLi=t>-)DlR$i=@UA^v$1xV-k8lw> zc)0d50CD60@kw4AO0y}3evN8hDEen`i13ZtWqyRTu(qgHlgEra&$^~+MVD62OJh)Pm{Icm6T4Nb$!SLpvhPW?nz=m6@@2Vd zIVyX-=-IL#Zow_#3vUdBsPHvZ3)gp?4$&95pGvimT`_MBMAvfPt!nAQFF1%EV&jNv z-pYMt5KA}x8YKHBe+03!&qdJODXN)jr)vIznCMTcImGid#GYs0sA@8LV=N(gf~KWc zVeoVk_DA!cRW(UJEyPpVzpk22<$_FzpDBIKjcsH%mGltU@pYDh9_G! zK0pSZUJ(BjDSTb7#y$$$Y=4!mG)QVmZ^ezo)( z>ECF$ME0(wjH&9P8Zab_`&}qq&cIkzFL`k&-Oe0kRZp19r`JN6CA_2hq1;0bWo0tQ z*Hdj1?xD&q=jW!X+r|PKlu^ua)ps~|%e-1f$EPb+t2&DF*R(*{5BU1~>;qMoBEF5X z23&(|uUEA{;?uPAUr;W+e5&>-;eeM9V84W_9V~l}^4rjsnDT+DHC*EIxy&V2HAJ8L z?|D$ZhVyu;#=O7F|B<=9=3JS>D!L#RW6^V}#&C}-dh`2QRh#@z#fWK`U_Yd)r;5+A zVkYaXs=BvuNGjgpxd;0*m{)`Pg7}(_y({P5ibmG;)iH!!-TrnZROVCB?p5koA@})0 z<$02~IV$@>s2s-!9?WMDKsE-Ib8u@G{YxD&&!5VVMXx$S_WEzWh02|hi}QR<2AcbI zRT1HOv%s^93q^EQ*L+HpoEip1#cPi^mOF{IX`&MLyY&O z+jZq+nP0r42qSi;uDnp@XYZY;LSOWNt}MjcYV|wdHT|^}4YXjWL%z{AGGJq$h44kZ zpYvR-E8bxJ54>atSon*snEE!Ipuu}Y^nr@OcnrRG4)`1{Ajke~lSjyxKHTzV*@yW0 zavzf}-^4y-@CjE#moMT60r+lUolTeD#m{H(-OYlNF295poTyLG?K5z(E)NQS%JbTFi?5#l z4Y?Rc| zx3O0J^iRP0m-n(ddN=0{u@8;GzB)Qs^3iseU(n#K{+}OZbFAw$9jWCWbFfds{PSUNmg_F=Z>IY5WS?*R6XylBzkct0G#kazSq=XiCfP3B0umaxJZ zI`o71=lm8GVP2v`uQK->{Nkh1p$WoQ@&~!^Nr%qm1qk*N3x7Y9hFi>d75ba_J*|U# znNyAaCwi>kjCqP*$%q4f>21aSZSh00l|}hv0vf=M`OIxVHX< zc$!IDtV@27^SpmKbE3;ODrj zt&4XfCSlnh;Ah!zq%K~GQ|7p)4!@W#eh{|;S2p7Ll;>_;e7W#rov`qeifLVo2vLV{ zSxXn{qDJX;bI#$spf38_^bKD^Soza*k>M0LBS~JEf_)UCmpNmFH&=A3JlCBm+_R#K zk{Dc!JRsg9>%!lpU)`C*eOS8i9qCJO%znA>F6KRg^Dc8>b>W5Lhjc!o1I$gjFnb_1 z34!xP4Ib=Tb-_0Ae>$7UzU^CYsPj9;B9e4Ln!Kl-y$n3m`74E!?bHmTV6)C2 zD*iM_auzzzf8z8{ZqGL zziDsIp<_Qb>+uj!lK;tBiZ!WUJOzP)gzf08a|Vn47T`6>V4Z!Ka~2SgUU!}SxbOf1 z6f22U>+CqsN9h0My{^uZJvs8m-=@Wd&NBY~z=Oj5%a#{EuE1ke20MaQt0&0xX1?YfCFP*k|6d6WPPY^vQ z?bgH5$NxpWgmCa1*6Os*((CAwJ-haCow|fT@6Ti3F!vJb)GLK2?23O3^AmE8ayPMV zuT$z62#EXr1v~Pm-KJL_bX;nL2ZePU$ZF5lP*t7CTS(Sb^^Gs&q(7 z=X0{|VR$7;xy%#R$+fIALQ;v`@5ysy?o5(-M<c}wzKPe{F=W{?HrN( zM^Y8*n%W87H5JL!kQBxC#~#(%KaS$rqaZ0mc$9WR<_EWtfu6d9Bkiu`{iwENUdQ|c z_jYMtd#{Jmldb^wB+jL4ADY0i2OK{SF5=eS%UK8kw?B=mW3*?4_%qyF@nf}?B~BPl zfcqHtg(r^laS{FYuVI`ksXfukSX|5(EUUtU)02tj?b5gIe)b7&K<6f!xaJJ?fOUxH zI{09sfge}6zuia%m$MRej6Kc+_b2w-Cu*g)9NZlY21-=l&;BxS<$aqtYI5uDe%7rL z2hBOdJ;L{CVqaA{lJh5mdyF156B2t&UxO?2UE(jvg`(cWytKql9s^L1*}?Nq;#abl zzJCzh4RbD=)-o@#m5%?bpF@3u^ID0`)S`78?)w)qk1_Ez;}$T#@(Od85+Cz%K8|_^ z>wHS;w=wS`d2h9@o(x^M?-eeN+RCyb>IK#OeplPg^T=%#F2OF7<4^K&zm3{s@&!qq z#K-rq;pir%FsD)-Fgf?69Kt5M>Ih-Gy6l9cFk%(|i}?nrlf>&&df#ddmp18Cl0nZ` z^|Xaa&xa(&L)@zxJMITwmkm@+)S7et2YCICK?lq&s>Sp|C-Ljzbk)k3!>)M!avzXt zYm@wFQqdebp{Wy>k0e7HB#}$z_ARO%f7_J5Nuo9GuU{fpRrG|UE?5uM_5*m&mh(gs zmUmTVzXsmp(i@%RVcr?;eZ-IKn!Sx>IQ?!d_l1DXwI0~tenfm9_Wi=saOL?0w#m1- z`#A6b_7MVy{fqf1s*y(?(+=UYx>Sq&=??To%lpCI{Y8(5{?#}aP*4^>-@k>Idjup6{i4URcXH*9>3iUL?a-9aNT%Z4a;TF-Q+%8sy#$sOZU&jzv@bF zB_y9KJ~#JHHc&wFa_P5nZ)n2>b{h03CJaLcxK|eDqM{2u442=%SbB?lG>gC7Jy&w* zDJ0jNjCrUk;mfCNLi*q6Z!k}SxYkFHL24hvyG!E2K}da7^2~u2!f;#-X=%)xfB=1b zC+&f>N6Dszed~tD-qSCiOW-iAb!_PQ63b8>JT*us8{wjNz!jh*WDJyZxNG`8Gt)V@ zgMBH&70aaCehTJs=rKF;8OUric@oBBPl7BZ{lI}G3}l0>={#3K-~l-Yoy_cEk+Bd1dQY5~*dk+T8uC7m#T zH0eDo=(+@Qxn>dl3r2U%Z918fN)UKNdM)xy4kci8g}ja8yY1-z$d~;H1fs&Z%$J@h z2xLp&b^b%v(vSBiL!iq%N`ydu0*~Fl??JsobczD{$K9JzuMz)m0mq3h!@LDfZ@xdE z;7#rw1ZNx7w_FT`-Z#7UzwR$^*0V4Ig@#-0kb7c8ITYR~`CLc#Fi<#u`F+)8QS_g1 zUK;fUv`ZeIgL&1vu191j6!}a)`*`j|lXEfarBL)TbAQ1( zT{uBS+vI%hg!zFB#c5RJJsTW)y5wF7#n<+sf)Vi7bN?0;uQYz9zs1K^+%DIlf9vNM z3`vKQGsO?$|5|ctCF6|_`5CrG4cvtN3!+!~O|MCHUuwZW+vz z=b3+AG8(UIAlQpAF5|$zm>*o&*K5uf@4SxypQ8}$Cw@o&%WNQq;8pVf_s`-z4g?=! zt|9mdbBjIh!B5b}+I$TBhT|OEM**no@qER3S_oxyM*~eV=0W5-56NBtbyn#^2~81x zrOo4;A3|>+dSCmyiJ*^@Nio4`I(2-(UD@is5*{ zen@<2;U~XCqts-~!&7}y1%y8r-lToK;VT`MezK0f@<^`uk?dZ=#fl7^Lj@~fnI53X zt&$hEo|9Zf1Wf@rGJrLn{XWRAk-yJ+O!#?`6LK9`gq8lM7NSb_tk&zoV~eOr)gXk~PW8?c(d=t?>W&hxtNOjYfLe%WRef?yA9<67?E%?wJ zjU-HnC3BxGc#lc%UhE9Xt9WT`HT(#~#!AnE_e;s$$L3Mo8TlFSGlvIa#`oeo%aRb0mRq5{Q{IOl{~Vi@(FT`LU5hv zbDj+Oy#;Iey{6i^c4Rn&3dwLb0sAdT5I}yHyk}JVi{ir#-Nl9z)oywgLvNw|`^EcI zdtb>(g|-n$^kUU+^L_-vUiJ;D6Gop3SFn#Az|55D4$$0bCuY^!P0sAkvlU3x=!XW?vuaH*OV1IMwkRgv$`Qk^PwJ zcx5ua5w3v99G+)X8?BR1J&M;OfoPVhwlCS=1d;t56jNS=0F!}RsEPwWZ=-KSc zQf>VB^+NPk;s3Pm6V6CF;#`DkoyvnGL?tJpS`EiFmeU!FK+jRFL_x&+ zIyQiN+*J$L^PC2;350XFUA4^RLMn*8{KVf&PA*X`CTAFvo*&i1G6(X&YHlZiOf|Dj zzCXkTd5-w`tdFT?(`Ox@$a!7W%ypzOh%cZRpC9>C;{S+$%?2OU^o6;e zs|g3&S2bap1e+Y7G?#%~s)_2n4jzHh0m9d6GJgBg@q@8|?{d}1IPsxS`XYmwRO7RJ z-i1=aXyq?df}a(7H)CbSm}pu7$v#x zvS<1Ets3&@?bv?G1}Iy@{6JOz=cROThO)gh09UB`SA|Pc-re+pbB%C6C_k0+%BtRQ zYs#Mg3;@UAMyqFXRMNmWa~AXGksw!>MwRCPbR zYl5Aja@8nYM0Qcfs6K4TY^dDD{eSA1@pV^OWTOqLV-(lBVLnu4@Ow%fGkf}~xbP;t zWvm11s>?*z_4X%xT&k`*OLPnGXgWw*x=IQLz$^JvUDZ?e)!wIR?RdGa^2l@9`?m14 zD}R>zz`OP|YS7S?OQ;Ba8hC%>URqr_lZ4e>;1wUEuDnA0oaTA2E6cgp6@104bLmQp zf6?GOP5j6ezw)^sd_#nHQt`gbrM~~NV5%z~pySyk;1fTTuDDY27ruF>kGp)?&Y8#W z1RsxW6Lp2}3ml|w1)uoibonoA)Bqp4V$l$-%a`!E7kqqMR_XHlWglX7#wq^NQM!B> z>seqGGuK9!$Au?hoyyM>UDnRrDzGlWmwvw`x@;>06flnD!P?lAfW@{D*c(xuG|%m9n={k?SQ_cDK5``*gKS3dS_qb=;O z^@X+3|#mpcBX;cbpd z#lpnTbbPM#McG`tIZDUJiVwnmI*J99{dD|H-kW1yRe0p_WZ@m!pJ3Xv{5l=mExM&G z+(sSyh{4=oQ~g8#Cv@zQH;7OHwp{NzHj)4cBf&2|Djlm79oH}1K^^m@<7E97@|&2u zsACU&g@fNtu)BsRApHOR+_va@Iu;dvjopj$?K;YK_|af9w(LS3-H4QxtCxZ;zE2&M zo^G)Dbu>yxC(_zr2-x=`%{=~rj?#Mlo&?xWb52l4(}fRXzd?4ZOdZ)L{w#YX?|F6P zQ^Pl68{36C@;HO+!TyzS1T%DGG}SyKe^mS>I#S8S4q!{ZOGmuSX$F563iuZz|0yyC z1w-VwGB;m`7s=e)!6ORaDSj=#A&j0ar=5adJ zZy%qTdpqaMVl2a8nDyRgxv5C0?T66VVeZ;*aM>p%vy>C_Y40J0xgBFjRgbs z9v#T9Df;;E8(2_GcIzuXhd`nlB1;B^=fEdoce#?ZXSGK9BiDT)epg0+)#& z4?CisivvT2+l(ErCA-MJHz6=qelG0LFrEsveGs@^d^p(Q1!^5RV>kq6h))kYbdx+M z1m*_6*!9nB%==mVD-d|%cTQkp-ej436USTlE11_(dNUyK>aQGN!uG4RZz!<3@C|C} zC4EBsPXZqc@EF@2)_Hs2OSvawy9c?*fcWEFo7(+rY!~K_uO9@Mwl(+#Y`a0<=fFPg zKW=-PukH3Jxthn_La-$ zred3kEc4R*t&MOJuuU`Vm$eGCFTOSZEzYyR5*g=iY~5G;;;n?{7jo3657yb=Q$Rcu zbMCcxqDlSEavsN=4%!E6T`XKgZ1s^8ThY9V;x6B=!&XD|^R>nqx`XWIW)FZt{>RSb-)%s30Dy8 ztEA@;Tc{5o>}&OXXwgQw7WNqND`E2wbiK6Y+8HE$f^C#JU`t%K8)hHngWcI+-yz0( z%zo$`+Hn5^dy1SJF}py0Irb#^z_8hfV-0j-1$&tIwlV8!$+>~uO#9?BQz+(sY9m-L zNG<@=@0NowSZx12`7SyxpV#Wo2dJ%R-%qy0=`Rs4N&J&&x!h{257*E(!vGCy&-#bv z`4{#jNB_kbXsdd+1(Ih)e^1?ytS;imLm$hZf80mB7x;GSzt!lyNA+~8+3oZIPeRWE z?Yj&}eV>hKuNLwII$1wK)*%S!eL7kDuv|2Vx5d}^^kj|T_38K5zQbhI_o5@w{893U$;x8o zMpzl+DsGwmbn=9o^SAi*x^Z6e_SOmz7LttClCHCx(-+`(Q^LxLrE@^>~Xv$Sg(>y*>E!Xm(*dL0habJCinJLPKc$v z$K-EfS0VjD_4wou%H;!V@4Z6RBJ~4U z+(viCBD0ylHrhYzG{#g-Fx$4i%7Pos>lv3j)BNV@Id)fy%fEBn?9tu?u+@XDJ$!A4rk9{TxAPW{fmH#z~-9ldv=;r z`?dGbzE^#C^^C>-rVi{`(z|IIS+?ofYznk8F>dM~RHGG1d8?@A)H2SWvT04XtEe|Z`ne%9o$FDi zf!$Fa1jzhFKtiNX9zAm21B)T+l?+aBfZbf~FVM{G-?B5QChF^VAUn?WDAU2trgpD^ ze?s{;KH7Fz^Riyd+0b${EgszLhYC5 z4TBCSz3Sl1)N@*gj@q~5kUR9zhbBV%-CaU-qXB!R&Yjz-4h42k(Z?ZI#%cq>PSM_o zHhNDwtq($*b=n(jZP8v?-PU@5wNd7Ff!gg!cEjd8(N9!nglNec4ulfY~7LA}M$WE2jeq8`Y2} zG4{z|sooA9S_q$j_J5g^K!?ey=LK{4+2D6f0KFz3obtUor^vQK;Sx-qq;%C6y;9^ zMD9Nm3SQE=Ye4rWDA+1SI?AI+{|^+V>iIhmQ(jTwnH+zi{A3={?s5SN$4L(q1hSOh zRrsRLE&WY@f8C+gUr@M%YFtPELVAe)K1G>q=ed*4s}z6ytO1I8UP{1j%7@4`c_0)` zb^SM=s-9A`O8q1L70M4Q+UxdtxaYLumdb(f-xL@Ae=%R5@176-D|BvKtoJhFg=(*J z@zWH~%2`VJVdV)GqvXaZU##>0;zL}(F&+Hv#YYPzZ8RV0r`8EN8A8bgVu+`HGs)LO z$t^4>d%(w(pNsE?sd^6P-82q7%jFua~ z$H%euUqbLi?alxDYB~6N$odVT_R6#M6?4Jd1nTG2{xP2b-KY=xPBu=TAYE5`BSWt# zx5@jFD}wn{a2n1;&+8eADL%^ z=M8bV6X z`3pk#Pz~aSji&Jr-FHGW1@vl~EdBMNS;BiWO<}z^gdULh(KPWg<)`QCDT==?eZ@4L zryR!6tMa*#UZH)|p-%~Sy7h0<6#Rt?K_IkK_IuOh?w29u{+Y%jI@b#qNRhN@{95(% zaBuzn8X5oibQ6SckvWZNbh+r^h0^nC8hcBhD&-q!JUDruY1AA8gbxWQ%{2Ta0v|+L z3vbLcXrC_W4RSy;4YT<5yNdJ%$*G%$eq39W4w2`^wVS*p!!)!SbATq75c%@5t`uc9 z^(+Tpyb2=6Bxi2wS8C2YnkW0Tsh=qRN{IHAV5+GId)QS9b3q)(AuhP^p4xTurv0@n%nz{n*`H5X7_fS(yrjw%DpCL9~ za)GAS^_|3CmHpS$vhDxmJnDmHVW6FRw=eD?sv8-$B! zYWTXkb~}_t@vwSo2u89Q&2Wd)_GIq?lWaC z$@$n+l}bM*lzl7rGQ%yS?29U^l>D8kWP44=El{2>d{t99L3{hk`?3shkE!HaTk13@ zzg_k*bJFdND}SC}kFYuEJ|E>@B&d0&jX8NE%b%m5{E+xN%*l}Y{wi7tug#oLo;g&U zCweaR)X6*@D#i#`!JN2O=WrE|ih;nKaQS8xA4uNJ9RF1W7pT~EEerPMxboH^;Ss}v zIX*zoIf*vfH+?)y^DBus8%Z8C$7KAI4vF)HqiT*l(24^lkQgAjPICdQPF*27Jtih;DD?ZkIVVZIgu;K}h8{7tIvvposF;;oW zY0newBz6QV&K2Vcq`fP19IVKeVjxK4@%1A=V)@@X?@8Nx0SkXv{t;d8<`6HbMgmn> z{+RM;J@Z@MsPR%QODlbK;xx!81sF7+ALVs&(|}f`{u^ zk8j1Y_x0Z5(Oy?9dr`X81JX&0q;A? zCyD3rb*h+nJ&dbNkY1sBfcICKBVz1x?Va)d#|uOO#-7$(m@jP%6*1Lg>;~-{@JT%4 zB8;8G_EHCYG0`nCmdS-G|AOy)$;V@KxANnC11i|afYH@DpY|q3^9F&jE^gkTr}z;t zW^ug+{rqw)$j0dJGDiaMO)~e#=qfi)q4zP2-rbiQGD$xWT@RyI=>G0~S^A`?pId!J zUaoHl{)&;4x-WS*E#Rg^jBH%VgFNv5)<^;WHPm;ZIX3T+z7$aLVPu^4X?dG?gGt56 zx$gN;^JN&x5DpIbiuKP6@6vO=kC&;tUm|{#@@9O!b)Ff%XDuzT8|j`da|8@u!9htn zkB*aKR16o%`V7A5bUQi!0t}t*BRHL}*szbmxZqQ+0*0Pu;KGgITSbrkNXlD`B@E*& z_kmA+FBs~o=TF~v&zFvU{3;9u{>Ox5@M#|=27h7U`xy8bGkN{r7+jf22bU=Ln&flE z;56mD`kV1KoQlDI`?;tW{Q1J0#b7(lYxv7WkH?aOcd-Eg{O41h_>#A<+c*FpbY^?u4z2rwJ`>PyCwnC{E|>9T)gajl+f{SQi@42w5&{V(x_o>jf4`1x7F zcR$@9TznHz&MKazJ^?v5U~#vjRM^xD{9j036N_z^SM-CNf3fISxzK`tH^rR1Z(xz` zui!sIPix9kSTwcuQUCl8!Cxo+Jy_IdIv3Vazo_z#idyUZCy>JiH|oFMulJk)+Xs%+ zV&VIg>h@Pd!1Z$%-mf|0z zK;T8$&oF<%w?-}OZ^&57*p|PQo{eDj;Q`*g*mjuui7n+vV{VN*kI{Ju<}S#f1KW78My0f> zdH+Got)R3*;TvF05S<>|d?UO};*IR&hGlFsR=KFwJpvBFHfb+1Kmx4!l54=$OIVm) z1=fq==f&3DwXeeB_}tHnG3U2q+*nI~-h0`hj5+!qfTi48%xSOv2{zX*gc?bokbRZ> z*y2aTR#)3>7$UzlQJaR3CVhgAd7Dmv-CO(<*zy_m*V%)m2MSwu7hnX~H@v|Gq1eK` zm)p}NcY`gSxs8msrC>iK{xWO<$`7~MMttY5*nF?@?(D_FQNreeiKcnj%bI6vo~M2Q z`xVI{VD@{WGl2af+dWe;TlWF5=QCcv5Sz8rUQ+v3@i$@ScAe+jy=2~s8C#VfXSWbv z1ZH@&*U~y9pgBzM?v4(n4#>Iy)(4VUwO6O`do} z^Zz+`?fu_i;M(_SKtO)uS(^9s&s6?_MTcz~*`x27{kQG=EKc(?K9NPy``!@#e^5Vy z@QTsHwxh`}lfEQe1x#}}t=9QmY%v+rN=9?fFj(iZ;pi}?UZ(v&*4Z-Wz!aBjV4W%N zX|ieHxeOFNoxeyne5zbyt6~rbmXh_bqq5h>?ZK*GoJeZ2cB9Uhtj>~uN}lR+gqsMd z|5^Oe$!hIU0P9jY*Cs1jm5<&*&$H-;$rCPT+@dZ&DppAzXZOza)W`j^%oUPH-;`b( z;#qr;T$KIOWd@A@(FUj zGOHLj@4Xl7D=3cf%wDrWzMgiZhY6?OY?YWXy*~>iM`nKJvDCp$V6WJGkWL_G*ETor zvqt(r%szLnVC#I=?C0y$lo!F?Eboi?mt&ac)1UW~%seB@Skr6C0!t5A6M1uR3)R&~^4V*IV z8B62iK)4p1I1fNZfae-1UZr0z`Vx5E-czTw`jWj3>PNQuHs74i8S*io2lnTZzXJbq zSHF3OW75PGa{G&HS!Vka*Gcc0_9BwmKU)CyIW(?&`B|{tUTeEfdl&6F$}M!B&^~i} z2Bplr2O-_BzH$2j?K4h4C^ zg&ghW&Ad$XPzZh^;2g-bm1h*ZT>G*!K45!vKPdTp0dKI7q33NV;o6~2uR!`?y`L8g z=D8Ho+4eMYEfl%u%XIl`Tn2@AOHLJ>C&Ui}1xsbV1x{Gr7s!AA{YeMkqx_k~z^6k; zQVajuLix6t+8fj1Hj;m)HqrO0=e9h){(sUydWrN`L0**9w4C?B+Q#N050WAb|9tG&Q=qdg!`jtQ4gpNkYYLf)-<|F9-&Z*tz3GusgH7A(zILI=I)g2l2G z_@1s$7Le@!{OgdP%Yx`4I)B{E zMaYmpqvNz2HXj7botNbAQ@&1MpYTYbV5;_E1pd%|;)2(eha31&21-z{Q-Tf<_)7UZ zg_+t99QZ_g4GM_>#y!7*)iqo&0EH9fo<;tS4HRe}3x&&Fp5qJ3T`t^lU-#?MUW9-g zgY%%sQh!xoj&l8qy0Jh@{*GA;B)J2M#_8uDxHF9k^kzfRbILmkNGxJB6n%4&l+zLj zT=4@9V!A+4lk)fiJzpfD@G>Yamw5;TeCRM z#Mp1*dqveR8eGc8G2*SZmtX({w+yC*{weUM%l;3+T37ElDS2xMh1~v)tsG|^1fk2> zj?f-_%T%`sP18K5Zz7NH+Cb8@G_zFhJ7LO4Wm znLSIv$8vS^uOK{Fc|qR&lK+PA1BBPVbv<~$(i}#3t)7>>%Xnba0O5l&PzUd{xio;- z1`*|ZQ2!vQ*rRq*-?Ie%h#w$+A&9VSu(lDr*+l(I83d7cAJU?h} zb<`)k67al3^6sMfq$lXy-LsHVQ^P)i=*8OS;kifksOUuDZh~imo-?8gwWrxLLi)iP}|M--Hjp{ufPUrSwDRfF5d^>pD^(z)p{lGIreS4tTT=7JT%hL%}*#-hn~02RCG1jG%nU$Y^0c4=`Lw)8sFgp@UI|J z&f~lx)Yq-~uLwv^*fg%Dy0hVXA#$Z~6HVhX0cAmCqUKl|wf_quPpD6$alG`SL1c~a z(@D<|t`J0i9r?)m78jbvjtMG+z8az_+CSYOwy3rcjc6XC;R|Xno;m@d1Ek-?G(4&6 zZghssu}#CZ%0r8;;P^OwpDY7SrGDriwa2TzN_$?SjnY43>QU!Hv8d#9OugQ>AU0Th zlcs)v^7LZ&%K66B%WG#tY?bOKb?)aK`&HgsQ}??1yy8CXSEyroq>lQZJ5kN^*I$}C zR?A9`LwvaCqNcWi+SJB&hxk01KbqPvG&dGsBRY(!b^-Qs(ozHsgPDotk`_6Sqk zlAsbV&4tn~A2Z;}oKin7l#Ub-i#g?TKuhPdFmtClb)9l{O4sp)rjI#QGLD=}JE8PX znWLE+H7-F}miR(UjmsY@>*l8m_DEAB+w0X(HcEKtrY525dYN+VOtsrfS+-7jVAVvG zr#~3V{!~4n+MSb@XHxs;ltSv$c<7x?5A}ueuEGN~RW<5EELUHzsrv9{J^(}c!;+6R zRnv5?RQ|s9aa5h7oVW7b;_Eb(wap%1`0;a4VbN_V^FmX}EqQ1C2o;?rmuxDh={>#T z8UYuZN_Ii_y$32DaQiYOHai9?WIUR0PAZ=jDt=a<)JehkjfX@Ew~a*zM(zm@Yq; zIsT%a^AeAq%RymtoMW>ssLz_~JNtYAsYk@fhlx)#$CBn3t|BH@2qzfQ@`ZbXi6_*z zk*4`@Ow4$m2Cu6jO)#JBF>!WFDBPr9N;`JrihMdmSsLXdkABQUhej z$BOPuFBDwg+Bzp-bNaFDP(mj@Qa_t~xU)w08?lY1&@Is;YIzpZ_s-gM<{lszRq z!Qd^F0$(h<;VN>1mx5RCd02Li=n~+)M0%01EKBCH)L*5%iqgHhFL#{QGy4e(CoKi8xy%?FoyT7wc;EeKasG9=7(0uB)Ay5p!iA?*7z=1V*89sb9x!0^7veQY3)O1!Qz%cs&vvMfc2b@~I5yztZIO6o#rw1` zFd(+0c38YxiccWWY%>Q1vG^X%7X>;BrwfZO6R;EI2ZTe3#U05;x%6=eaH_wTyMaF7u@@yV8L#|f}7ghOjacb{MVOm^8aAL*&GKYzO(L^Sl}114e=HP z7>fBKzf&Hdx%7NtelK1IZvsnR%VO-fTlkc8zvfz>(b(}Wg?zccP2NIH@0eSvJ}awI zJ~+}RC{8hJEBR@)@4L-S+GA#SlX(udak<0xV9}|t^=mv}d4c@ZbyU383tL|({c&JV z6D|klXkMB8&oY<99PI@HTRwIV=H#SPV{8I!*+%#8|)?GH^EkYRiC%zH5r2~ z_uWrMwJX3@KP$GJseKRjI_bT`mhDvkv%g@R_jqjaQ62>o!eDQaa~rm}TF&cWv)gH8 zGi+X?{6%}W7;3P&_B@0Am+}*vmup{#{g?O!G5ZVkSK7aEVMR~OCfGThIKgIl|ACFz z>=m-REqV#;r(ZZPu&F<0JHUtL-$Q&s!ql5RzpflqM0|g?0gl6zm*sv*|17zvWRvTUv+h5e9Bi0ulz89O^y|f6 zkgWegdl9X9^1dbOx*y;JKj|yt-%g%-pK$4yQ9s6W;xA0rXb%eYk8?oz)nv7vpQ%rQ z@z{Z6B_GrI^ZRG_pE3XFUCouV!Qr^+NAt}7u;fm`35pNM{L68a zyf?w=Eb}FEWR3(v!8uRwkw*oq)D@iGvG&7e{A!M0r#^1y(i#p1o0IPM>s%wfpQft2 z^6;JUdXK4*_-+?)X6fIz_8HAfI`fs|TfbI0@XpgGDQMWjG%`Nkw;!BmHCLK)0mW#X zSLvU{w+5-M57${ZgacoY+NgcH&Qm(4PTQ{MGv_hQ*?3-ko({Y(f^(npExd1X5koOJ zx09Tn{RsHp)_x!-_8un`!LPjo4uBKgd<@6&eq+BUU8av!_>H_N{L!Lfzo2e!+% zc1|4R--z@bSsx%>dz@(A-IfE~km>eJ+v`Q|hph9(pGkQE^~*K;XJpoaADYqnB7Hf~ zyqo&_ZP!=Ta+2zO&U5O|&+S6-T9S$~Mh@qJG4b`qcmY}Ndl>TFPR&9OK-NC}_o21g zN0qgY!69ctI92lkS-Z67A$mo=WqUYG+Tl8~t zHXNj&!6i`CUFVffL^&!2HH4*1T}S)lN#3C$f4ug!+l))S_CM(GgRI-ctK-_-0_Y$% z7V3|AS3kE7BL9{X4^Hk|(7~N&T8pI@6FT;G^EpfO@6i#JyKIRKpcUkwBb;99%TeE7 z{&MA=TJGmqkT#Lt_=mu{Uh=R|5OUv_Cy9~~JqrqC+nWW>fL^@8L%{;NW}RCN&gFDW z+S~*M8+A_Vxcv_WHAnvL-*-DWy~tfUBnJxP6j${w1m|4goI~LV<)S#97#Q{%6h1D# z1=0&e&xFD+Vq}=R9GrIIzkcmrO52gr1x5eLxrXv>gppjZ0g4l@ALJqJUnm}5 zarnxgwo-qM&TEPv5pW6VNwc{47K)eBu`M#6`eMZ20mUC{?}EiOt=Alc;scV~1S?%Y zd{9!XeC2?|lJcNrtnk1g@FW|E>!9RqG1@@j5~^2N^bM3WDc2?76TTq?FJ;ioD)4_J zhG+;rrM=MpS4l0&D~I5>I@j^f*IyrO)ZB!Bn(~1{F0## zMEAb0c~gkG{qbJq<fke&DETBsGF>l zrs*1;BZTyvZkm)I3Zdt@pzA;473uRI+I%k?$V?;SkSR|Ws^x2|V;bKeT>2k}A*_5^ z)5td87oLFdQ04JA%CgcG!Vgh9&Y91eMv0|&hVVyx&~r>frSi4H2ju{28u)s>_8!Wg z$o@tAqUn4Qg-Ac)|B}A3{?EGgcR^$t+aWGA4g4B^zmWJ>;-fPS8H3o#0FhsW3vTLV z++76GfXo9;{hJ?AfXffjE4n!Z89J{G^ z^@Zqb!hUnQn*=3`o1WAJEcFwI?*_6OrvR#_DC83rxdfnmdX;uRNj# zJ>L?)OY%na^UdR6DZ~y^oyYBKOauMybkKr$D>;vu`X5v;k89r3)Vo~LxaL7k{aE=6 zKzsom&)=M5>RE2N>QRWJ@NrCC%@7XOL;TS9+mrS}Qy~xPfXK(8BDNS`bsaPeJS}oOw7|>?=*=`oKJZR^>?PZ^ZCSZaK=EB0t_yGQfuSg}U( zOyGH5=f4&6gu6j{f^g}uVwm>rc{Yh}1uGIy5HOMShTZD-t?;TJ#8X9YYtbiI{tM&C z?xDUW<>8dSL9~SQ67cH13(N0T{-n2?oF}k+01r5JgZFaA&!u2_Q0Irhc$TEv0x7OCOVg3-}_+PcI!QJTUN`M|P*a|6-}@ z7x9VxnDQ3>75oPf-%`%O82?2$!{BrKuH&yOchIMPFO1J1%4hHz;`InO2jiDY5gYi{ zW%A$?;|0p2@aepQ`nLJ;X$#)hWl)6ind%Sme#(K4?)2+92)GKoKc;X)A^m#c%Yj#9 z|CSg###k2m^))&Vi+%3q14ND+hOq_WizVJBVNU{^Fg8YckiO13Z;Ey4MU9S?)OT<; z{|2O2=sNEkBE^`bSEwJt$FZ$9)?oCt-?|s(&Z4}m^yOi6nsU^9j|mqYqZhg7w`Ia* z#b`UdNBg+0qVyC-4yj(|`%>qhk&g)jaLq#S{mdKiM;Li{+ZQx(0^h%KAjilsWh@` z6^oYYxji7`uIsVr77ivn0f8NwZz$?6eM^)VQ2ndOQNL8+sNA!#@E1BJKK&E%0UrA8 z!^)w=dy<}Zu%vFs!NN&;PqtbkZ^T&GV>As&+kvIIA1ut${z|Jt`n9lNCj$?slHXc- zkg(u&;p9;sK=x@YxKs5dYoPc9ut2VJG;inY@tLcrFI&J5VBMsB75Sf%9k<`(kJrbz>KJVCYEvubHRtNLO`a(gzPdjPD3GN;3iVbK+cuPt+0?C=@m%e#Q3 zJqOs~8hwAP4;Y(~jd_*io*w)gSjq{KC_0dwCeDgDy7f~OarSm9k|2ZGb z_JF0n4Q#LdPhfG(&Do0WDwX4HRg13&+dV1rxO&mUas79`!_bYgeX5Dxj3-*NskrgY=86Zs%@RX z=JCwM&tlF5m%pMse9Ylv-LWLt5*rwatz2$~lOnkWY<0#yDx_Tw4$JS8W@F25l;7rL zN)HmY94Y5TnyHhcGyUFG{{&D*KCGdpVa?>Q~mkuUC6Kh&L~sJ@mR<0qaZYnL|&1 zy578e7_3b)H^Vg7mt$>~qEJj-y5WUa{v33=PZ?7-tA1s%EcD*r$)*Dxc~VL99O;Wp zHp($SkNS_FrUHmg$$GBE%_1JrPU&?@)~#0Vxb-(JrxSlm*4Ar&&(eHSvNovvI_sox zfRZJ zkEEY<9DQrf$mDSu=g*`(jc{X=$K3g?t#iiY|4!#`)Q_1w>~ekWH>J-kc~CIYXVCXe z)YB_JOYUdLcjsD;U=i*zmD$Q;adwI!*;GrcBmvG*0bQ9>RmvA}Y9v=?>RD~N zq8B*T4=}*hG=8D;G{@!5q^wjK^4;IW8wG&Gqd$d*ng|9+$K2{H)w_ z?@zj(IyC(epM=|Q;ViQ6p*Mo|ZRL|Y6Lr30u^TBE0Efq?tv(`MQRhWYNA0=FprI>m z&@}&4UO;A<&Ji4&w}CKZx_Kohoj<7Ikokt@tDVzx{zs}l?YfI{69?2+)QoM8W1a?k zqweF`?mgCCseZ8LS1Cu{epYke&3EzGlfM5)ucVE4GPD@1d>DJK`ZQW>)_k_TPVeij zI_umxouJL!gV#Qw=b_9)jIl0(l1FtunWa202(4CMVy5eJ54|mUf5>!mZ=n};?w>hK zd*MQYyS^MU*}i@5%MecI+Vo+NxlHsp2#?ZvT&By<34f#Ky{th8*iZ(MYm^t2wMFu% z5IL&+#jH9BfRO)~Wg-JvwQ_NR=zZ#A&pIl7cMyG7`7~L7N#6}bcZrVyvQ&SDm|ycb zS)1fRhggg;2@Yg^pt<>2Z=IiKE&Yg%b;L)}`(V}sy06AYJl;enS;!ix{@K`NI#`>54`JmQ)Q@AJv@|TVK{M=~+ zDIcjE(fl3PG6|CMWNx3c*zPU|tEY193a(PWhsDSGYe-MHS2zS<@$q)zZ^T>D{oi7j z1D!hybp8X5n+q!V+0_$wFL+@1OOv3WiGy}Sz@e!waV?@nM0}Rk=yUt}oXq*u`KmC|)i_ z58${x6~#NBWAXslf)U7u62SoyPi?94s!E3F{n%!i`r#c=vS2$YmcLVeMiy2m*&;b+ zux9E!rKG7dEyQ0FUsHH?5DanceRBwC9-j0D)KNd%hb#m@NOP6oU&XK4`4HOR_G!3zt5B`# zWd0#ke|_*cgylMT4)xXPTs=HmeY}2mz88Lu@s8=lm(qPB{GH}Td@}AD3XwF`hkOzb z=navxR9Er29LmU;`g5tV5_~It6b#x9ktbWQ;R$>T={C{sBt+g7|1$WdYEC}#wak~n zH-zfW-n|zhdX6Uk0UMStfM^TpxuiUX_Gm_XC@0V7(;n*RM6O#o3%rb_UPgV+%c)JH z{T%SRe4FTw%PCM&30@xW5BmXPmOfwJ50sA-bMx%pWfUL1V+F*Y@K)h<&HLRquu3=YW{oPvrSe?_sg!+GFc!aV8af5&z}`uE`q%sV__Z5W>|u_e<%g zIiS#$(yIq4XKL?WXfDNMH~$1F`O3iyeJK8HNOALKp@ZU&GEJ_ZJ1q5PLDQu7LkRbm zJ~Gqf_Th$S2w&4QjZz&jyozmq=MmrN7Xp%h4B=f;JY$+%9X`V9i`j1)wcm^SHhLVV zZ;*Tinq!UJO4#7@-!P5$N`D+gmeOgvLki^&)K4GTDnf^8)QdCu{l#BN^YZ&%Irq_v zA)1i>cGJLA?Kby8^g3BbO~dJajK_tqY8u@4KkD{9H@JQ9(W89{AVB#F&BH=0U-*fp zUi~W&>n;0*spq&`<2w+Wr1R1Gr=-soVoUVrs~^9?`sMIKh;5Qy5L3@%?l(?A?3nbS znEKH5k#62{h`0Hj4R@yAo&U$r74Da*qiGpAl_7qOoD)plelE!R72;DxZ!>jnuSonc z(KSq+tG~sU$$M?;_;on34C1R^A^~}*saL-=#NU(qx2dP}A#<1GYv_2@GimBat>D2f z#NUzgx2flA*Qb>bU&({(|CxIA3qt%QYBB76mZ`7R+*^E++|NxzvCM0!UqSoG8!nKb zEW{UypTjgJ^AhDYO#CM7BlJpDB ziN!UKZ5kxr)E7#*Wn|O{Q-56fccnaTGEbU%m(No=O1N^QXJ`*s=|i$!nfeLZ6JPqS z^gdHxxZVp(cQS5snyL2+P!r1hGLJKLf>B9>vINIj2AMjxbJKcKHq6Hd0aGU!%sZe= z`J1NBy_b}|`y0JbH=Ei+e^O!GAt>7=JWW%(S_+w=+@TcWIX{|O<@-YUS!@fu!PK6! zlMkR!e*I)Rkq;#Pl=@K0=QFS*yLrq&Q=Q8Y6 zsy!}g>&5qtomw}t!3NTP68#Q4rLv761JdMrI~fy)b}{f0JlgAti5)sW^mG(XJSI?h zX5dkd4kljL`+|qZ$b&XxVuA88JY$8!hKajXxADwk9997)#!0RMJWmT4oBAz;BMhEZ zj0qTuiSr1fJM?Yh9jX5>5k8-jzu?jPH03Rdd7}W&3Gta@Mdc|HeEWk}{VrJXwFFHm zpP)Raip4Yz&wUEKXUp6fD{i9}v)sYpSC$-aKU#E<5N?x^eeqL`4-S?H*^k`KF2md;`S=93`@r=PsGPKgYXkr z+I=UJOu_df8~t`;X_oYifbSo!)5ym7?gRXTgRf5Kneo*Zvyel4f61p~e75o$yvjkv z(&pNK=}Y6f!CNrCPw#8K9C_a`{+?Vo!50-j1;+2!d7F>Nu-pH|_+aId`7YPK;<(Eh z^o@F!05G)}tI}MaPijBQF!q)5V0{ltE(c@JNPda_*jDeQ(R>iZSi0p&mr( zh3-sH#g2Dz2dV$Uq3+oWBaA|g7gaYq50UhGJP#Zr|SLH?}*Nh(Z23{K5q{- zf)!!Z&DWgf6-5q^$~fv6@lQwaLW7aDQd~lLVD;BV=014+d7VB2|0v}qMA+Py#c7wSAZ{H6M^{42B%A-q7(TmE&!cwm9yQM%6fH%U$m z!=351%zp^{zux*<`P^;PSE2V1|G!@`Fdai%OPO>9{!`+s!I1i@A>b%KD0H*<@*&Xn zI2+(G)LnfQf#_N)qPiYK4&f)idZi~iuE0UQwm4XPFAKJ}LZC+Om6WH@ zT&(5WLjl9}Se(aL9zR&>hsC0UXLI2pSOuzI6s^_1YpYy(Ie z{^`D&XDP}T&I(wAWe$jihsAeIemd>{DEyF(yw8Jm3(M^JSU5-LbJlbLU}E7w&5Kxb zbiQ2Za+0m5T9W~@4hxQGPnV^6J1qE6eO#8<$Zaf`qyALu1L@bKJ_^mDTAz!~i3R!U zJF>P&uOQ}Y4*~TNtf!5xH|F0?`25)o)PE}+ddzopK4AT)`c21||9i=PeK}aC${7HM z9lHxh9c=Aw#11>`E9uDwTlt09;TGlo+FbYA`xtfzNPZdYLb91OJdAlSNq!jYxXh(6 z&)mQ-7}#e@P7B-rt=wB%=UCYO72en>Kfw6cjjv(*%eek)BG@cfe|!Yn9nyKRJy_SP zcJpN5NBV>6C+%V~Hzq#1_zR1bHuBru4%r~Sum zh1*Q}g!D&&qt6kxxkGtWPHQ<|U>nt)z-cXk2W-7Y=TeT~sit7-izH_Qj>wtUVUF&b z;HVECbH-_3gmY>CxiqQ3R@Hj%b*_?wD7Ip|NSnjpj1cZPwknXmIB-S_w-Q^vuluc| zc}{G3k^18u^&4S}UFvgjZjoFOwzy3I%i!Fse6tp*F%q~}f-_dmA=rFAgM`nc`9=NZ zbaTPxIWabTfur0f%w9mTq#s@)zozsZV7BW^viA!=2D8|WH0e#S-|W8RaB?+f3g+cp z;`38_BZQctJuhJQS#mY4P?&y)_B+~9@k68Ia_;S1{rPRKQSY{c_&K^xq4I0)4g0C$w9rp6fe3ug{TyEPDHkZbp3sbX{Jw z7Cm=R>vl>G*m)8#$F#*2?Oy!!PO$afhN&CdT}LYi^?eIh5L5m~ww@z@)BIohkTIpr zUJ{y*6YpN;3CTw71)%3&cu~oEax*>sdJXk^%lDA1yGRDMU~6AY^3(xd7<+@=Tkf05 zQ-VGB)AKFH{A6v(EM8FIbbg@rea4oM9w)KhvB^`P>3V2CAcnYPjlKt9zt)q27>knC z+IvFtd%~H``!iW7cA$K)zZ0Km@}!JEiBBXk`$5SQdFsEm4~uU)dCc_(+m$%Gi+-lj)Zf`@v$HEJI`zs*^l&vOJ!bd zwvh@azWrWu|1!Tf&nM>uJ@1TLSW{*8hz;Tf;?>Y`_v#bouQ8f;a`MG5V-9dFQ|+_# z{&UTAu{lI^YKnT1UMIdF^FNV&v&hdZ_iuB&O!G3%IaL4q#1E#DUlYzVTq*ZoQ{!@W z9Q7a2JzdTz;JCS#lp;2i?g8f&vik)efV78nzj9O`1@EB)1Ry8@M{Fv@U2*S~&KBu? z{Qur)=SzMpDX+lW?4I|*`GDM&oyI~&NcRs%^L>yxQTK1>iM3n+4_TV?0_Sd09eQkn zW*3p$GCYIU3+;_-R!=nca|}4cwVyEi3gs?1m#WT_y^Lx;yFLt#JeHFnTXlSJWL$AJ zA;`E$`zAsx@1OM#WVm`v*i*zsNs#ICNJ6#xePzBYc~S@m$sOst5wb!Y zIHmd5@7gn)RV97^h~{b^K(oGbek8xEK#~qh>uNuLrSldVXof^d0KEjZIMQN;9c(=m4>swCAx|uFSO{c7yafQT{}H zix3;aV7cRvrG6!d(dyi)<^#z5Ky$p&>8`%99Nd5(h&31x%VlP;!=VOTi)7HtXmm<8^M~XkHddUQu1j$&fxQ zDA`9Yu}dkh>Go6wJF4H(eqM6}!9kjrwq4Fya4yGvDc{uP00*ui__5nt@AB@0$7WCy zA^COO`AMkwQ|ZOF9u|W%@z8SkLIu`9;bcQ-CgF`#-t=Mo|+3@H*2_)gcKaHi(v z0yj~7?U&~ue1USb0$uc88Xh`i#hlN>5XcpdI)v|enuFco7a5lFPH)lei}FzZ{}!>} z2;n~^S55hE@tH%!_dDHesb5a{rx3}dHv4kAKYpq6{qRxA<$+&nFR8CNzZC)G(x@LV z)Z@L#T8Io{BXTRcZ)%TL+dy^Y{+ zsXZ6b9&*qGKf8@6*AyM1{tLhI5gsne$30y-R<-x{aEnDt$#bxu$NZ`Y}qk2)EVL&D6PN z=}Ebd(L7z}0%fl6q^=L)>_;qtGUeo&I>BxAhcda|=a@RKci8a_l(Fr#+aXg|u0Ff6 zS$wUZZ0g*3df7uSugd-LT2prg8|k}1*%QJsF?AfXdvG_DJt;YGQ%5eQfz{tb*`vz$ zuXFW}vUyzhm1*iEW*3ICdnAu&>cuYA7s{qHsNn}wf2r`hq3lko58OPP^akyrE1OzE zMGbvSy^J>pL)k12R&O@-e7$~Y5tO<4oqEl0L)jwfbEN!>aH*i|J?R}a_1B3G0cGC_ z_sZ1sIQNgwq3npvYfXJe2EtqgVOwILrPE1S?{o2%s z4f_m8%+~(tYHATptjvMLGjbs^)nd;d2Z>d}$2Zkulq-<dzHCliFPHniz;Do7i|NKs+GFLH`dsQFq)PwC; zl*d@gwKgfx=}P&$AgxY$!<}xFxi@%P{_#vzd^~ms26=Qv0!@bnT+ z40Z}BH`FtX+Qf>tV5jDKj`U1c-hHA@=f|G;vfyCiZ|&LgXdV?4-;2)_JfDc~4ig_< zMM~l}@N5^}E+$^q-X_ms<)I|zw`1iESiGdfJ|?D6TKWp|%eUh(sf~&2)Mw=FEWQj( zT%_|;Z$ARl~I(*5|-CSbA%*ypQ%x`Nk9VWUz(hZ3S3JdV=s#vFs3~MrZaQzd}nY zs<{EnK9TPQd~Z;j;$81y*`wO)?nB9uVA*y09Q(8v63aR*;TIl!2QMT*;dNM+CL9v* zH7f7Abi49UUB3mEzM}exKO*NvES;kBO@DXE<6)`xdXoR1v6{DGX|Cp~{kq>`{9noc zf!1uc#?re8H$CYY@>7V;hNb%`JLswdvL8hld!a}~x9ujV3L>Q9y)4vf3{ zkM9)@T>pmg`B3uSdGAmjgYi8hF+N=MJ<6|AElg-3#>*zr$~Khx54hgv4vaMj=LLMn z#+o56LcQpcjr~H?i_!c3jTBDqKPp+rq25g{K|>N z=fbJs{RsTp z1BKzEe6igJflTFtg_F|X0|Dh9VtBsxmjud%(}3Y&dhZPwt`i!9;n=NQY)XB`+7A(` z(erTNTJdFJXruC%0=F{Is3V3J$ifbRyY<(HMylT{ATh%`FqC+7*Pu1?A+SWae;90( zoC5?_5jOaaCo%Y~#BC{G@CW_H{1|*rdlv(2tDJNQgEugyv@i9s%6$Zb5@%}#0l{7L z!eE;Gg-I`vzB4TOes=uR&2NGgkn;eREOPaN9Odtqj8mVbrTJGZ=_Bqz@OQEJChfPdI7X7b7K^(oH`CJj z9px$XzGu15L($fHKA?dmw!lGHv{*U87T54idlHLo$|9j89Zu^5MO`Fs2bTJQvB>q~ zTN`9vhK1h?#}2Hm;!DB8MZ#4ff3yTSuyCBLn_%rfQCac%7%c4S_8sf}6$`DAmCr6d z23EEBizrVab^x&I#ixb^@5_4#R-^bvvEa$)_<}=yqB8f#f{C;nH9wR5Y2qKo0!k;* zeg?Mo&|^V`^sIpGQ$4M~*13e8F6$iTBgdo$5no4iOU%D9g9R9{>F`fZ2+}h|7ozzr z*JyXfjzlN%-g!v#06BjVwIuygaFz=91#?Eo zItk7jlH0;o2k5b$ybc_$dl~W?wwl(n&6^u&9{N5#EjN9NtsL#gbJWL;EuYtZ7w5f^ zBfnX32DT(u4nIGR+c(l;^`B%EqIoXI@2Eei#aY__LXf`s(`iv0SMf1XE4O-y4s zj{F$*H1V@yn)b|4-!aAK4j;r+*+ws<=a~)Yk73HKB%l05`owH5WIi+5RQ3~r zv31-`et+q~NY?6o5^U|qOxE_(ei%o2_Q_LoIo3NGoGf1E&rQ~ly8a>cF*;=SB))&L zT74Mc=sY7?$#JIWSHve0enRrZzqinaa3MGYB^Q@G?s9dV@m~|*>igu;c5Bv_UP1Hv zIdn=G*gScN$H5h!gQN4}HV!f$XS#)yq578)y2n@~)wyhSM!?L^( z-$=$Loz2mAC0`DX;Jv9oVvzcQot2{ho2u5e?BoS!y>L5C4a@z+9dR~MyXUR5Or7SC z!TI`M3IxnF4U8Y4e9q}SL&{}zi|_a-{r5U=Pm6O6=5%m=(p-%9k^88jeKj}-H8&aP zt^1MFB+uh%-3QWL|6m4FW`}1(dRv)uK-OMrfw|x|`e*SkK=w7_`+@XU;`4*%d7Af1 zcWx(8LQiP^iRM9_20iDsxWJuvy8hM{Ym~$9$TD;Xv}CLz>zCh&-U=<1<3@eY%F}PT zvIh@z!FgG8<1G)Xf5I7|_up2xy3hZA%1O$(N&P~$>l12yu^c!kFQMF(*7cevu$4Co zZC+G`NsmqYfw z%Eb%2e~;{^R5uQ<(Df<%1;!i`zsAjVWG_}FEl0X3$17X!Ul6%NKbLH= z(OM8u{xoFIk5|DGqSW(UIpo|zCstz=G6b8eTwPNDmS#Gj|jw&uKq13nW5+JbeEq}vP$MP zkUmnmJSD#~?z{)2yZ+>$SD&|ZK4#FL8;q(yJl$p>eFo(Xlwam>eGK)72Jh7Mz(HLn zgRdwT&6%ya%iu4Exp|866WhtLI~qdG-TktOjRNP8-gX6V^rRo^IvKjx?IT(*`8^1& zb^Ct^%4oOw8A68`gJgltIQv1w-!IVT%1&i$&HxAx*PdMKbYJt*Z5)KA{txw8h7V}Y z!)h&s;SeeNWaYSaQy@^Ke*MSO#K`rw{H0ZV()4%PoPlzOb|Pu?`c4A&J!V?r+sPu1`+BZ ze!0H?{zIBOi{G#Q82_)Tcf{9mpm!1de8T62XdB@+Qa_2@FCf}qIMxu58qgew-pzI2 z=Rn|Iy+=jgCEMYFI_hgz{W-c{Kj*+u-REO%Ni`erBcy(d;z3>pt^DJ zQSFOQ6&wG}5d2K_rc}lXAAbUZCxv4Qsno(wD=~z)Ui8Wxkb0VzHI&CrHlz-a3kl^{ z^m#}tS*n^cw-DMjwPMWK~;+9ZW2vdlj7doRbY|AaBiIiKbIJkRSv?FDu_dSB=ugCeg1 zcLyIC2Z@&y()+oqRdt}SU~%%nMZXP1DPk@N}%D{Dn&J7~(Xdj+yu<#`y@;9X#`#b_Jhrbl< zuIr;qutzC~o+IZna21Gu7^1g6Pe!pxruE+~6nvjY`8VNZnbr?97Zcqfz(dpOa8P3% z<+(GhmuU}otUpok27XWZ4P7^5Q^hA{T7Bd`Eq(`LFVAKGx@q}A^|;tp@yVGM+174> zxGkJ3)8h1Z#7~eMplNaZ=<#bA+jpXAk>m9x5PwPnucn!00LrDrzZ5@-Y38vm^`6CB zg|}>)=db~FDzJtTAvZklrTEn zLiNh3!=A4iOas?Q5XY=~tLT8H!O2xuOZ@c&ny<@z0Fpf=Z)h5>Q#~tr;@LD%>t`A+ zVuSx5kQ^%fLDS%@mr2d@nuak=Gyu$jf+Lu}N7r1rv^M%u0E z`vA!+WFt0>JZ_n`7Lr%9t-X>sb(@3zg8L6)!xlrcv zrqRivCzs0{+cb_)-)wTD7(-2CZ(SFYyRm&H1*2EhSXZ|>zF#hlm;NRMdswDZh1L@kEcNDFAgZ5 zVd^G`kq=VMTyH#(`ZQ+I1Z4-L+v)pQdqDGj=|~kD6ih8I`}Z|L`b5#mOf4S^skbz( zI=!hS=+g-|G(!3cs)-vt*Bs%xvz1FAJ#!r=U(FGnA3*v+&8g;|ODWA0He&ik&B^9c zn-Br{F+E?_AIP1h^YQfb>^4d$K<=Z`vw-Pw+FzRcntZ;PK8HbtRgkOqR!sL+|99?h z6pPtB7t@aaFSkzTr|F>1d-4hefQzXkHUA!1mQ`My@{IQXrZ(z%B5&w# zeDlN9N(pd7-gWZ#F!hA;Ci3Qpp#oEPsE(BPgybbLH9>g-dD>rwsSCO0vn%EO#Fv1n zleu`F_=MX@miGRRsrb`$aPUJOr3A*doPnth91Aeu;jth2qmxad?}Deo(JQ`?K{R;! zN{=WepAnxvcw||bh{@|!AMuPAE)6D6l>)^7=lvu*IsH)_zrzo(`Y(EYC_n2_{vB4o zGk6On1*u%hx3wtv2cRg;tx<~>iib6Dl@8@-oHe>+ySleq?Xr|Z|7aOPXy zdD6pz3FT^o_j#RvC1z`WnM8BxTTKiRJ|6KkWiE$_3YGyofaev}XA2NCaq%^4opm{owsh{ms!8&vOtD zyt{7apdLnN%6bT1hu0sKYqTGHwiH`pv{-r>z}HQB)iAP4`C`5*Ilqx!p}Fj%`axv2 z%tc8*kP9_N2J><581RjKm4g41FhZ%4`X~B;Z<3tzF}zRD@jj=oJ-miworMq6`B?I+ z7`|IMe?E>WUU(0Nhf3ij_;fCU;fmABkIXs;d>_d98AAtz{|LS<^4?*{;f4Et=W$#y zhVFCpjst9@+>W6O_1@xl%X^CByO{35G%$4Wf;hYw!30Q}VyBV6z& zR?gMF4?oeGN^cv1l^1@?!7K0&lsPN z8j0n1OD_TVH;G>l%enrlEAfWD*ZFICsm#qNKcMeZ*}s%d%k2(+r~jwSxwrWbNnRVv z9@Tx)e~55bO?6l{L;XH}^-Gd|Aw8+!-z`1kST;=k-u_)5KR}HPSa!Vnjr{wx524Ii zpZw}Sz|!3p@?f6y2EH&;-om+W2LfyhI+gMl6dStZe-P*(zH2NUtm|u_WGoq#x?!o) zFB5R|?vh=4UkUVPrpi zTnKx6?6zC=#)UKh{}-$q#E(t=**cH2ZV^5S7VT5M zm8CsmSTvIltgnHk^JFaIn9}CA$=}R{u+*1*hvvzxPvRVy!%n}7P6XCp(jSVQYLuU4 ziCz9$?D&TAx2!|rH^Yva&jpKIc;wK*4jY|$vz~vk!yrCL>;Q`nUDO_~@qR)eM3>R=FvF$vPIo|t&zMsGRqB@xd?;KSY_malwh(wj&MjE*spe(_VowWU{!f}C4!k6D01O@$U=H!& zPbC5R77Vtp<)kp>DTM2a_Ay)=aTWx$?+>jDWubt8*zM28z%A`5I8J)VJB&q{iGIFT zMenBm0O2B_Z$pTKbM!pv=jYukd1?rJB0Z4k6{u=fm^%?VW=Es~@gxf>Bd^wP#`&UX&QZHga`8w$CK9z)5;)}S1 zyMeBYN4>ZycRlF=;$O|SI^0pKv*?c5=66*8v%2n~5Bx^9i9c=PeOp}xD4K1!NcmP) z5gX(l&(=Ad2TOgD*;>IDPNlwL0qSOt{I0x7OY`8_BVxNfAFP{&6PP`+SM#2hazL}S zUcEy+O{!q)#Zn+s>0YLiSKZ`%SDS5uURDjo0&|wO8^m+5Jur zq2=f$`y4L3wLv%!*pjp%m4Uf1d)IXi=2gGN18wJZn4HMKa$r-*wSG6I))Jk>+T> zwOuB2bn}Ok|FFYncd9ufVRkz`l(yKqV&)&I{XGSa{`mtA2gX+ayE%9_wdRd@9PFU< zn3=;;zdHr&T=AWn+F=6nBfs-lG9o-^>O*p_1B>OQ(r--zUlSuo=<7X^2C$2XE1bs% z9I&+C&a^oBVry^N6+{#T*9@KGTYu{u)xBQM;pCrod`Kh92;_J&SclqhArE*i;@EF@ zuv(Qb?E6c3Dz@_;SUc74VwXz(1`0Y;-N%zpf}IlX0~9_eKL@b6UGSzip{vuhynpYaM;|&p!??As zVA1KH_ABW8fPjWcZ>3u0@y|k$$f@+ajORj;ccG}2@jF8yz|=0vO&3p;`33~khX}>H zSuVH*0{j|2uo}8dI5(e&KM|l;p_4=HpP8XQ1aQ@lAmJIghXMpyWS&--7fM^W3y_mGq!P@O)j@%OdLg z4UW}0SJ^l^J$X7n@cJSKQ&9h~_AUnbvHk5{C<~Fjwc;trKUsL2Q2L|x{pBA~E?t@W zU7=u=&dJN|m-yfcZIp)x6@8EJU=Z5KHM|4q9h%22q*d&J`}3i4?si&`@}MxvvKZ+h zKk8hukZbd3&Kl~d{_n#60^Wnrfa_VHfWo0V=L=2Ndw3yF)z2LWAs+Kz_%syWNVvV} zMRX?CEQ3(NzEpjAp>^VS1v?^rlo0w)0CHe`qkiu2vD#N=-KxIu@GZ)3woW8kQvL`C zKjWOooO5ybDpF%Q+)VjI4gxNPuvdGT{cqk*JM>i$s{4S14(dDmY0U>DNkjNXT_*x0 zQV<~#BE1>p@;K#7#P~=z zR|=`&1AN=HPdeuC_I!dJ8v?OeZ8;eMKDICSTMDr^#TQBZSP3LRY`64if$vGphsAs7 z{KTjJ1c;xnK4RZABuCq+5WiFNLPz_^<7?Hw<-34!y2QgdpnL}3DRMx9M2K)7pRNU8 zn*aG@A>qvT{cVLK4$-Atk3{!bi3_^v>(lkrx0ipMqll-k>xJ*fdDJjP{QNVNtCurC z_qoamszc=*Bl$?Ee4asC4Uki&zS_#~dF_Yx-Ud- z67Dy+b4m7p?H7o=EIC?m?NePa@{{UZt{=qs0MRz;KXZLRt(s*^AS$?~VsHtzd>TYK zCN;4RT&(&K|0T+{!<`4gMP@D5_o6?3^&T-I)V$bXIJ|UjBA_A?`bg3ak^RRmNT?LcEV~s!gldBZoo! zYT-qjR_ELqe_~S=S)EL)A2}y(<1dW!y)ky*{YV@Xf6W= zpc0_^OzE94O-^5N_095}nI`_Q)Js?Wiq5l})Q?B{g62^g#jZ0Pk`_=6S=cl#75_3M z``pbNs%doiWXUU}=gTyTo$o40J|ZA7(la&__~KYdu9sY$Y4}z0xRCr$zh4b2)K{5m zBfYYwVW#TisYzS@$b8qKxzZLZ8=IJkrAKcUn7NeZ_LE>*T^~#f{`Mb<@ zOugz9korJ!tfpSZAq9~7_*ycy-e~FtH`*6cpU7Ot)W4d1l$2%qebHe|z53%J^`Qh~ zOnsB~m83+Tq|jG|tMR4VsSkRMoc~ROj9CgHwVG)DC6i3Ur4*Z7bvLBc7it>VPP2{j z2FhzQ4Y&B2mO`#8@z2ZMI^^D!5oN&5`>SZ2z+tkmOA|Xh}*RrF_ z)Q=Q^45ZBoY_y<$aH_FiTu1tX^0(^bubl+x@#2p(b+74pJUwG17o?cF8$>68^a8m@ zo4VuVIf3+x0-`dtj*m0FhQ^J(_L|x?+DDWAO8bj*pXRuV8`FR3`k%X6?jxAq%r(D* zA@?ic7GZh~@(l`dcgY+V(~DJC%yTLKJ3UW0+K^W)z6VTCQ=LDLhGFy(F?|W)7hZY< z^3D)r1EvScg8_MC9lhdMea`cy3I`q2J%zsodGnNqkPaw6B5w%?mcGZ-f8)Al?!6B3 z)=8farnYGgH&1}-}nkmNZM4tjr7wHkh)UB!m zc^L2Y=X&BrQJQYbN8mYK{4AIn%te#;P#?3bdzd<2{a_yDI$)}TmnAQF?v*?nrt+1i z;31WsCK{M@^6Z|sC69#3_w-)j`CM|In7m*4!ye6HV)7#G`SWmn&w+2K-=dz2)WKVz zebq@Bw+sevx$;e_w+Jtd`h}HeQtfaJz2{uULKIftpnfOsrII(KK5oqsdZ(&BRNYbg zkiB!M#USz-R_&BtTJSz6AWp1WrCdd?=IgQQ4!!SrKkZXY4hXDrICb7%B?p96A%}-~ zP|n4~htm6m&nI~;OsrQfnXjwlRxq(pIRL)o_N_PDeK0Xj=efR92v2wx^>O!#oZYme zBX~=t=L!@0eFN_?QrLruCuUI4W)FDJ5S^0vQfwTb4&G71BgRBuo%ea=STPwB0X^4v z*%rU_9_qtTzphug*BDdF#VQ)_pS=!zqbT;;Zx2Rq=W$st@{fp4iP1sABLv?qTe)Zequo`f z_RW)vJM~v6@7?#zj}OsGf|1n%k|bUc;bpJ67bA1@{N(#Ud=QkcXwQLV(hpQGiy@;VXn%6$cBMP0T{b&A(f3*(pI|M^L zG$-zN^wi2d4*y4UiCFoT^6LFhF8hZNAXs_(DMRTbNqq#G2dg|sz+m84UN}}3JAHZ^ zdC;^UD|QMHgY*K)ePhMzsxSF>YCfmJ@dx`4N&pcn&S2xs0SLJ1*cES~K5eH@Q_sg( z{;TFT10L<8E&q;GHeDZ0)f?^2S%4;_XyWkTmqKPm$2K*%GtGMOAiBf zJ5KXDmS9>YW7iGJd$Sga9~iqj`3&nh>9r^Rlk#q@r3?&SiCt#ueqy~Tx-NDp(9hp` zk8Pl(So}1NPu%2J)_f`!S4obD=BfMXV7>;6b%XmovwSIHey@9>Jiqx`tvGu-Vf_h;lN@c5YFc`;^{0F4i2`FYus7n zf7gEdHnyD4z{*k@F6G7o89Vg>Ym;z1FkgR;U^#w(Adl&4C?CSEjqCkrHy+sar=NKD zvYi#99hLhPSo~CaW}-DzdSQsqFXwO!NF3~Vu!)*Px)b`p(EO)e%!Zn`(C?M!80<>n z=A$n~s^9qDU~~O+ayfb(U$xCs&-QWZ$7Wfy6WILOpL;LnN$toLU@M;mb5{#T5bX2h zypK8CWFH1w`3;!k@Um>dHJps@UV2`$9~8q0x@7z60JhljPR+LZRsXgRT}m55$86Jd z29Nv$K|fXhBV^$4eA!6tX2wdSMapi`&UX_bJ=^Yyhgq#QNr`1hIP+>I?7m3&%fl!TMD{ucGCWTcP=<@HnAZYzG6t zVwsw_GF?UqXA>;tK|axwQqD0TGNg7cLNTe?v7+kz!J-z)vq;cT6zxr(yh z!Y6<>VpGk7GQkU+2Zav*sq7cclNTPV`HJ!$I&UvbD~GFm=&PS?Uw=Ck7HQ8y`CWH$ z0tDJP{O$h|39U?;ljoG z+*Mwgp$!a&JF2wkYX--REN{cpoB z5PF0$WS7y$dem;m8Ey5APQtbF?Lc#<0*yA=wb zrQ=TJM-YDSejeaMp|kFV883Y2Lr^$F^Bdt?$&L^JDC4c5E5u9sC2uJP|zA?WCZp&{x|4Ccyx zjlMoP_ksPp=Ild9R3EZ8={Yn!TIZ6so)>67t9%6eQ64a!4q->xdU6 z1|^7|Dn1Xe<{u^y!|xDPzcpB6iNaUf3eky#*`|KU0Na4N{S8sK>PCU?;>(7J-iyG$ zU4nuT(Ht=Nb^WJ4U+uB=JNjbu8s*FR^?U@;=f(E|{(F?47X4Ar+y3d=0~u?hTpIsX zav+1)X?h;@U&sZLHt}s7f0Wb|)4cu-?OpKqzKOy6ly7kQNW$Vbg?JC;NclTSAuz;; zs1D-yoIwu!fe^o2jJR~4)Au{hvHMjU!1p`FTQk2x{II?kzONYn(Hjym<@@>8>GwS` zR_7_cWpdzw#6l^y1K(o;n1{rt%7OCVthu0Aka0^R!GERdwy~4+`|Edj=&>o{n*skR ze7x%fv1Q6_%2}y7kjl4T<02%;c}98-pmHzOqop2#9Gz!Cs8o51In$KO7aBTcB2`vF z&gIGp4Bg8`Z(|^5u==G#6uzO+E#&ZSb?QzC9a27Aj`Fb~9992Kj@WT7qx_5E+hK@aw)0@YtRvt~ z>ADwndaKZR$^Q=ZQZOVlHl{x*uG8JMK4(`oG^GM@%Ph{h-`~*yXCbyFNIU zLG2KGO#N-Hr7yGd2x6a04=K1FV*KWn5O>jcmaGCbe zxCTiPIK&_2AjGBMa(G-wGXB$COw^|`L9B1DGpHohSZ4-gDNstr+2($TB_7fP+iV7Kb=i; zgX;3tLnIeznm1^VVf7s4={GM_u6FfX(gR|eFVVSDwdOobvs@#FLb6DBq^3!~jgTC` zW1Ndk6UQ0%ehbOzXAuY_Y?>a@oL=%3@%0n`sH{V%<$6eNllhNna(ve*kMQJ7BbgDI zUzh4mkIUiNrqRj2q>gF$`y>C4rtv=MgM-xB97NAEjl&2pGWk15T_(OU)5x-F_a;cq zl=a;-I6S}9Lis+J2Cclw8C;lpuBn*16w+h< zo*2s6XzHk4kaJ||>&5tN>Natm;zf|2Bj+enw^(z^Y2|O4x;gqDrI$z{oTtkbYlsU8Zgjx$#mLKzft-3{Bm+%Jofe=9;visT(f*Ur2wufD8hqrtT^R zwyuKocT$XC>g3pd75zTNBg-BzbuW-THu4;#w+Pt8)NN4CXZp*Wv5EP&n>xlw9@tI) zp7v+dbIf?cUy%Mp&R?cJB7y>>*Nf0+>W|m;H@#ke{`IHc!8;VBH;B$=>e;UTIDLP< zka?J?XW4q@H}v@t71y(t^a`q9*mwt|e-i_nsrO5tC8SwB=s3mH?Ueg9q#H$dpgwTP z??c8GzrU$d|2Aa0DK8~=??+?^nu?i({<%B_=wPOk_HE^L*LhvWC5A4@JBGLCYE17| zPF0@rSuy=Jzvg2g?{Y4v8IS3;RQq%7Hpsh0{rTw^wWlTTVL8`edL9eU-63x|*?)FD zK>CH=*Yh~GvTQ5q7t;R@c|S>!3Z~D}p0_-`?_#=_^n-)Pew_e2Ut+ok*ZAgvr;H0{ zdSTk9xj0XshDV5;jH&(lTzCe_c>_~F>ixTIVd@y22YWe|GW|JB z^$-p-@faVwb-?8}Q$M%lxxlM)22B3KgS{2t?N4^g89!oj#UU!RUk+ZPz>qG4$ytma zo($eeVw}R{xnhI>ukKfvENMrEO<9zf84uX))}mx&oOKl z^=Zkvh1FweiZPu0`u|E#9#$t;kzhKMxWJ-oU{$L#UoVng1gvs=MLs$9jKHd=G&kte zzIm)-`{E@uuf9O%?^P!#Khk%l%o(xD7M~~hW->0|L`-ZI?h5$$H7!|>iI+9U>s!pA z=2}clmAM1>Rx_rA`n&sc9B=^mJ}YD+GbX65uEV^o;M068#&>8=%B#L~Ox&vHOt1X- zN&h&9TCXN;1h1n9CAxjdgg)>d7QY3?_lOS~e99NaxN@Mt*HvtjE||8VA4d5cqD?e=o){$99Xrcc=2q zW5bkp>XU6ah_MPiANgL9JUz8$K0bfXQ`A==W3*`)U8h_D-{)+zy$PfDitiSD%5BH! z@Ytf%x&rY1OYQ3AeKA_0`3}F!>8m)PJ}ZA)<(ov_ll2h%rOLyP+#_5s@Uxt6mSAM4 z2-)C2S-8~1gVK4iU*v`JF#L~j;=!-`E9n)qz5TEc{MRpjfp%unE0llczkLFO`7u0L z`&Im!ufuQ;(H+76tbCmq+N1t-zw|Cn`eFOALmfl6>Ak@JrOwMk1ND6B=NM|= zzo=iE>*J{3b)W2$Sh+*`e8AuMI|a^1W916b9U;(B-~Y5N;k@?AYw z1kM$s30A(O=YXSpm&)l^6DVy41g;T|GgkIr$O0VkRpj1L z@2NjE@TKHhvGi^!K7)Xa^=4q{`N9n(zqjf;rQOv(7uZjf_Zxr5l0TKZ9B2{)D3+|y zoT%lK;1u<3YyY*?PI{NHL}J^$i4QJweJlw$^YpOzB(dl7+B<1E{SiHD^c-q&-PFeq zVvl#;nm~jFu_$6PGBY!q_dyH#2 zPoev=e4f~?od4R@lt<7!VAof!@pEijE&{uY=6#C$5nX2-@fwsvjzu3ZE~zukw>2+Obd2;8fh{)v z0od7jzU_p(H`w`f%~jiJ;X`1jujR!izp?m*vC~Mgp@MxJ(Iv*-iXFF8+^Fz3@-NHR zjUBI`aoAMiLugI~J8+7I=jrOx!Vc4UoI3;T{!7-^pg| z-NO%H`wq%Gwg)k8wJWxJLVIxS!P;lku3URTZNVCzgKd}57%s2}Y>6YJu?7p!3%1+CY9#XlxiX87#4K>cfglJ{|0+3 z)x)fP8S`ZsB7I?;_-8OUR`1ES`l-=&^cvgYFIvy3Pt~6ABm5TCMxwUi2N%ep`Ev%mvWfAjPX-^EGJ6HuO+=1D$Va-p=yv#h54dq9I^si<#hy zxwp#w4eTv!JMV=#%B7z_NxZFb3J^&Y^~Ii^@d<4>D$ZJ>c@p3w_6=! zvWJ~M@}Qes$>Szu4>>+2Tj#gggMB3@0rrjxnh18z9@r^54e{AUFUjtotoo|0`cZbD z!=<%1joSHU#YNd&?EWjb6>O~u$!>Qz7Iv$wli5u&rtw0MV|6zjG%s@;XVE?gYX6Ga z$Uk-R3kG{gfYp5C_`-se@}Y#0*{0_f`t#}=+s?SGKVG0;i(%0GA@a{K;^)Zu%5rJg1tVubX&=oa7fe)NN$KUv`kZ z4W;*K??%Bi2~I)jTf8wo4Fzw~wPx8JQ2K}Ve--Rgen43}KwFepcsXrO_0*@ zy+=XW0x9f0i%vdc~=(Dx6@f1~MzzZ(?Hlzc5zoTNU(f+PBUtyp?93((Mp zaRe{k3zfD_My->f4L>CpZiLDUxzN{!HqVQH2P$9CeyBEo>3q1dPW=pparGsIMjk^2 zNdYKyIGmyP)gM>*=xPdb=R>%==Hm*NDaR>1p2w>RD11Zseh^;b=oQN}hZp|M*>49b zSF_aNOWL43q|%S|zHjUK2TEI%&*NzpCLh~~Iqj`s&+B@slzC+?ET|bHUJi<;9gxlBi~I!e0Q1 z7rlE|=#_coU()q1`moG>AW$s*f)M?Tftb`U<#0x0IXXD?A66e%tdH_N{X4kk^J<7q zpji5t4dCCbe7Tt8clBrW{fTW;zNw#EYkGVR@wVcdgWPWFLkzk2`s0FJj@J_xA#|+X zXL63LBp_)Ogszr;V#wJc{x=9cdnX-eyFdXoYO`# zK>#8Hg|i4bDa{c?ZaanviICH6^rd%Qwh$t3X%BG@wMWt5oBF_&C+hxBIVI7aGM54O z&&mah4pD!kd&6UF1cc~aViW@RO3m3u-&4M)`$^?4M-Ome(6QjY>v(c_oer_ex`E4w ztp&Hkv5bx2_`z6kk9w9Co~aPKUwT8q-Cy;P*aw=6aHq6?CU!*nhr!)NduZY@vhUu# zit-zpkBK||Gp>Ew&mLc(`nKykswZstAN46SsFwORvdT@4*F8!=vDM&uiRArTi} z5x5oz=n4`}?}BSO2VKWP!qKx`m&o}Q66@8k=sJrBZZ|`sPW${^PVTrWuKqq(SJm~a z#_0Xlm8<())dJ;gwtlyiigJH|st?6jY+5;vd*%P2>WJhLO{-vQ+e39k=CG#qRLNOD z^$6`RZk5{iK~O!HVy^MsriE+V4zxhE2q56RQ{7uWud@tRAAXzRvLDO=k z_O&O6$UN1wa2$wq=;R&R@7?@|az&D>3By|RglT?#4hxEq+`X!V2vVkbrt00PeB}o< z^YwvvP^pmIpG|Wo%@?Nn@d5L4)3jZEjj3Up%WYb&_pX%s^i9)LeoSUT>Mr5Eo2FAJ zO?$#Gka~vNL;JOwCaH-kp?rYmfE$14%LOTr+AIQsX=GdQS1&?pcduo1vowujGZ+PF z88;qh8VL$QQaPlH<>zb~TGhvpR-d?O*dTlZNDrWx-I@29h6QvTTtNJvi``V56s7#Y zk91NGL3*m}lcu5k?S)n4=R$hE_z_IKVE(2;dWp=RO+EcIcwJ6ssik#zUsHd}>0G2s z^Y+X6KU06YuDj`dGM6^>4v#65CwVPXw^io1km>RX2_hGfej%JA$fS5VBfVjw?hl#% z;vY11PM#q%s*)N4-Y|8v+;iV`W}?hBOzls)Zf9nT-^kRys$9^_BR}&+%G8RCSp}Jw z#s6YzFHs+D=3SWsm|9*||GgVB8)a^1YGWhljXec2-wG$i)Utb=`hqgQ$vR2Wl*PQE7dkLZ*1`N;eoGJngu zV`>@OO8KqKpTadVwHyz5W-(-bmwnXKW_3=V`BnMzdB@6gjhP!I_yc+8%KZ{EW2BcC z^2SRp2{UJCt~YO%%)K#_*8L#wQMuP)rmKJjA@4QOK{1o3x?G;}Wih>PDGMTy$FJ$$ zrI`Lsb=RXjq%`XN&?9kf%4@tVTy^k-B>#%(2SgtOPe0)tV)|y~-+3;OISQsPRlb7f z8WD6Ue<6H1@G$PUwjR^R==sg_xV$i=U+DVjd0ljPOncRj=-D7T52pSlDt?D|!SkyC z|1tFgV|luPhjFoe-=n^6)o3-f_wsN)6yxKr!);IOcgWrqb#U@Xmjn1#e6h>-pFFqWGpUvQUDl-vL&PgY&hS4h|Df97Jc?I9j~fUoi)7A~=R zyUsg&eFcDx)vvJ-vV-n@?LL@(>13>)r95iirE;FY>T{$g7kqL|IvuOKtAE9J-<2dZ zEySw7rB?xb&yZYH^D$PvdkJsw;CoZ&Eme2P^A5fZ3`jhHRl|5(oB-cX%G;`{l(`r9 zG}n%ag93Oa|NWO#_;fBN-sfW=^^bLS`X}Z|?g#wJlf}eny+`;tZt&I$OvKwTArkzK zJ{7N%e;53hiaw6H4gsPp^pEe1cwg1bM6(P{}AQ6IA8*f7$dz8$~Q=Mni> z^V9x$j3GE4BMY>@)c>^RMIxiS@P!}z>YKz!M02YCtZ-s5%(%~!===L6180|Ecpb}n zIpBBZw_!Q%6JN>U?T3e~A!o-a_+CKyVDltE)WE58B zsUI@%8I3o-+=CT@(ILM4M)9>{#RBD61U5``b z+ZgXR9n0UIIxPCeZPX7dIsumdPv^^lowA=|`5@&~1e`ovc@O0k1e7y_W&cR82k~G8 zB!gvZH6Ipe)P9|^yVQ4R@v=Va2$r2Ed`7U^N)I}gb&++Bc=57MW9bg{DOk!Q!O~^g zXJOR{mjg?0V9)^F2m3L0koZt1$iNk>0ngCE=wdAOXn(FXLI8PKvO(5eu&x*1BlT_T z{KISy^s)OrlBcEln0`OI7c+?GEt+r1drK}ony0oMeqNUyn%lQ8)c3o~MCBvdV`ZJjVu$N% zU#@(;;(3foaf7XX4lFMHmw;ByU|-LHt{1WB^|_P)IUnq4(({Q$M)hXT$PaW<5JEjG$iu+ui_MFIOh;TmG6Q8JhXdtMO-#uB$XjgB zYK!eQbFn4O>!|IFlsjxURQl+^UPrq~yA{~>SDi1}>okwk_8Rr=*=s3=Hg-1_%JK1r zqkeSi$L25dYT|24Zx$9t`JWpLwv!)gbF=bD?AO>vHwg=#)O(@*ngks%pHgfqznTg5 z8`=*P-0bjr-jq2a+J7n^$9`M$5mvqGaW-G`?|&05n`IW7A7`nRXXr8vXzmp34b%pF z#y99MR^Ef{=i-D(#fXm{#uU=~9qdKw;*<>L3C?U91ke4k`PkY&FlX2P*%#OE zhajicVcFI@SJDDOAMY~BF=m_Pn%t9qe-Q^_ zvyI>KFU;`__iIvn8OrE)&a9&vnWLFEo* z4@s@bX!`i#hsqvw_@BYc#21=9@I>q1zB8vlaJ=}Bv;R^X+$Dz>(XR=+c;MFTUV_t- zLmGlt2%k2)i)Exr%4?{ukp08q-UjtPl->HCo_~W}OL6LgESUv`6BE2n0;lGk_S$C_ z)OoV`O4l_AUMbvq^TTKS-{H$0X%cg$zpyoBro{6i!B%(J2 zhYJ|d{3G&R83Zqo{snVjp>i*Rg9SKd4la`SoPK_in>B|WUs13>+bpY0ZC|+$L9krr zou`x?v_?we_upzl{u*E4X9(mX)0 z)3anyyqq}NI$sL96*7ar8-Ne(Q7kg=~lC;D6$M*PpMFKKG64l7VgNBefkJ%l7bVIS}k!+ejG6 zhhP_ui4xyRd1jCw>VJSDy`)De=e~gDhq+&X&DX|d>!Hojd8^Y`T6lrplWiX3ue%Ql z|4^T$%{HWgA3$3@$J5`}c}d$}7Sn)dIM`oE&m^=vs&}ys{=O~H?o;g-vnf47&Pr&1 zlJ4iW#BJQr{w?k2vmG70Lqh$)_DYmIMF$=eQGVNA{vrz)(6N)8Q^9sP8y)X;KK}F4 z3kjW^z9)MHjqAJr1)b#Ebp-@1mRoHo8YSl>$Ujx?OVDkp&czEHUUkU`9t@le1@Fm* z38jpC>VJUxoi*oMdO6Fp&-KK1l z_5c(}O#XZ*_h^rJ{u?}|ErRls8oAL2^5-c3qFi~^kbi^ZyP*7Sy&vaaqvx9Py~>Nr zC+HLv`$9$cbLPEfe+KzO1dt0AgZ1O)_utNj8K@8(;7G_n!At++Z>ac0dBOQLdd{uP z)%7I5N;&kEM%HD>mwz?_l`}=hrRP+2$I5rbuS>r#{7|T@S1v>T$!;n#|A_i^^?n*` z&~sI2oSb98etRP~BSGndI+wHs3qA@;KT|!~)_y1`^Xh%reu&zq`gVjeL-y#o^C)j7 zJUb|x#s}*t>EYtnfwDIkCwd;(6Ep`^_P29BxP->go<=CI_+9#}ZHK2-KBf&90?>Je zh3s3P{1GXV2U}iqAC!M3`zW1{)VEX-P>#1n;frlt8|sMssUGU~69g%T<&CEx_sPuk;BIY#|{mh*mAJ|g~7%0nv8sPapq zV2$oe{aDIL4f&PRWId<(fDk-M3g;`-&!axYki%8696xL5^>H+L=mOS_!r6e(?$^_o zeZ2@Q-M=7QDgz&|B;HyD;St(%ZIO(_d6e)2grVPX4_L?QIuPC@;1{sM)OLQ>0OET| zUolu*-?MrRMEb_L*$^x*;lOSpzSQ;NTYi2@Ur5wHhol2Q=6hG

kNs1#yd4>>*b>yJ79%$xw* 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 UZEPBpA+N!IXe?Qn^L)qu023fJTmS$7 literal 0 HcmV?d00001 diff --git a/lib/mpl_toolkits/basemap/data/nzgd2kgrid0005.gsb b/lib/mpl_toolkits/basemap/data/nzgd2kgrid0005.gsb new file mode 100644 index 0000000000000000000000000000000000000000..840bd0063a51f8803044c7926953daa0bfe06543 GIT binary patch literal 318464 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 Ti@X;k85ej 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 B1#JKT literal 0 HcmV?d00001 diff --git a/lib/mpl_toolkits/basemap/data/proj_outIGNF.dist b/lib/mpl_toolkits/basemap/data/proj_outIGNF.dist new file mode 100644 index 000000000..8a8b12592 --- /dev/null +++ b/lib/mpl_toolkits/basemap/data/proj_outIGNF.dist @@ -0,0 +1,40 @@ ++init=./IGNF:NTFG +to +init=./IGNF:RGF93G + 3.300866856 43.4477976569 0.0000 3d18'0.915"E 43d26'52.077"N 0.000 ++init=./IGNF:LAMBE +to +init=./IGNF:LAMB93 + 600000.0000 2600545.4523 0.0000 652760.737 7033791.244 0.000 + 135638.3592 2418760.4094 0.0000 187194.062 6855928.882 0.000 + 998137.3947 2413822.2844 0.0000 1049052.258 6843776.562 0.000 + 600000.0000 2200000.0000 0.0000 649398.872 6633524.192 0.000 + 311552.5340 1906457.4840 0.0000 358799.172 6342652.486 0.000 + 960488.4138 1910172.8812 0.0000 1007068.686 6340907.237 0.000 + 600000.0000 1699510.8340 0.0000 645204.279 6133556.746 0.000 +1203792.5981 626873.17210 0.0000 1238875.764 5057405.017 0.000 ++init=./IGNF:LAMBE +to +init=./IGNF:GEOPORTALFXX + 600000.0000 2600545.4523 0.0000 179040.148 5610495.275 0.000 + 135638.3592 2418760.4094 0.0000 -303729.363 5410118.356 0.000 + 998137.3947 2413822.2844 0.0000 592842.792 5410120.554 0.000 + 600000.0000 2200000.0000 0.0000 179041.670 5209746.080 0.000 + 311552.5340 1906457.4840 0.0000 -96825.465 4909184.136 0.000 + 960488.4138 1910172.8812 0.0000 523880.019 4909191.141 0.000 + 600000.0000 1699510.8340 0.0000 179047.633 4708817.007 0.000 +1203792.5981 626873.17210 0.0000 658287.395 3623739.237 0.000 ++init=./IGNF:RGF93G +to +init=./IGNF:GEOPORTALFXX +2d20'11.4239243" 50d23'59.7718445" 0.0 179040.151 5610495.281 -0.000 +-3d57'49.4051448" 48d35'59.7121716" 0.0 -303729.365 5410118.352 -0.000 +7d44'12.1439796" 48d35'59.7832558" 0.0 592842.794 5410120.550 -0.000 +2d20'11.4951975" 46d47'59.8029841" 0.0 179041.668 5209746.077 -0.000 +-1d15'48.9240599" 44d05'59.8251878" 0.0 -96825.467 4909184.138 -0.000 +6d50'12.2276489" 44d06'00.0517019" 0.0 523880.022 4909191.143 -0.000 +2d20'11.7754730" 42d18'00.0824436" 0.0 179047.634 4708817.010 -0.000 +9d32'12.6680218" 41d24'00.3542556" 0.0 730783.054 4608637.873 -0.000 ++init=./IGNF:RGF93G +to +init=./IGNF:MILLER +2d20'11.4239243" 50d23'59.7718445" 0.0 260098.730 6140682.441 0.000 +-3d57'49.4051448" 48d35'59.7121716" 0.0 -441239.699 5880610.004 0.000 +7d44'12.1439796" 48d35'59.7832558" 0.0 861246.246 5880612.827 0.000 +2d20'11.4951975" 46d47'59.8029841" 0.0 260100.934 5625762.156 0.000 +-1d15'48.9240599" 44d05'59.8251878" 0.0 -140662.197 5252490.165 0.000 +6d50'12.2276489" 44d06'00.0517019" 0.0 761061.291 5252498.745 0.000 +2d20'11.7754730" 42d18'00.0824436" 0.0 260109.601 5009175.714 0.000 +9d32'12.6680218" 41d24'00.3542556" 0.0 1061637.534 4889066.592 0.000 ++init=./IGNF:RGR92 +to +init=./IGNF:REUN47 +3356123.5400 1303218.3090 5247430.6050 3353421.833 1304074.314 5248935.606 diff --git a/lib/mpl_toolkits/basemap/data/testIGNF b/lib/mpl_toolkits/basemap/data/testIGNF new file mode 100755 index 000000000..152267745 --- /dev/null +++ b/lib/mpl_toolkits/basemap/data/testIGNF @@ -0,0 +1,166 @@ +: +# Script to test some points in IGNF managed SRS. +# The expected coordinates have been calculed by +# other means. +# Real points locations are found in proj_outIGNF.dist-real +# while distribution results are found in proj_outIGNF.dist +# +# 2009-03-08 : the null grid (nad2bin < null.lla null) MUST +# be around otherwise the LAMBE to LAMB93 +# transformations will be wrong and vice-versa +# 2009-10-04 : addition of NTFG to RGF93G test to check if +# the gsb grid is still ok +EXE=$1 + +usage() +{ + echo "Usage: ${0} " + echo + exit 1 +} + +if test -z "${EXE}"; then + EXE=../src/cs2cs +fi + +if test ! -x ${EXE}; then + echo "*** ERROR: Can not find '${EXE}' program!" + exit 1 +fi + +echo "============================================" +echo "Running ${0} using ${EXE}:" +echo "============================================" + +OUT=proj_outIGNF +INIT_FILE=./IGNF +RES="-f %.3f" +# +echo "doing tests into file ${OUT}, please wait" +# +rm -f ${OUT} +echo "+init=${INIT_FILE}:NTFG +to +init=${INIT_FILE}:RGF93G" >>${OUT} +$EXE +init=${INIT_FILE}:NTFG +to +init=${INIT_FILE}:RGF93G -E >>${OUT} <>${OUT} +$EXE +init=${INIT_FILE}:LAMBE +to +init=${INIT_FILE}:LAMB93 -E $RES >>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} +$EXE +init=${INIT_FILE}:LAMBE +to +init=${INIT_FILE}:GEOPORTALFXX -E $RES >>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} +$EXE +init=${INIT_FILE}:RGF93G +to +init=${INIT_FILE}:GEOPORTALFXX -E $RES >>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} +$EXE +init=${INIT_FILE}:RGF93G +to +init=${INIT_FILE}:MILLER -E $RES >>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} <>${OUT} +$EXE +init=${INIT_FILE}:RGR92 +to +init=${INIT_FILE}:REUN47 -E $RES >>${OUT} <" + echo + exit 1 +} + +if test -z "${EXE}"; then + EXE=../src/cs2cs +fi + +if test ! -x ${EXE}; then + echo "*** ERROR: Can not find '${EXE}' program!" + exit 1 +fi + +echo "============================================" +echo "Running ${0} using ${EXE}:" +echo "============================================" + +OUT=td_out +#EXE=../src/cs2cs +# +echo "doing tests into file ${OUT}, please wait" +rm -f ${OUT} +# +echo "##############################################################" >> ${OUT} +echo 1st through ntv1, 2nd through conus >> ${OUT} +# +$EXE +proj=latlong +ellps=clrk66 +nadgrids=ntv1_can.dat,conus \ + +to +proj=latlong +datum=NAD83 \ + -E >>${OUT} <> ${OUT} +echo As above, but without ntv1 everything goes through conus file. >> ${OUT} +# +$EXE +proj=latlong +ellps=clrk66 +nadgrids=conus \ + +to +proj=latlong +datum=NAD83 \ + -E >>${OUT} <> ${OUT} +echo Test MD used where available >> ${OUT} +# +$EXE +proj=latlong +ellps=clrk66 +nadgrids=MD,conus \ + +to +proj=latlong +datum=NAD83 \ + -E >>${OUT} <>${OUT} < Date: Fri, 16 Dec 2011 10:24:23 -0700 Subject: [PATCH 05/14] get error codes using pj_ctx_get_err, instead of relying on global variable --- src/_geod.c | 739 ++++++++++++++++++++------------------- src/_geod.pyx | 23 +- src/_proj.c | 892 +++++++++++++++++++++++++----------------------- src/_proj.pyx | 41 ++- src/_pyproj.pxi | 6 +- 5 files changed, 903 insertions(+), 798 deletions(-) diff --git a/src/_geod.c b/src/_geod.c index 712d39486..8a096ffc5 100644 --- a/src/_geod.c +++ b/src/_geod.c @@ -1,4 +1,4 @@ -/* Generated by Cython 0.15.1 on Tue Dec 13 08:50:45 2011 */ +/* Generated by Cython 0.15.1 on Fri Dec 16 10:22:37 2011 */ #define PY_SSIZE_T_CLEAN #include "Python.h" @@ -326,7 +326,7 @@ static const char *__pyx_f[] = { struct __pyx_obj_5_geod_Geod; struct __pyx_opt_args_5_geod__strencode; -/* "_geod.pyx":170 +/* "_geod.pyx":177 * return lons, lats * * cdef _strencode(pystr,encoding='ascii'): # <<<<<<<<<<<<<< @@ -542,13 +542,14 @@ static PyObject *__pyx_k_tuple_8; * * def __cinit__(self, geodstring): # <<<<<<<<<<<<<< * cdef GEODESIC_T GEOD_T - * # setup geod initialization string. + * cdef int err */ static int __pyx_pf_5_geod_4Geod___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static int __pyx_pf_5_geod_4Geod___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_geodstring = 0; GEODESIC_T __pyx_v_GEOD_T; + int __pyx_v_err; PyObject *__pyx_v_bytestr = NULL; int __pyx_r; __Pyx_RefNannyDeclarations @@ -596,8 +597,8 @@ static int __pyx_pf_5_geod_4Geod___cinit__(PyObject *__pyx_v_self, PyObject *__p return -1; __pyx_L4_argument_unpacking_done:; - /* "_geod.pyx":14 - * cdef GEODESIC_T GEOD_T + /* "_geod.pyx":15 + * cdef int err * # setup geod initialization string. * self.geodstring = geodstring # <<<<<<<<<<<<<< * bytestr = _strencode(geodstring) @@ -609,79 +610,88 @@ static int __pyx_pf_5_geod_4Geod___cinit__(PyObject *__pyx_v_self, PyObject *__p __Pyx_DECREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring); ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring = __pyx_v_geodstring; - /* "_geod.pyx":15 + /* "_geod.pyx":16 * # setup geod initialization string. * self.geodstring = geodstring * bytestr = _strencode(geodstring) # <<<<<<<<<<<<<< * self.geodinitstring = bytestr * # initialize projection */ - __pyx_t_1 = __pyx_f_5_geod__strencode(__pyx_v_geodstring, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __pyx_f_5_geod__strencode(__pyx_v_geodstring, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_bytestr = __pyx_t_1; __pyx_t_1 = 0; - /* "_geod.pyx":16 + /* "_geod.pyx":17 * self.geodstring = geodstring * bytestr = _strencode(geodstring) * self.geodinitstring = bytestr # <<<<<<<<<<<<<< * # initialize projection * self.geodesic_t = GEOD_init_plus(self.geodinitstring, &GEOD_T)[0] */ - __pyx_t_2 = PyBytes_AsString(__pyx_v_bytestr); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyBytes_AsString(__pyx_v_bytestr); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;} ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodinitstring = __pyx_t_2; - /* "_geod.pyx":18 + /* "_geod.pyx":19 * self.geodinitstring = bytestr * # initialize projection * self.geodesic_t = GEOD_init_plus(self.geodinitstring, &GEOD_T)[0] # <<<<<<<<<<<<<< - * if pj_errno != 0: - * raise RuntimeError(pj_strerrno(pj_errno)) + * err = pj_ctx_get_errno(pj_get_default_ctx()) + * if err != 0: */ ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t = (GEOD_init_plus(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodinitstring, (&__pyx_v_GEOD_T))[0]); - /* "_geod.pyx":19 + /* "_geod.pyx":20 * # initialize projection * self.geodesic_t = GEOD_init_plus(self.geodinitstring, &GEOD_T)[0] - * if pj_errno != 0: # <<<<<<<<<<<<<< - * raise RuntimeError(pj_strerrno(pj_errno)) + * err = pj_ctx_get_errno(pj_get_default_ctx()) # <<<<<<<<<<<<<< + * if err != 0: + * raise RuntimeError(pj_strerrno(err)) + */ + __pyx_v_err = pj_ctx_get_errno(pj_get_default_ctx()); + + /* "_geod.pyx":21 + * self.geodesic_t = GEOD_init_plus(self.geodinitstring, &GEOD_T)[0] + * err = pj_ctx_get_errno(pj_get_default_ctx()) + * if err != 0: # <<<<<<<<<<<<<< + * raise RuntimeError(pj_strerrno(err)) * self.proj_version = PJ_VERSION/100. */ - __pyx_t_3 = (pj_errno != 0); + __pyx_t_3 = (__pyx_v_err != 0); if (__pyx_t_3) { - /* "_geod.pyx":20 - * self.geodesic_t = GEOD_init_plus(self.geodinitstring, &GEOD_T)[0] - * if pj_errno != 0: - * raise RuntimeError(pj_strerrno(pj_errno)) # <<<<<<<<<<<<<< + /* "_geod.pyx":22 + * err = pj_ctx_get_errno(pj_get_default_ctx()) + * if err != 0: + * raise RuntimeError(pj_strerrno(err)) # <<<<<<<<<<<<<< * self.proj_version = PJ_VERSION/100. * */ - __pyx_t_1 = PyBytes_FromString(pj_strerrno(pj_errno)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_1)); __Pyx_GIVEREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; - __pyx_t_1 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; - /* "_geod.pyx":21 - * if pj_errno != 0: - * raise RuntimeError(pj_strerrno(pj_errno)) + /* "_geod.pyx":23 + * if err != 0: + * raise RuntimeError(pj_strerrno(err)) * self.proj_version = PJ_VERSION/100. # <<<<<<<<<<<<<< * * def __reduce__(self): */ - __pyx_t_1 = PyFloat_FromDouble((PJ_VERSION / 100.)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyFloat_FromDouble((PJ_VERSION / 100.)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->proj_version); @@ -702,7 +712,7 @@ static int __pyx_pf_5_geod_4Geod___cinit__(PyObject *__pyx_v_self, PyObject *__p return __pyx_r; } -/* "_geod.pyx":23 +/* "_geod.pyx":25 * self.proj_version = PJ_VERSION/100. * * def __reduce__(self): # <<<<<<<<<<<<<< @@ -723,7 +733,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_1__reduce__(PyObject *__pyx_v_self, CYTHO int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__reduce__"); - /* "_geod.pyx":25 + /* "_geod.pyx":27 * def __reduce__(self): * """special method that allows pyproj.Geod instance to be pickled""" * return (self.__class__,(self.geodstring,)) # <<<<<<<<<<<<<< @@ -731,14 +741,14 @@ static PyObject *__pyx_pf_5_geod_4Geod_1__reduce__(PyObject *__pyx_v_self, CYTHO * def _fwd(self, object lons, object lats, object az, object dist, radians=False): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_INCREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring); PyTuple_SET_ITEM(__pyx_t_2, 0, ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring); __Pyx_GIVEREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring); - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); @@ -764,7 +774,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_1__reduce__(PyObject *__pyx_v_self, CYTHO return __pyx_r; } -/* "_geod.pyx":27 +/* "_geod.pyx":29 * return (self.__class__,(self.geodstring,)) * * def _fwd(self, object lons, object lats, object az, object dist, radians=False): # <<<<<<<<<<<<<< @@ -794,6 +804,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ void *__pyx_v_latdata; void *__pyx_v_azdat; void *__pyx_v_distdat; + int __pyx_v_err; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; @@ -832,19 +843,19 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lats); if (likely(values[1])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__az); if (likely(values[2])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dist); if (likely(values[3])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 4: if (kw_args > 0) { @@ -853,7 +864,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_fwd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_fwd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { @@ -874,15 +885,15 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("_geod.Geod._fwd", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - /* "_geod.pyx":38 - * cdef void *londata, *latdata, *azdat, *distdat + /* "_geod.pyx":41 + * cdef int err * # if buffer api is supported, get pointer to data buffers. * if PyObject_AsWriteBuffer(lons, &londata, &buflenlons) <> 0: # <<<<<<<<<<<<<< * raise RuntimeError @@ -891,7 +902,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lons, (&__pyx_v_londata), (&__pyx_v_buflenlons)) != 0); if (__pyx_t_1) { - /* "_geod.pyx":39 + /* "_geod.pyx":42 * # if buffer api is supported, get pointer to data buffers. * if PyObject_AsWriteBuffer(lons, &londata, &buflenlons) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -899,12 +910,12 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ * raise RuntimeError */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; - /* "_geod.pyx":40 + /* "_geod.pyx":43 * if PyObject_AsWriteBuffer(lons, &londata, &buflenlons) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(lats, &latdata, &buflenlats) <> 0: # <<<<<<<<<<<<<< @@ -914,7 +925,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lats, (&__pyx_v_latdata), (&__pyx_v_buflenlats)) != 0); if (__pyx_t_1) { - /* "_geod.pyx":41 + /* "_geod.pyx":44 * raise RuntimeError * if PyObject_AsWriteBuffer(lats, &latdata, &buflenlats) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -922,12 +933,12 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ * raise RuntimeError */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L7; } __pyx_L7:; - /* "_geod.pyx":42 + /* "_geod.pyx":45 * if PyObject_AsWriteBuffer(lats, &latdata, &buflenlats) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(az, &azdat, &buflenaz) <> 0: # <<<<<<<<<<<<<< @@ -937,7 +948,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_az, (&__pyx_v_azdat), (&__pyx_v_buflenaz)) != 0); if (__pyx_t_1) { - /* "_geod.pyx":43 + /* "_geod.pyx":46 * raise RuntimeError * if PyObject_AsWriteBuffer(az, &azdat, &buflenaz) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -945,12 +956,12 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ * raise RuntimeError */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L8; } __pyx_L8:; - /* "_geod.pyx":44 + /* "_geod.pyx":47 * if PyObject_AsWriteBuffer(az, &azdat, &buflenaz) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(dist, &distdat, &buflend) <> 0: # <<<<<<<<<<<<<< @@ -960,7 +971,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_dist, (&__pyx_v_distdat), (&__pyx_v_buflend)) != 0); if (__pyx_t_1) { - /* "_geod.pyx":45 + /* "_geod.pyx":48 * raise RuntimeError * if PyObject_AsWriteBuffer(dist, &distdat, &buflend) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -968,12 +979,12 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ * if not buflenlons == buflenlats == buflenaz == buflend: */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L9; } __pyx_L9:; - /* "_geod.pyx":47 + /* "_geod.pyx":50 * raise RuntimeError * # process data in buffer * if not buflenlons == buflenlats == buflenaz == buflend: # <<<<<<<<<<<<<< @@ -990,42 +1001,42 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { - /* "_geod.pyx":48 + /* "_geod.pyx":51 * # process data in buffer * if not buflenlons == buflenlats == buflenaz == buflend: * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< * ndim = buflenlons//_doublesize * lonsdata = londata */ - __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_3), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_3), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L10; } __pyx_L10:; - /* "_geod.pyx":49 + /* "_geod.pyx":52 * if not buflenlons == buflenlats == buflenaz == buflend: * raise RuntimeError("Buffer lengths not the same") * ndim = buflenlons//_doublesize # <<<<<<<<<<<<<< * lonsdata = londata * latsdata = latdata */ - __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_buflenlons); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_buflenlons); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyNumber_FloorDivide(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = PyNumber_FloorDivide(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_ndim = __pyx_t_6; - /* "_geod.pyx":50 + /* "_geod.pyx":53 * raise RuntimeError("Buffer lengths not the same") * ndim = buflenlons//_doublesize * lonsdata = londata # <<<<<<<<<<<<<< @@ -1034,7 +1045,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_lonsdata = ((double *)__pyx_v_londata); - /* "_geod.pyx":51 + /* "_geod.pyx":54 * ndim = buflenlons//_doublesize * lonsdata = londata * latsdata = latdata # <<<<<<<<<<<<<< @@ -1043,7 +1054,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_latsdata = ((double *)__pyx_v_latdata); - /* "_geod.pyx":52 + /* "_geod.pyx":55 * lonsdata = londata * latsdata = latdata * azdata = azdat # <<<<<<<<<<<<<< @@ -1052,7 +1063,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_azdata = ((double *)__pyx_v_azdat); - /* "_geod.pyx":53 + /* "_geod.pyx":56 * latsdata = latdata * azdata = azdat * distdata = distdat # <<<<<<<<<<<<<< @@ -1061,7 +1072,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_distdata = ((double *)__pyx_v_distdat); - /* "_geod.pyx":54 + /* "_geod.pyx":57 * azdata = azdat * distdata = distdat * for i from 0 <= i < ndim: # <<<<<<<<<<<<<< @@ -1071,17 +1082,17 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_6 = __pyx_v_ndim; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) { - /* "_geod.pyx":55 + /* "_geod.pyx":58 * distdata = distdat * for i from 0 <= i < ndim: * if radians: # <<<<<<<<<<<<<< * self.geodesic_t.p1.v = lonsdata[i] * self.geodesic_t.p1.u = latsdata[i] */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_2) { - /* "_geod.pyx":56 + /* "_geod.pyx":59 * for i from 0 <= i < ndim: * if radians: * self.geodesic_t.p1.v = lonsdata[i] # <<<<<<<<<<<<<< @@ -1090,7 +1101,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ */ ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.v = (__pyx_v_lonsdata[__pyx_v_i]); - /* "_geod.pyx":57 + /* "_geod.pyx":60 * if radians: * self.geodesic_t.p1.v = lonsdata[i] * self.geodesic_t.p1.u = latsdata[i] # <<<<<<<<<<<<<< @@ -1099,7 +1110,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ */ ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.u = (__pyx_v_latsdata[__pyx_v_i]); - /* "_geod.pyx":58 + /* "_geod.pyx":61 * self.geodesic_t.p1.v = lonsdata[i] * self.geodesic_t.p1.u = latsdata[i] * self.geodesic_t.ALPHA12 = azdata[i] # <<<<<<<<<<<<<< @@ -1108,7 +1119,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ */ ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA12 = (__pyx_v_azdata[__pyx_v_i]); - /* "_geod.pyx":59 + /* "_geod.pyx":62 * self.geodesic_t.p1.u = latsdata[i] * self.geodesic_t.ALPHA12 = azdata[i] * self.geodesic_t.DIST = distdata[i] # <<<<<<<<<<<<<< @@ -1120,162 +1131,180 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ } /*else*/ { - /* "_geod.pyx":61 + /* "_geod.pyx":64 * self.geodesic_t.DIST = distdata[i] * else: * self.geodesic_t.p1.v = _dg2rad*lonsdata[i] # <<<<<<<<<<<<<< * self.geodesic_t.p1.u = _dg2rad*latsdata[i] * self.geodesic_t.ALPHA12 = _dg2rad*azdata[i] */ - __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyFloat_FromDouble((__pyx_v_lonsdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyFloat_FromDouble((__pyx_v_lonsdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.v = __pyx_t_7; - /* "_geod.pyx":62 + /* "_geod.pyx":65 * else: * self.geodesic_t.p1.v = _dg2rad*lonsdata[i] * self.geodesic_t.p1.u = _dg2rad*latsdata[i] # <<<<<<<<<<<<<< * self.geodesic_t.ALPHA12 = _dg2rad*azdata[i] * self.geodesic_t.DIST = distdata[i] */ - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyFloat_FromDouble((__pyx_v_latsdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyFloat_FromDouble((__pyx_v_latsdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.u = __pyx_t_7; - /* "_geod.pyx":63 + /* "_geod.pyx":66 * self.geodesic_t.p1.v = _dg2rad*lonsdata[i] * self.geodesic_t.p1.u = _dg2rad*latsdata[i] * self.geodesic_t.ALPHA12 = _dg2rad*azdata[i] # <<<<<<<<<<<<<< * self.geodesic_t.DIST = distdata[i] * geod_pre(&self.geodesic_t) */ - __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyFloat_FromDouble((__pyx_v_azdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyFloat_FromDouble((__pyx_v_azdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA12 = __pyx_t_7; - /* "_geod.pyx":64 + /* "_geod.pyx":67 * self.geodesic_t.p1.u = _dg2rad*latsdata[i] * self.geodesic_t.ALPHA12 = _dg2rad*azdata[i] * self.geodesic_t.DIST = distdata[i] # <<<<<<<<<<<<<< * geod_pre(&self.geodesic_t) - * if pj_errno != 0: + * err = pj_ctx_get_errno(pj_get_default_ctx()) */ ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.DIST = (__pyx_v_distdata[__pyx_v_i]); } __pyx_L13:; - /* "_geod.pyx":65 + /* "_geod.pyx":68 * self.geodesic_t.ALPHA12 = _dg2rad*azdata[i] * self.geodesic_t.DIST = distdata[i] * geod_pre(&self.geodesic_t) # <<<<<<<<<<<<<< - * if pj_errno != 0: - * raise RuntimeError(pj_strerrno(pj_errno)) + * err = pj_ctx_get_errno(pj_get_default_ctx()) + * if err != 0: */ geod_pre((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t)); - /* "_geod.pyx":66 + /* "_geod.pyx":69 * self.geodesic_t.DIST = distdata[i] * geod_pre(&self.geodesic_t) - * if pj_errno != 0: # <<<<<<<<<<<<<< - * raise RuntimeError(pj_strerrno(pj_errno)) + * err = pj_ctx_get_errno(pj_get_default_ctx()) # <<<<<<<<<<<<<< + * if err != 0: + * raise RuntimeError(pj_strerrno(err)) + */ + __pyx_v_err = pj_ctx_get_errno(pj_get_default_ctx()); + + /* "_geod.pyx":70 + * geod_pre(&self.geodesic_t) + * err = pj_ctx_get_errno(pj_get_default_ctx()) + * if err != 0: # <<<<<<<<<<<<<< + * raise RuntimeError(pj_strerrno(err)) * geod_for(&self.geodesic_t) */ - __pyx_t_2 = (pj_errno != 0); + __pyx_t_2 = (__pyx_v_err != 0); if (__pyx_t_2) { - /* "_geod.pyx":67 - * geod_pre(&self.geodesic_t) - * if pj_errno != 0: - * raise RuntimeError(pj_strerrno(pj_errno)) # <<<<<<<<<<<<<< + /* "_geod.pyx":71 + * err = pj_ctx_get_errno(pj_get_default_ctx()) + * if err != 0: + * raise RuntimeError(pj_strerrno(err)) # <<<<<<<<<<<<<< * geod_for(&self.geodesic_t) - * if pj_errno != 0: + * err = pj_ctx_get_errno(pj_get_default_ctx()) */ - __pyx_t_3 = PyBytes_FromString(pj_strerrno(pj_errno)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_3)); __Pyx_GIVEREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; - __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L14; } __pyx_L14:; - /* "_geod.pyx":68 - * if pj_errno != 0: - * raise RuntimeError(pj_strerrno(pj_errno)) + /* "_geod.pyx":72 + * if err != 0: + * raise RuntimeError(pj_strerrno(err)) * geod_for(&self.geodesic_t) # <<<<<<<<<<<<<< - * if pj_errno != 0: - * raise RuntimeError(pj_strerrno(pj_errno)) + * err = pj_ctx_get_errno(pj_get_default_ctx()) + * if err != 0: */ geod_for((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t)); - /* "_geod.pyx":69 - * raise RuntimeError(pj_strerrno(pj_errno)) + /* "_geod.pyx":73 + * raise RuntimeError(pj_strerrno(err)) + * geod_for(&self.geodesic_t) + * err = pj_ctx_get_errno(pj_get_default_ctx()) # <<<<<<<<<<<<<< + * if err != 0: + * raise RuntimeError(pj_strerrno(err)) + */ + __pyx_v_err = pj_ctx_get_errno(pj_get_default_ctx()); + + /* "_geod.pyx":74 * geod_for(&self.geodesic_t) - * if pj_errno != 0: # <<<<<<<<<<<<<< - * raise RuntimeError(pj_strerrno(pj_errno)) + * err = pj_ctx_get_errno(pj_get_default_ctx()) + * if err != 0: # <<<<<<<<<<<<<< + * raise RuntimeError(pj_strerrno(err)) * # check for NaN. */ - __pyx_t_2 = (pj_errno != 0); + __pyx_t_2 = (__pyx_v_err != 0); if (__pyx_t_2) { - /* "_geod.pyx":70 - * geod_for(&self.geodesic_t) - * if pj_errno != 0: - * raise RuntimeError(pj_strerrno(pj_errno)) # <<<<<<<<<<<<<< + /* "_geod.pyx":75 + * err = pj_ctx_get_errno(pj_get_default_ctx()) + * if err != 0: + * raise RuntimeError(pj_strerrno(err)) # <<<<<<<<<<<<<< * # check for NaN. * if self.geodesic_t.ALPHA21 != self.geodesic_t.ALPHA21: */ - __pyx_t_3 = PyBytes_FromString(pj_strerrno(pj_errno)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_3)); __Pyx_GIVEREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; - __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L15; } __pyx_L15:; - /* "_geod.pyx":72 - * raise RuntimeError(pj_strerrno(pj_errno)) + /* "_geod.pyx":77 + * raise RuntimeError(pj_strerrno(err)) * # check for NaN. * if self.geodesic_t.ALPHA21 != self.geodesic_t.ALPHA21: # <<<<<<<<<<<<<< * raise ValueError('undefined inverse geodesic (may be an antipodal point)') @@ -1284,33 +1313,33 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_2 = (((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA21 != ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA21); if (__pyx_t_2) { - /* "_geod.pyx":73 + /* "_geod.pyx":78 * # check for NaN. * if self.geodesic_t.ALPHA21 != self.geodesic_t.ALPHA21: * raise ValueError('undefined inverse geodesic (may be an antipodal point)') # <<<<<<<<<<<<<< * if radians: * lonsdata[i] = self.geodesic_t.p2.v */ - __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_5), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_5), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L16; } __pyx_L16:; - /* "_geod.pyx":74 + /* "_geod.pyx":79 * if self.geodesic_t.ALPHA21 != self.geodesic_t.ALPHA21: * raise ValueError('undefined inverse geodesic (may be an antipodal point)') * if radians: # <<<<<<<<<<<<<< * lonsdata[i] = self.geodesic_t.p2.v * latsdata[i] = self.geodesic_t.p2.u */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_2) { - /* "_geod.pyx":75 + /* "_geod.pyx":80 * raise ValueError('undefined inverse geodesic (may be an antipodal point)') * if radians: * lonsdata[i] = self.geodesic_t.p2.v # <<<<<<<<<<<<<< @@ -1319,7 +1348,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ */ (__pyx_v_lonsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v; - /* "_geod.pyx":76 + /* "_geod.pyx":81 * if radians: * lonsdata[i] = self.geodesic_t.p2.v * latsdata[i] = self.geodesic_t.p2.u # <<<<<<<<<<<<<< @@ -1328,7 +1357,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ */ (__pyx_v_latsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.u; - /* "_geod.pyx":77 + /* "_geod.pyx":82 * lonsdata[i] = self.geodesic_t.p2.v * latsdata[i] = self.geodesic_t.p2.u * azdata[i] = self.geodesic_t.ALPHA21 # <<<<<<<<<<<<<< @@ -1340,60 +1369,60 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ } /*else*/ { - /* "_geod.pyx":79 + /* "_geod.pyx":84 * azdata[i] = self.geodesic_t.ALPHA21 * else: * lonsdata[i] = _rad2dg*self.geodesic_t.p2.v # <<<<<<<<<<<<<< * latsdata[i] = _rad2dg*self.geodesic_t.p2.u * azdata[i] = _rad2dg*self.geodesic_t.ALPHA21 */ - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; (__pyx_v_lonsdata[__pyx_v_i]) = __pyx_t_7; - /* "_geod.pyx":80 + /* "_geod.pyx":85 * else: * lonsdata[i] = _rad2dg*self.geodesic_t.p2.v * latsdata[i] = _rad2dg*self.geodesic_t.p2.u # <<<<<<<<<<<<<< * azdata[i] = _rad2dg*self.geodesic_t.ALPHA21 * */ - __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.u); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.u); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; (__pyx_v_latsdata[__pyx_v_i]) = __pyx_t_7; - /* "_geod.pyx":81 + /* "_geod.pyx":86 * lonsdata[i] = _rad2dg*self.geodesic_t.p2.v * latsdata[i] = _rad2dg*self.geodesic_t.p2.u * azdata[i] = _rad2dg*self.geodesic_t.ALPHA21 # <<<<<<<<<<<<<< * * def _inv(self, object lons1, object lats1, object lons2, object lats2, radians=False): */ - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA21); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA21); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; (__pyx_v_azdata[__pyx_v_i]) = __pyx_t_7; } @@ -1414,7 +1443,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ return __pyx_r; } -/* "_geod.pyx":83 +/* "_geod.pyx":88 * azdata[i] = _rad2dg*self.geodesic_t.ALPHA21 * * def _inv(self, object lons1, object lats1, object lons2, object lats2, radians=False): # <<<<<<<<<<<<<< @@ -1444,6 +1473,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ void *__pyx_v_latdata; void *__pyx_v_azdat; void *__pyx_v_distdat; + int __pyx_v_err; PyObject *__pyx_v_errmsg = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations @@ -1483,19 +1513,19 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lats1); if (likely(values[1])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lons2); if (likely(values[2])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lats2); if (likely(values[3])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 4: if (kw_args > 0) { @@ -1504,7 +1534,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_inv") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_inv") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { @@ -1525,15 +1555,15 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("_geod.Geod._inv", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - /* "_geod.pyx":93 - * cdef void *londata, *latdata, *azdat, *distdat + /* "_geod.pyx":99 + * cdef int err * # if buffer api is supported, get pointer to data buffers. * if PyObject_AsWriteBuffer(lons1, &londata, &buflenlons) <> 0: # <<<<<<<<<<<<<< * raise RuntimeError @@ -1542,7 +1572,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lons1, (&__pyx_v_londata), (&__pyx_v_buflenlons)) != 0); if (__pyx_t_1) { - /* "_geod.pyx":94 + /* "_geod.pyx":100 * # if buffer api is supported, get pointer to data buffers. * if PyObject_AsWriteBuffer(lons1, &londata, &buflenlons) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -1550,12 +1580,12 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ * raise RuntimeError */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; - /* "_geod.pyx":95 + /* "_geod.pyx":101 * if PyObject_AsWriteBuffer(lons1, &londata, &buflenlons) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(lats1, &latdata, &buflenlats) <> 0: # <<<<<<<<<<<<<< @@ -1565,7 +1595,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lats1, (&__pyx_v_latdata), (&__pyx_v_buflenlats)) != 0); if (__pyx_t_1) { - /* "_geod.pyx":96 + /* "_geod.pyx":102 * raise RuntimeError * if PyObject_AsWriteBuffer(lats1, &latdata, &buflenlats) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -1573,12 +1603,12 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ * raise RuntimeError */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L7; } __pyx_L7:; - /* "_geod.pyx":97 + /* "_geod.pyx":103 * if PyObject_AsWriteBuffer(lats1, &latdata, &buflenlats) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(lons2, &azdat, &buflenaz) <> 0: # <<<<<<<<<<<<<< @@ -1588,7 +1618,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lons2, (&__pyx_v_azdat), (&__pyx_v_buflenaz)) != 0); if (__pyx_t_1) { - /* "_geod.pyx":98 + /* "_geod.pyx":104 * raise RuntimeError * if PyObject_AsWriteBuffer(lons2, &azdat, &buflenaz) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -1596,12 +1626,12 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ * raise RuntimeError */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L8; } __pyx_L8:; - /* "_geod.pyx":99 + /* "_geod.pyx":105 * if PyObject_AsWriteBuffer(lons2, &azdat, &buflenaz) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(lats2, &distdat, &buflend) <> 0: # <<<<<<<<<<<<<< @@ -1611,7 +1641,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lats2, (&__pyx_v_distdat), (&__pyx_v_buflend)) != 0); if (__pyx_t_1) { - /* "_geod.pyx":100 + /* "_geod.pyx":106 * raise RuntimeError * if PyObject_AsWriteBuffer(lats2, &distdat, &buflend) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -1619,12 +1649,12 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ * if not buflenlons == buflenlats == buflenaz == buflend: */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L9; } __pyx_L9:; - /* "_geod.pyx":102 + /* "_geod.pyx":108 * raise RuntimeError * # process data in buffer * if not buflenlons == buflenlats == buflenaz == buflend: # <<<<<<<<<<<<<< @@ -1641,42 +1671,42 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { - /* "_geod.pyx":103 + /* "_geod.pyx":109 * # process data in buffer * if not buflenlons == buflenlats == buflenaz == buflend: * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< * ndim = buflenlons//_doublesize * lonsdata = londata */ - __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_7), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_7), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L10; } __pyx_L10:; - /* "_geod.pyx":104 + /* "_geod.pyx":110 * if not buflenlons == buflenlats == buflenaz == buflend: * raise RuntimeError("Buffer lengths not the same") * ndim = buflenlons//_doublesize # <<<<<<<<<<<<<< * lonsdata = londata * latsdata = latdata */ - __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_buflenlons); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_buflenlons); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyNumber_FloorDivide(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = PyNumber_FloorDivide(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_ndim = __pyx_t_6; - /* "_geod.pyx":105 + /* "_geod.pyx":111 * raise RuntimeError("Buffer lengths not the same") * ndim = buflenlons//_doublesize * lonsdata = londata # <<<<<<<<<<<<<< @@ -1685,7 +1715,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_lonsdata = ((double *)__pyx_v_londata); - /* "_geod.pyx":106 + /* "_geod.pyx":112 * ndim = buflenlons//_doublesize * lonsdata = londata * latsdata = latdata # <<<<<<<<<<<<<< @@ -1694,7 +1724,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_latsdata = ((double *)__pyx_v_latdata); - /* "_geod.pyx":107 + /* "_geod.pyx":113 * lonsdata = londata * latsdata = latdata * azdata = azdat # <<<<<<<<<<<<<< @@ -1703,7 +1733,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_azdata = ((double *)__pyx_v_azdat); - /* "_geod.pyx":108 + /* "_geod.pyx":114 * latsdata = latdata * azdata = azdat * distdata = distdat # <<<<<<<<<<<<<< @@ -1712,7 +1742,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_distdata = ((double *)__pyx_v_distdat); - /* "_geod.pyx":109 + /* "_geod.pyx":115 * azdata = azdat * distdata = distdat * errmsg = 'undefined inverse geodesic (may be an antipodal point)' # <<<<<<<<<<<<<< @@ -1722,7 +1752,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ __Pyx_INCREF(((PyObject *)__pyx_kp_s_4)); __pyx_v_errmsg = ((PyObject *)__pyx_kp_s_4); - /* "_geod.pyx":110 + /* "_geod.pyx":116 * distdata = distdat * errmsg = 'undefined inverse geodesic (may be an antipodal point)' * for i from 0 <= i < ndim: # <<<<<<<<<<<<<< @@ -1732,17 +1762,17 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_6 = __pyx_v_ndim; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) { - /* "_geod.pyx":111 + /* "_geod.pyx":117 * errmsg = 'undefined inverse geodesic (may be an antipodal point)' * for i from 0 <= i < ndim: * if radians: # <<<<<<<<<<<<<< * self.geodesic_t.p1.v = lonsdata[i] * self.geodesic_t.p1.u = latsdata[i] */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_2) { - /* "_geod.pyx":112 + /* "_geod.pyx":118 * for i from 0 <= i < ndim: * if radians: * self.geodesic_t.p1.v = lonsdata[i] # <<<<<<<<<<<<<< @@ -1751,7 +1781,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ */ ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.v = (__pyx_v_lonsdata[__pyx_v_i]); - /* "_geod.pyx":113 + /* "_geod.pyx":119 * if radians: * self.geodesic_t.p1.v = lonsdata[i] * self.geodesic_t.p1.u = latsdata[i] # <<<<<<<<<<<<<< @@ -1760,7 +1790,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ */ ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.u = (__pyx_v_latsdata[__pyx_v_i]); - /* "_geod.pyx":114 + /* "_geod.pyx":120 * self.geodesic_t.p1.v = lonsdata[i] * self.geodesic_t.p1.u = latsdata[i] * self.geodesic_t.p2.v = azdata[i] # <<<<<<<<<<<<<< @@ -1769,7 +1799,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ */ ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v = (__pyx_v_azdata[__pyx_v_i]); - /* "_geod.pyx":115 + /* "_geod.pyx":121 * self.geodesic_t.p1.u = latsdata[i] * self.geodesic_t.p2.v = azdata[i] * self.geodesic_t.p2.u = distdata[i] # <<<<<<<<<<<<<< @@ -1781,85 +1811,85 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ } /*else*/ { - /* "_geod.pyx":117 + /* "_geod.pyx":123 * self.geodesic_t.p2.u = distdata[i] * else: * self.geodesic_t.p1.v = _dg2rad*lonsdata[i] # <<<<<<<<<<<<<< * self.geodesic_t.p1.u = _dg2rad*latsdata[i] * self.geodesic_t.p2.v = _dg2rad*azdata[i] */ - __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyFloat_FromDouble((__pyx_v_lonsdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyFloat_FromDouble((__pyx_v_lonsdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.v = __pyx_t_7; - /* "_geod.pyx":118 + /* "_geod.pyx":124 * else: * self.geodesic_t.p1.v = _dg2rad*lonsdata[i] * self.geodesic_t.p1.u = _dg2rad*latsdata[i] # <<<<<<<<<<<<<< * self.geodesic_t.p2.v = _dg2rad*azdata[i] * self.geodesic_t.p2.u = _dg2rad*distdata[i] */ - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyFloat_FromDouble((__pyx_v_latsdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyFloat_FromDouble((__pyx_v_latsdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.u = __pyx_t_7; - /* "_geod.pyx":119 + /* "_geod.pyx":125 * self.geodesic_t.p1.v = _dg2rad*lonsdata[i] * self.geodesic_t.p1.u = _dg2rad*latsdata[i] * self.geodesic_t.p2.v = _dg2rad*azdata[i] # <<<<<<<<<<<<<< * self.geodesic_t.p2.u = _dg2rad*distdata[i] * geod_inv(&self.geodesic_t) */ - __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyFloat_FromDouble((__pyx_v_azdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyFloat_FromDouble((__pyx_v_azdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v = __pyx_t_7; - /* "_geod.pyx":120 + /* "_geod.pyx":126 * self.geodesic_t.p1.u = _dg2rad*latsdata[i] * self.geodesic_t.p2.v = _dg2rad*azdata[i] * self.geodesic_t.p2.u = _dg2rad*distdata[i] # <<<<<<<<<<<<<< * geod_inv(&self.geodesic_t) * if self.geodesic_t.DIST != self.geodesic_t.DIST: # check for NaN */ - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyFloat_FromDouble((__pyx_v_distdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyFloat_FromDouble((__pyx_v_distdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.u = __pyx_t_7; } __pyx_L13:; - /* "_geod.pyx":121 + /* "_geod.pyx":127 * self.geodesic_t.p2.v = _dg2rad*azdata[i] * self.geodesic_t.p2.u = _dg2rad*distdata[i] * geod_inv(&self.geodesic_t) # <<<<<<<<<<<<<< @@ -1868,78 +1898,87 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ */ geod_inv((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t)); - /* "_geod.pyx":122 + /* "_geod.pyx":128 * self.geodesic_t.p2.u = _dg2rad*distdata[i] * geod_inv(&self.geodesic_t) * if self.geodesic_t.DIST != self.geodesic_t.DIST: # check for NaN # <<<<<<<<<<<<<< * raise ValueError('undefined inverse geodesic (may be an antipodal point)') - * if pj_errno != 0: + * err = pj_ctx_get_errno(pj_get_default_ctx()) */ __pyx_t_2 = (((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.DIST != ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.DIST); if (__pyx_t_2) { - /* "_geod.pyx":123 + /* "_geod.pyx":129 * geod_inv(&self.geodesic_t) * if self.geodesic_t.DIST != self.geodesic_t.DIST: # check for NaN * raise ValueError('undefined inverse geodesic (may be an antipodal point)') # <<<<<<<<<<<<<< - * if pj_errno != 0: - * raise RuntimeError(pj_strerrno(pj_errno)) + * err = pj_ctx_get_errno(pj_get_default_ctx()) + * if err != 0: */ - __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_8), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_8), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L14; } __pyx_L14:; - /* "_geod.pyx":124 + /* "_geod.pyx":130 * if self.geodesic_t.DIST != self.geodesic_t.DIST: # check for NaN * raise ValueError('undefined inverse geodesic (may be an antipodal point)') - * if pj_errno != 0: # <<<<<<<<<<<<<< - * raise RuntimeError(pj_strerrno(pj_errno)) + * err = pj_ctx_get_errno(pj_get_default_ctx()) # <<<<<<<<<<<<<< + * if err != 0: + * raise RuntimeError(pj_strerrno(err)) + */ + __pyx_v_err = pj_ctx_get_errno(pj_get_default_ctx()); + + /* "_geod.pyx":131 + * raise ValueError('undefined inverse geodesic (may be an antipodal point)') + * err = pj_ctx_get_errno(pj_get_default_ctx()) + * if err != 0: # <<<<<<<<<<<<<< + * raise RuntimeError(pj_strerrno(err)) * if radians: */ - __pyx_t_2 = (pj_errno != 0); + __pyx_t_2 = (__pyx_v_err != 0); if (__pyx_t_2) { - /* "_geod.pyx":125 - * raise ValueError('undefined inverse geodesic (may be an antipodal point)') - * if pj_errno != 0: - * raise RuntimeError(pj_strerrno(pj_errno)) # <<<<<<<<<<<<<< + /* "_geod.pyx":132 + * err = pj_ctx_get_errno(pj_get_default_ctx()) + * if err != 0: + * raise RuntimeError(pj_strerrno(err)) # <<<<<<<<<<<<<< * if radians: * lonsdata[i] = self.geodesic_t.ALPHA12 */ - __pyx_t_5 = PyBytes_FromString(pj_strerrno(pj_errno)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_5)); __Pyx_GIVEREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; - __pyx_t_5 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L15; } __pyx_L15:; - /* "_geod.pyx":126 - * if pj_errno != 0: - * raise RuntimeError(pj_strerrno(pj_errno)) + /* "_geod.pyx":133 + * if err != 0: + * raise RuntimeError(pj_strerrno(err)) * if radians: # <<<<<<<<<<<<<< * lonsdata[i] = self.geodesic_t.ALPHA12 * latsdata[i] = self.geodesic_t.ALPHA21 */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_2) { - /* "_geod.pyx":127 - * raise RuntimeError(pj_strerrno(pj_errno)) + /* "_geod.pyx":134 + * raise RuntimeError(pj_strerrno(err)) * if radians: * lonsdata[i] = self.geodesic_t.ALPHA12 # <<<<<<<<<<<<<< * latsdata[i] = self.geodesic_t.ALPHA21 @@ -1947,7 +1986,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ */ (__pyx_v_lonsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA12; - /* "_geod.pyx":128 + /* "_geod.pyx":135 * if radians: * lonsdata[i] = self.geodesic_t.ALPHA12 * latsdata[i] = self.geodesic_t.ALPHA21 # <<<<<<<<<<<<<< @@ -1959,47 +1998,47 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ } /*else*/ { - /* "_geod.pyx":130 + /* "_geod.pyx":137 * latsdata[i] = self.geodesic_t.ALPHA21 * else: * lonsdata[i] = _rad2dg*self.geodesic_t.ALPHA12 # <<<<<<<<<<<<<< * latsdata[i] = _rad2dg*self.geodesic_t.ALPHA21 * azdata[i] = self.geodesic_t.DIST */ - __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA12); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA12); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; (__pyx_v_lonsdata[__pyx_v_i]) = __pyx_t_7; - /* "_geod.pyx":131 + /* "_geod.pyx":138 * else: * lonsdata[i] = _rad2dg*self.geodesic_t.ALPHA12 * latsdata[i] = _rad2dg*self.geodesic_t.ALPHA21 # <<<<<<<<<<<<<< * azdata[i] = self.geodesic_t.DIST * */ - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA21); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA21); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; (__pyx_v_latsdata[__pyx_v_i]) = __pyx_t_7; } __pyx_L16:; - /* "_geod.pyx":132 + /* "_geod.pyx":139 * lonsdata[i] = _rad2dg*self.geodesic_t.ALPHA12 * latsdata[i] = _rad2dg*self.geodesic_t.ALPHA21 * azdata[i] = self.geodesic_t.DIST # <<<<<<<<<<<<<< @@ -2024,7 +2063,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ return __pyx_r; } -/* "_geod.pyx":134 +/* "_geod.pyx":141 * azdata[i] = self.geodesic_t.DIST * * def _npts(self, double lon1, double lat1, double lon2, double lat2, int npts, radians=False): # <<<<<<<<<<<<<< @@ -2083,25 +2122,25 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lat1); if (likely(values[1])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lon2); if (likely(values[2])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lat2); if (likely(values[3])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 4: values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__npts); if (likely(values[4])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 5: if (kw_args > 0) { @@ -2110,7 +2149,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_npts") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_npts") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { @@ -2124,33 +2163,33 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * default: goto __pyx_L5_argtuple_error; } } - __pyx_v_lon1 = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_lon1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_v_lat1 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_lat1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_v_lon2 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_lon2 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_v_lat2 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_lat2 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_v_npts = __Pyx_PyInt_AsInt(values[4]); if (unlikely((__pyx_v_npts == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_v_lon1 = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_lon1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_v_lat1 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_lat1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_v_lon2 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_lon2 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_v_lat2 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_lat2 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_v_npts = __Pyx_PyInt_AsInt(values[4]); if (unlikely((__pyx_v_npts == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_radians = values[5]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("_geod.Geod._npts", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - /* "_geod.pyx":139 + /* "_geod.pyx":146 * cdef int i * cdef double del_s * if radians: # <<<<<<<<<<<<<< * self.geodesic_t.p1.v = lon1 * self.geodesic_t.p1.u = lat1 */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_1) { - /* "_geod.pyx":140 + /* "_geod.pyx":147 * cdef double del_s * if radians: * self.geodesic_t.p1.v = lon1 # <<<<<<<<<<<<<< @@ -2159,7 +2198,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * */ ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.v = __pyx_v_lon1; - /* "_geod.pyx":141 + /* "_geod.pyx":148 * if radians: * self.geodesic_t.p1.v = lon1 * self.geodesic_t.p1.u = lat1 # <<<<<<<<<<<<<< @@ -2168,7 +2207,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * */ ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.u = __pyx_v_lat1; - /* "_geod.pyx":142 + /* "_geod.pyx":149 * self.geodesic_t.p1.v = lon1 * self.geodesic_t.p1.u = lat1 * self.geodesic_t.p2.v = lon2 # <<<<<<<<<<<<<< @@ -2177,7 +2216,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * */ ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v = __pyx_v_lon2; - /* "_geod.pyx":143 + /* "_geod.pyx":150 * self.geodesic_t.p1.u = lat1 * self.geodesic_t.p2.v = lon2 * self.geodesic_t.p2.u = lat2 # <<<<<<<<<<<<<< @@ -2189,85 +2228,85 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * } /*else*/ { - /* "_geod.pyx":145 + /* "_geod.pyx":152 * self.geodesic_t.p2.u = lat2 * else: * self.geodesic_t.p1.v = _dg2rad*lon1 # <<<<<<<<<<<<<< * self.geodesic_t.p1.u = _dg2rad*lat1 * self.geodesic_t.p2.v = _dg2rad*lon2 */ - __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyFloat_FromDouble(__pyx_v_lon1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyFloat_FromDouble(__pyx_v_lon1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.v = __pyx_t_5; - /* "_geod.pyx":146 + /* "_geod.pyx":153 * else: * self.geodesic_t.p1.v = _dg2rad*lon1 * self.geodesic_t.p1.u = _dg2rad*lat1 # <<<<<<<<<<<<<< * self.geodesic_t.p2.v = _dg2rad*lon2 * self.geodesic_t.p2.u = _dg2rad*lat2 */ - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyFloat_FromDouble(__pyx_v_lat1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyFloat_FromDouble(__pyx_v_lat1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.u = __pyx_t_5; - /* "_geod.pyx":147 + /* "_geod.pyx":154 * self.geodesic_t.p1.v = _dg2rad*lon1 * self.geodesic_t.p1.u = _dg2rad*lat1 * self.geodesic_t.p2.v = _dg2rad*lon2 # <<<<<<<<<<<<<< * self.geodesic_t.p2.u = _dg2rad*lat2 * # do inverse computation to set azimuths, distance. */ - __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyFloat_FromDouble(__pyx_v_lon2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyFloat_FromDouble(__pyx_v_lon2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v = __pyx_t_5; - /* "_geod.pyx":148 + /* "_geod.pyx":155 * self.geodesic_t.p1.u = _dg2rad*lat1 * self.geodesic_t.p2.v = _dg2rad*lon2 * self.geodesic_t.p2.u = _dg2rad*lat2 # <<<<<<<<<<<<<< * # do inverse computation to set azimuths, distance. * geod_inv(&self.geodesic_t) */ - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyFloat_FromDouble(__pyx_v_lat2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyFloat_FromDouble(__pyx_v_lat2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.u = __pyx_t_5; } __pyx_L6:; - /* "_geod.pyx":150 + /* "_geod.pyx":157 * self.geodesic_t.p2.u = _dg2rad*lat2 * # do inverse computation to set azimuths, distance. * geod_inv(&self.geodesic_t) # <<<<<<<<<<<<<< @@ -2276,7 +2315,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * */ geod_inv((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t)); - /* "_geod.pyx":152 + /* "_geod.pyx":159 * geod_inv(&self.geodesic_t) * # set up some constants needed for forward computation. * geod_pre(&self.geodesic_t) # <<<<<<<<<<<<<< @@ -2285,7 +2324,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * */ geod_pre((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t)); - /* "_geod.pyx":154 + /* "_geod.pyx":161 * geod_pre(&self.geodesic_t) * # distance increment. * del_s = self.geodesic_t.DIST/(npts+1) # <<<<<<<<<<<<<< @@ -2295,11 +2334,11 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * __pyx_t_6 = (__pyx_v_npts + 1); if (unlikely(__pyx_t_6 == 0)) { PyErr_Format(PyExc_ZeroDivisionError, "float division"); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_v_del_s = (((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.DIST / __pyx_t_6); - /* "_geod.pyx":156 + /* "_geod.pyx":163 * del_s = self.geodesic_t.DIST/(npts+1) * # initialize output tuples. * lats = () # <<<<<<<<<<<<<< @@ -2309,7 +2348,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * __Pyx_INCREF(((PyObject *)__pyx_empty_tuple)); __pyx_v_lats = __pyx_empty_tuple; - /* "_geod.pyx":157 + /* "_geod.pyx":164 * # initialize output tuples. * lats = () * lons = () # <<<<<<<<<<<<<< @@ -2319,7 +2358,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * __Pyx_INCREF(((PyObject *)__pyx_empty_tuple)); __pyx_v_lons = __pyx_empty_tuple; - /* "_geod.pyx":159 + /* "_geod.pyx":166 * lons = () * # loop over intermediate points, compute lat/lons. * for i from 1 <= i < npts+1: # <<<<<<<<<<<<<< @@ -2329,7 +2368,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * __pyx_t_6 = (__pyx_v_npts + 1); for (__pyx_v_i = 1; __pyx_v_i < __pyx_t_6; __pyx_v_i++) { - /* "_geod.pyx":160 + /* "_geod.pyx":167 * # loop over intermediate points, compute lat/lons. * for i from 1 <= i < npts+1: * self.geodesic_t.DIST = i*del_s # <<<<<<<<<<<<<< @@ -2338,7 +2377,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * */ ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.DIST = (__pyx_v_i * __pyx_v_del_s); - /* "_geod.pyx":161 + /* "_geod.pyx":168 * for i from 1 <= i < npts+1: * self.geodesic_t.DIST = i*del_s * geod_for(&self.geodesic_t) # <<<<<<<<<<<<<< @@ -2347,52 +2386,52 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * */ geod_for((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t)); - /* "_geod.pyx":162 + /* "_geod.pyx":169 * self.geodesic_t.DIST = i*del_s * geod_for(&self.geodesic_t) * if radians: # <<<<<<<<<<<<<< * lats = lats + (self.geodesic_t.p2.u,) * lons = lons + (self.geodesic_t.p2.v,) */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_1) { - /* "_geod.pyx":163 + /* "_geod.pyx":170 * geod_for(&self.geodesic_t) * if radians: * lats = lats + (self.geodesic_t.p2.u,) # <<<<<<<<<<<<<< * lons = lons + (self.geodesic_t.p2.v,) * else: */ - __pyx_t_2 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.u); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.u); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(((PyObject *)__pyx_v_lats), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyNumber_Add(((PyObject *)__pyx_v_lats), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_v_lats)); __pyx_v_lats = __pyx_t_2; __pyx_t_2 = 0; - /* "_geod.pyx":164 + /* "_geod.pyx":171 * if radians: * lats = lats + (self.geodesic_t.p2.u,) * lons = lons + (self.geodesic_t.p2.v,) # <<<<<<<<<<<<<< * else: * lats = lats + (_rad2dg*self.geodesic_t.p2.u,) */ - __pyx_t_2 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(((PyObject *)__pyx_v_lons), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyNumber_Add(((PyObject *)__pyx_v_lons), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_v_lons)); @@ -2402,54 +2441,54 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * } /*else*/ { - /* "_geod.pyx":166 + /* "_geod.pyx":173 * lons = lons + (self.geodesic_t.p2.v,) * else: * lats = lats + (_rad2dg*self.geodesic_t.p2.u,) # <<<<<<<<<<<<<< * lons = lons + (_rad2dg*self.geodesic_t.p2.v,) * return lons, lats */ - __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.u); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.u); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_v_lats), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_v_lats), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_v_lats)); __pyx_v_lats = __pyx_t_4; __pyx_t_4 = 0; - /* "_geod.pyx":167 + /* "_geod.pyx":174 * else: * lats = lats + (_rad2dg*self.geodesic_t.p2.u,) * lons = lons + (_rad2dg*self.geodesic_t.p2.v,) # <<<<<<<<<<<<<< * return lons, lats * */ - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(((PyObject *)__pyx_v_lons), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyNumber_Add(((PyObject *)__pyx_v_lons), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_v_lons)); @@ -2459,7 +2498,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * __pyx_L9:; } - /* "_geod.pyx":168 + /* "_geod.pyx":175 * lats = lats + (_rad2dg*self.geodesic_t.p2.u,) * lons = lons + (_rad2dg*self.geodesic_t.p2.v,) * return lons, lats # <<<<<<<<<<<<<< @@ -2467,7 +2506,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * * cdef _strencode(pystr,encoding='ascii'): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_INCREF(((PyObject *)__pyx_v_lons)); PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_lons)); @@ -2609,7 +2648,7 @@ static int __pyx_pf_5_geod_4Geod_12proj_version_2__del__(PyObject *__pyx_v_self) return __pyx_r; } -/* "_geod.pyx":170 +/* "_geod.pyx":177 * return lons, lats * * cdef _strencode(pystr,encoding='ascii'): # <<<<<<<<<<<<<< @@ -2638,7 +2677,7 @@ static PyObject *__pyx_f_5_geod__strencode(PyObject *__pyx_v_pystr, struct __pyx } } - /* "_geod.pyx":172 + /* "_geod.pyx":179 * cdef _strencode(pystr,encoding='ascii'): * # encode a string into bytes. If already bytes, do nothing. * try: # <<<<<<<<<<<<<< @@ -2652,7 +2691,7 @@ static PyObject *__pyx_f_5_geod__strencode(PyObject *__pyx_v_pystr, struct __pyx __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "_geod.pyx":173 + /* "_geod.pyx":180 * # encode a string into bytes. If already bytes, do nothing. * try: * return pystr.encode(encoding) # <<<<<<<<<<<<<< @@ -2660,14 +2699,14 @@ static PyObject *__pyx_f_5_geod__strencode(PyObject *__pyx_v_pystr, struct __pyx * return pystr # already bytes? */ __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = PyObject_GetAttr(__pyx_v_pystr, __pyx_n_s__encode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_t_4 = PyObject_GetAttr(__pyx_v_pystr, __pyx_n_s__encode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); __Pyx_INCREF(__pyx_v_encoding); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_encoding); __Pyx_GIVEREF(__pyx_v_encoding); - __pyx_t_6 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_t_6 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; @@ -2690,7 +2729,7 @@ static PyObject *__pyx_f_5_geod__strencode(PyObject *__pyx_v_pystr, struct __pyx __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "_geod.pyx":174 + /* "_geod.pyx":181 * try: * return pystr.encode(encoding) * except AttributeError: # <<<<<<<<<<<<<< @@ -2699,12 +2738,12 @@ static PyObject *__pyx_f_5_geod__strencode(PyObject *__pyx_v_pystr, struct __pyx __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError); if (__pyx_t_7) { __Pyx_AddTraceback("_geod._strencode", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} + if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_GOTREF(__pyx_t_5); __Pyx_GOTREF(__pyx_t_4); - /* "_geod.pyx":175 + /* "_geod.pyx":182 * return pystr.encode(encoding) * except AttributeError: * return pystr # already bytes? # <<<<<<<<<<<<<< @@ -3047,9 +3086,9 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {0, 0, 0, 0, 0, 0, 0} }; static int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_AttributeError = __Pyx_GetName(__pyx_b, __pyx_n_s__AttributeError); if (!__pyx_builtin_AttributeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_builtin_AttributeError = __Pyx_GetName(__pyx_b, __pyx_n_s__AttributeError); if (!__pyx_builtin_AttributeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} return 0; __pyx_L1_error:; return -1; @@ -3059,56 +3098,56 @@ static int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants"); - /* "_geod.pyx":48 + /* "_geod.pyx":51 * # process data in buffer * if not buflenlons == buflenlats == buflenaz == buflend: * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< * ndim = buflenlons//_doublesize * lonsdata = londata */ - __pyx_k_tuple_3 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_3 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_3)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_2)); PyTuple_SET_ITEM(__pyx_k_tuple_3, 0, ((PyObject *)__pyx_kp_s_2)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_2)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_3)); - /* "_geod.pyx":73 + /* "_geod.pyx":78 * # check for NaN. * if self.geodesic_t.ALPHA21 != self.geodesic_t.ALPHA21: * raise ValueError('undefined inverse geodesic (may be an antipodal point)') # <<<<<<<<<<<<<< * if radians: * lonsdata[i] = self.geodesic_t.p2.v */ - __pyx_k_tuple_5 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_5 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_5)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_4)); PyTuple_SET_ITEM(__pyx_k_tuple_5, 0, ((PyObject *)__pyx_kp_s_4)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_4)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_5)); - /* "_geod.pyx":103 + /* "_geod.pyx":109 * # process data in buffer * if not buflenlons == buflenlats == buflenaz == buflend: * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< * ndim = buflenlons//_doublesize * lonsdata = londata */ - __pyx_k_tuple_7 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_7 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_7)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_2)); PyTuple_SET_ITEM(__pyx_k_tuple_7, 0, ((PyObject *)__pyx_kp_s_2)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_2)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_7)); - /* "_geod.pyx":123 + /* "_geod.pyx":129 * geod_inv(&self.geodesic_t) * if self.geodesic_t.DIST != self.geodesic_t.DIST: # check for NaN * raise ValueError('undefined inverse geodesic (may be an antipodal point)') # <<<<<<<<<<<<<< - * if pj_errno != 0: - * raise RuntimeError(pj_strerrno(pj_errno)) + * err = pj_ctx_get_errno(pj_get_default_ctx()) + * if err != 0: */ - __pyx_k_tuple_8 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_8 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_8)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_4)); PyTuple_SET_ITEM(__pyx_k_tuple_8, 0, ((PyObject *)__pyx_kp_s_4)); @@ -3197,7 +3236,7 @@ PyMODINIT_FUNC PyInit__geod(void) /*--- Function import code ---*/ /*--- Execution code ---*/ - /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":1 + /* "/Volumes/User/jwhitaker/python/basemap.jswhit.git/src/_pyproj.pxi":1 * import math # <<<<<<<<<<<<<< * * _dg2rad = math.radians(1.) @@ -3207,7 +3246,7 @@ PyMODINIT_FUNC PyInit__geod(void) if (PyObject_SetAttr(__pyx_m, __pyx_n_s__math, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":3 + /* "/Volumes/User/jwhitaker/python/basemap.jswhit.git/src/_pyproj.pxi":3 * import math * * _dg2rad = math.radians(1.) # <<<<<<<<<<<<<< @@ -3233,7 +3272,7 @@ PyMODINIT_FUNC PyInit__geod(void) if (PyObject_SetAttr(__pyx_m, __pyx_n_s___dg2rad, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":4 + /* "/Volumes/User/jwhitaker/python/basemap.jswhit.git/src/_pyproj.pxi":4 * * _dg2rad = math.radians(1.) * _rad2dg = math.degrees(1.) # <<<<<<<<<<<<<< @@ -3259,7 +3298,7 @@ PyMODINIT_FUNC PyInit__geod(void) if (PyObject_SetAttr(__pyx_m, __pyx_n_s___rad2dg, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":5 + /* "/Volumes/User/jwhitaker/python/basemap.jswhit.git/src/_pyproj.pxi":5 * _dg2rad = math.radians(1.) * _rad2dg = math.degrees(1.) * _doublesize = sizeof(double) # <<<<<<<<<<<<<< @@ -3271,7 +3310,7 @@ PyMODINIT_FUNC PyInit__geod(void) if (PyObject_SetAttr(__pyx_m, __pyx_n_s___doublesize, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":6 + /* "/Volumes/User/jwhitaker/python/basemap.jswhit.git/src/_pyproj.pxi":6 * _rad2dg = math.degrees(1.) * _doublesize = sizeof(double) * __version__ = "1.9.0" # <<<<<<<<<<<<<< @@ -3280,40 +3319,40 @@ PyMODINIT_FUNC PyInit__geod(void) */ if (PyObject_SetAttr(__pyx_m, __pyx_n_s____version__, ((PyObject *)__pyx_kp_s_10)) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /* "_geod.pyx":27 + /* "_geod.pyx":29 * return (self.__class__,(self.geodstring,)) * * def _fwd(self, object lons, object lats, object az, object dist, radians=False): # <<<<<<<<<<<<<< * """ * forward transformation - determine longitude, latitude and back azimuth */ - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_1 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_geod.pyx":83 + /* "_geod.pyx":88 * azdata[i] = _rad2dg*self.geodesic_t.ALPHA21 * * def _inv(self, object lons1, object lats1, object lons2, object lats2, radians=False): # <<<<<<<<<<<<<< * """ * inverse transformation - return forward and back azimuths, plus distance */ - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_6 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_geod.pyx":134 + /* "_geod.pyx":141 * azdata[i] = self.geodesic_t.DIST * * def _npts(self, double lon1, double lat1, double lon2, double lat2, int npts, radians=False): # <<<<<<<<<<<<<< * """ * given initial and terminus lat/lon, find npts intermediate points.""" */ - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_9 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); diff --git a/src/_geod.pyx b/src/_geod.pyx index 2de8f02c7..bc1f07854 100644 --- a/src/_geod.pyx +++ b/src/_geod.pyx @@ -10,14 +10,16 @@ cdef class Geod: def __cinit__(self, geodstring): cdef GEODESIC_T GEOD_T + cdef int err # setup geod initialization string. self.geodstring = geodstring bytestr = _strencode(geodstring) self.geodinitstring = bytestr # initialize projection self.geodesic_t = GEOD_init_plus(self.geodinitstring, &GEOD_T)[0] - if pj_errno != 0: - raise RuntimeError(pj_strerrno(pj_errno)) + err = pj_ctx_get_errno(pj_get_default_ctx()) + if err != 0: + raise RuntimeError(pj_strerrno(err)) self.proj_version = PJ_VERSION/100. def __reduce__(self): @@ -34,6 +36,7 @@ cdef class Geod: cdef Py_ssize_t buflenlons, buflenlats, buflenaz, buflend, ndim, i cdef double *lonsdata, *latsdata, *azdata, *distdata cdef void *londata, *latdata, *azdat, *distdat + cdef int err # if buffer api is supported, get pointer to data buffers. if PyObject_AsWriteBuffer(lons, &londata, &buflenlons) <> 0: raise RuntimeError @@ -63,11 +66,13 @@ cdef class Geod: self.geodesic_t.ALPHA12 = _dg2rad*azdata[i] self.geodesic_t.DIST = distdata[i] geod_pre(&self.geodesic_t) - if pj_errno != 0: - raise RuntimeError(pj_strerrno(pj_errno)) + err = pj_ctx_get_errno(pj_get_default_ctx()) + if err != 0: + raise RuntimeError(pj_strerrno(err)) geod_for(&self.geodesic_t) - if pj_errno != 0: - raise RuntimeError(pj_strerrno(pj_errno)) + err = pj_ctx_get_errno(pj_get_default_ctx()) + if err != 0: + raise RuntimeError(pj_strerrno(err)) # check for NaN. if self.geodesic_t.ALPHA21 != self.geodesic_t.ALPHA21: raise ValueError('undefined inverse geodesic (may be an antipodal point)') @@ -89,6 +94,7 @@ cdef class Geod: cdef Py_ssize_t buflenlons, buflenlats, buflenaz, buflend, ndim, i cdef double *lonsdata, *latsdata, *azdata, *distdata cdef void *londata, *latdata, *azdat, *distdat + cdef int err # if buffer api is supported, get pointer to data buffers. if PyObject_AsWriteBuffer(lons1, &londata, &buflenlons) <> 0: raise RuntimeError @@ -121,8 +127,9 @@ cdef class Geod: geod_inv(&self.geodesic_t) if self.geodesic_t.DIST != self.geodesic_t.DIST: # check for NaN raise ValueError('undefined inverse geodesic (may be an antipodal point)') - if pj_errno != 0: - raise RuntimeError(pj_strerrno(pj_errno)) + err = pj_ctx_get_errno(pj_get_default_ctx()) + if err != 0: + raise RuntimeError(pj_strerrno(err)) if radians: lonsdata[i] = self.geodesic_t.ALPHA12 latsdata[i] = self.geodesic_t.ALPHA21 diff --git a/src/_proj.c b/src/_proj.c index c0714277c..75ffbab17 100644 --- a/src/_proj.c +++ b/src/_proj.c @@ -1,4 +1,4 @@ -/* Generated by Cython 0.15.1 on Tue Dec 13 08:50:42 2011 */ +/* Generated by Cython 0.15.1 on Fri Dec 16 10:22:33 2011 */ #define PY_SSIZE_T_CLEAN #include "Python.h" @@ -326,7 +326,7 @@ static const char *__pyx_f[] = { struct __pyx_obj_5_proj_Proj; struct __pyx_opt_args_5_proj__strencode; -/* "_proj.pyx":281 +/* "_proj.pyx":294 * yy[i] = yy[i]*_rad2dg * * cdef _strencode(pystr,encoding='ascii'): # <<<<<<<<<<<<<< @@ -621,12 +621,13 @@ static PyObject *__pyx_pf_5_proj_set_datapath(PyObject *__pyx_self, PyObject *__ * * def __cinit__(self, projstring): # <<<<<<<<<<<<<< * # setup proj initialization string. - * self.srs = projstring + * cdef int err */ static int __pyx_pf_5_proj_4Proj___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static int __pyx_pf_5_proj_4Proj___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_projstring = 0; + int __pyx_v_err; PyObject *__pyx_v_bytestr = NULL; int __pyx_r; __Pyx_RefNannyDeclarations @@ -674,9 +675,9 @@ static int __pyx_pf_5_proj_4Proj___cinit__(PyObject *__pyx_v_self, PyObject *__p return -1; __pyx_L4_argument_unpacking_done:; - /* "_proj.pyx":21 - * def __cinit__(self, projstring): + /* "_proj.pyx":22 * # setup proj initialization string. + * cdef int err * self.srs = projstring # <<<<<<<<<<<<<< * bytestr = _strencode(projstring) * self.pjinitstring = bytestr @@ -687,79 +688,88 @@ static int __pyx_pf_5_proj_4Proj___cinit__(PyObject *__pyx_v_self, PyObject *__p __Pyx_DECREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs); ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs = __pyx_v_projstring; - /* "_proj.pyx":22 - * # setup proj initialization string. + /* "_proj.pyx":23 + * cdef int err * self.srs = projstring * bytestr = _strencode(projstring) # <<<<<<<<<<<<<< * self.pjinitstring = bytestr * # initialize projection */ - __pyx_t_1 = __pyx_f_5_proj__strencode(__pyx_v_projstring, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __pyx_f_5_proj__strencode(__pyx_v_projstring, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_bytestr = __pyx_t_1; __pyx_t_1 = 0; - /* "_proj.pyx":23 + /* "_proj.pyx":24 * self.srs = projstring * bytestr = _strencode(projstring) * self.pjinitstring = bytestr # <<<<<<<<<<<<<< * # initialize projection * self.projpj = pj_init_plus(self.pjinitstring) */ - __pyx_t_2 = PyBytes_AsString(__pyx_v_bytestr); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyBytes_AsString(__pyx_v_bytestr); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;} ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->pjinitstring = __pyx_t_2; - /* "_proj.pyx":25 + /* "_proj.pyx":26 * self.pjinitstring = bytestr * # initialize projection * self.projpj = pj_init_plus(self.pjinitstring) # <<<<<<<<<<<<<< - * if pj_errno != 0: - * raise RuntimeError(pj_strerrno(pj_errno)) + * err = pj_ctx_get_errno(pj_get_default_ctx()) + * if err != 0: */ ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projpj = pj_init_plus(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->pjinitstring); - /* "_proj.pyx":26 + /* "_proj.pyx":27 * # initialize projection * self.projpj = pj_init_plus(self.pjinitstring) - * if pj_errno != 0: # <<<<<<<<<<<<<< - * raise RuntimeError(pj_strerrno(pj_errno)) + * err = pj_ctx_get_errno(pj_get_default_ctx()) # <<<<<<<<<<<<<< + * if err != 0: + * raise RuntimeError(pj_strerrno(err)) + */ + __pyx_v_err = pj_ctx_get_errno(pj_get_default_ctx()); + + /* "_proj.pyx":28 + * self.projpj = pj_init_plus(self.pjinitstring) + * err = pj_ctx_get_errno(pj_get_default_ctx()) + * if err != 0: # <<<<<<<<<<<<<< + * raise RuntimeError(pj_strerrno(err)) * self.proj_version = PJ_VERSION/100. */ - __pyx_t_3 = (pj_errno != 0); + __pyx_t_3 = (__pyx_v_err != 0); if (__pyx_t_3) { - /* "_proj.pyx":27 - * self.projpj = pj_init_plus(self.pjinitstring) - * if pj_errno != 0: - * raise RuntimeError(pj_strerrno(pj_errno)) # <<<<<<<<<<<<<< + /* "_proj.pyx":29 + * err = pj_ctx_get_errno(pj_get_default_ctx()) + * if err != 0: + * raise RuntimeError(pj_strerrno(err)) # <<<<<<<<<<<<<< * self.proj_version = PJ_VERSION/100. * */ - __pyx_t_1 = PyBytes_FromString(pj_strerrno(pj_errno)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_1)); __Pyx_GIVEREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; - __pyx_t_1 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; - /* "_proj.pyx":28 - * if pj_errno != 0: - * raise RuntimeError(pj_strerrno(pj_errno)) + /* "_proj.pyx":30 + * if err != 0: + * raise RuntimeError(pj_strerrno(err)) * self.proj_version = PJ_VERSION/100. # <<<<<<<<<<<<<< * * def __dealloc__(self): */ - __pyx_t_1 = PyFloat_FromDouble((PJ_VERSION / 100.)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyFloat_FromDouble((PJ_VERSION / 100.)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->proj_version); @@ -780,7 +790,7 @@ static int __pyx_pf_5_proj_4Proj___cinit__(PyObject *__pyx_v_self, PyObject *__p return __pyx_r; } -/* "_proj.pyx":30 +/* "_proj.pyx":32 * self.proj_version = PJ_VERSION/100. * * def __dealloc__(self): # <<<<<<<<<<<<<< @@ -793,7 +803,7 @@ static void __pyx_pf_5_proj_4Proj_1__dealloc__(PyObject *__pyx_v_self) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__dealloc__"); - /* "_proj.pyx":32 + /* "_proj.pyx":34 * def __dealloc__(self): * """destroy projection definition""" * pj_free(self.projpj) # <<<<<<<<<<<<<< @@ -805,7 +815,7 @@ static void __pyx_pf_5_proj_4Proj_1__dealloc__(PyObject *__pyx_v_self) { __Pyx_RefNannyFinishContext(); } -/* "_proj.pyx":34 +/* "_proj.pyx":36 * pj_free(self.projpj) * * def __reduce__(self): # <<<<<<<<<<<<<< @@ -826,7 +836,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_2__reduce__(PyObject *__pyx_v_self, CYTHO int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__reduce__"); - /* "_proj.pyx":36 + /* "_proj.pyx":38 * def __reduce__(self): * """special method that allows pyproj.Proj instance to be pickled""" * return (self.__class__,(self.srs,)) # <<<<<<<<<<<<<< @@ -834,14 +844,14 @@ static PyObject *__pyx_pf_5_proj_4Proj_2__reduce__(PyObject *__pyx_v_self, CYTHO * def _fwd(self, object lons, object lats, radians=False, errcheck=False): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_INCREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs); PyTuple_SET_ITEM(__pyx_t_2, 0, ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs); __Pyx_GIVEREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs); - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); @@ -867,7 +877,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_2__reduce__(PyObject *__pyx_v_self, CYTHO return __pyx_r; } -/* "_proj.pyx":38 +/* "_proj.pyx":40 * return (self.__class__,(self.srs,)) * * def _fwd(self, object lons, object lats, radians=False, errcheck=False): # <<<<<<<<<<<<<< @@ -892,6 +902,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ double *__pyx_v_latsdata; void *__pyx_v_londata; void *__pyx_v_latdata; + int __pyx_v_err; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; @@ -931,7 +942,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lats); if (likely(values[1])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_fwd", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_fwd", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { @@ -945,7 +956,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_fwd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_fwd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { @@ -964,15 +975,15 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_fwd", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_fwd", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("_proj.Proj._fwd", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - /* "_proj.pyx":52 - * cdef void *londata, *latdata + /* "_proj.pyx":55 + * cdef int err * # if buffer api is supported, get pointer to data buffers. * if PyObject_AsWriteBuffer(lons, &londata, &buflenx) <> 0: # <<<<<<<<<<<<<< * raise RuntimeError @@ -981,7 +992,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lons, (&__pyx_v_londata), (&__pyx_v_buflenx)) != 0); if (__pyx_t_1) { - /* "_proj.pyx":53 + /* "_proj.pyx":56 * # if buffer api is supported, get pointer to data buffers. * if PyObject_AsWriteBuffer(lons, &londata, &buflenx) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -989,12 +1000,12 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ * raise RuntimeError */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; - /* "_proj.pyx":54 + /* "_proj.pyx":57 * if PyObject_AsWriteBuffer(lons, &londata, &buflenx) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(lats, &latdata, &bufleny) <> 0: # <<<<<<<<<<<<<< @@ -1004,7 +1015,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lats, (&__pyx_v_latdata), (&__pyx_v_bufleny)) != 0); if (__pyx_t_1) { - /* "_proj.pyx":55 + /* "_proj.pyx":58 * raise RuntimeError * if PyObject_AsWriteBuffer(lats, &latdata, &bufleny) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -1012,12 +1023,12 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ * if buflenx != bufleny: */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L7; } __pyx_L7:; - /* "_proj.pyx":57 + /* "_proj.pyx":60 * raise RuntimeError * # process data in buffer * if buflenx != bufleny: # <<<<<<<<<<<<<< @@ -1027,42 +1038,42 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (__pyx_v_buflenx != __pyx_v_bufleny); if (__pyx_t_1) { - /* "_proj.pyx":58 + /* "_proj.pyx":61 * # process data in buffer * if buflenx != bufleny: * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< * ndim = buflenx//_doublesize * lonsdata = londata */ - __pyx_t_2 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L8; } __pyx_L8:; - /* "_proj.pyx":59 + /* "_proj.pyx":62 * if buflenx != bufleny: * raise RuntimeError("Buffer lengths not the same") * ndim = buflenx//_doublesize # <<<<<<<<<<<<<< * lonsdata = londata * latsdata = latdata */ - __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_buflenx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_buflenx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_FloorDivide(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyNumber_FloorDivide(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_ndim = __pyx_t_5; - /* "_proj.pyx":60 + /* "_proj.pyx":63 * raise RuntimeError("Buffer lengths not the same") * ndim = buflenx//_doublesize * lonsdata = londata # <<<<<<<<<<<<<< @@ -1071,7 +1082,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_lonsdata = ((double *)__pyx_v_londata); - /* "_proj.pyx":61 + /* "_proj.pyx":64 * ndim = buflenx//_doublesize * lonsdata = londata * latsdata = latdata # <<<<<<<<<<<<<< @@ -1080,7 +1091,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_latsdata = ((double *)__pyx_v_latdata); - /* "_proj.pyx":62 + /* "_proj.pyx":65 * lonsdata = londata * latsdata = latdata * for i from 0 <= i < ndim: # <<<<<<<<<<<<<< @@ -1090,7 +1101,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_5 = __pyx_v_ndim; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_5; __pyx_v_i++) { - /* "_proj.pyx":64 + /* "_proj.pyx":67 * for i from 0 <= i < ndim: * # if inputs are nan's, return big number. * if lonsdata[i] != lonsdata[i] or latsdata[i] != latsdata[i]: # <<<<<<<<<<<<<< @@ -1106,7 +1117,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } if (__pyx_t_7) { - /* "_proj.pyx":65 + /* "_proj.pyx":68 * # if inputs are nan's, return big number. * if lonsdata[i] != lonsdata[i] or latsdata[i] != latsdata[i]: * lonsdata[i]=1.e30; latsdata[i]=1.e30 # <<<<<<<<<<<<<< @@ -1116,33 +1127,33 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ (__pyx_v_lonsdata[__pyx_v_i]) = 1.e30; (__pyx_v_latsdata[__pyx_v_i]) = 1.e30; - /* "_proj.pyx":66 + /* "_proj.pyx":69 * if lonsdata[i] != lonsdata[i] or latsdata[i] != latsdata[i]: * lonsdata[i]=1.e30; latsdata[i]=1.e30 * if errcheck: # <<<<<<<<<<<<<< * raise RuntimeError('projection undefined') * continue */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_7) { - /* "_proj.pyx":67 + /* "_proj.pyx":70 * lonsdata[i]=1.e30; latsdata[i]=1.e30 * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * continue * if radians: */ - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_6), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_6), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L12; } __pyx_L12:; - /* "_proj.pyx":68 + /* "_proj.pyx":71 * if errcheck: * raise RuntimeError('projection undefined') * continue # <<<<<<<<<<<<<< @@ -1154,17 +1165,17 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } __pyx_L11:; - /* "_proj.pyx":69 + /* "_proj.pyx":72 * raise RuntimeError('projection undefined') * continue * if radians: # <<<<<<<<<<<<<< * projlonlatin.u = lonsdata[i] * projlonlatin.v = latsdata[i] */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_7) { - /* "_proj.pyx":70 + /* "_proj.pyx":73 * continue * if radians: * projlonlatin.u = lonsdata[i] # <<<<<<<<<<<<<< @@ -1173,7 +1184,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_projlonlatin.u = (__pyx_v_lonsdata[__pyx_v_i]); - /* "_proj.pyx":71 + /* "_proj.pyx":74 * if radians: * projlonlatin.u = lonsdata[i] * projlonlatin.v = latsdata[i] # <<<<<<<<<<<<<< @@ -1185,146 +1196,162 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } /*else*/ { - /* "_proj.pyx":73 + /* "_proj.pyx":76 * projlonlatin.v = latsdata[i] * else: * projlonlatin.u = _dg2rad*lonsdata[i] # <<<<<<<<<<<<<< * projlonlatin.v = _dg2rad*latsdata[i] * projxyout = pj_fwd(projlonlatin,self.projpj) */ - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyFloat_FromDouble((__pyx_v_lonsdata[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyFloat_FromDouble((__pyx_v_lonsdata[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_projlonlatin.u = __pyx_t_8; - /* "_proj.pyx":74 + /* "_proj.pyx":77 * else: * projlonlatin.u = _dg2rad*lonsdata[i] * projlonlatin.v = _dg2rad*latsdata[i] # <<<<<<<<<<<<<< * projxyout = pj_fwd(projlonlatin,self.projpj) - * if errcheck and pj_errno != 0: + * if errcheck: */ - __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyFloat_FromDouble((__pyx_v_latsdata[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyFloat_FromDouble((__pyx_v_latsdata[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_projlonlatin.v = __pyx_t_8; } __pyx_L13:; - /* "_proj.pyx":75 + /* "_proj.pyx":78 * projlonlatin.u = _dg2rad*lonsdata[i] * projlonlatin.v = _dg2rad*latsdata[i] * projxyout = pj_fwd(projlonlatin,self.projpj) # <<<<<<<<<<<<<< - * if errcheck and pj_errno != 0: - * raise RuntimeError(pj_strerrno(pj_errno)) + * if errcheck: + * err = pj_ctx_get_errno(pj_get_default_ctx()) */ __pyx_v_projxyout = pj_fwd(__pyx_v_projlonlatin, ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projpj); - /* "_proj.pyx":76 + /* "_proj.pyx":79 * projlonlatin.v = _dg2rad*latsdata[i] * projxyout = pj_fwd(projlonlatin,self.projpj) - * if errcheck and pj_errno != 0: # <<<<<<<<<<<<<< - * raise RuntimeError(pj_strerrno(pj_errno)) - * # since HUGE_VAL can be 'inf', + * if errcheck: # <<<<<<<<<<<<<< + * err = pj_ctx_get_errno(pj_get_default_ctx()) + * if err != 0: */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_7) { - __pyx_t_1 = (pj_errno != 0); - __pyx_t_6 = __pyx_t_1; - } else { - __pyx_t_6 = __pyx_t_7; - } - if (__pyx_t_6) { - /* "_proj.pyx":77 + /* "_proj.pyx":80 * projxyout = pj_fwd(projlonlatin,self.projpj) - * if errcheck and pj_errno != 0: - * raise RuntimeError(pj_strerrno(pj_errno)) # <<<<<<<<<<<<<< + * if errcheck: + * err = pj_ctx_get_errno(pj_get_default_ctx()) # <<<<<<<<<<<<<< + * if err != 0: + * raise RuntimeError(pj_strerrno(err)) + */ + __pyx_v_err = pj_ctx_get_errno(pj_get_default_ctx()); + + /* "_proj.pyx":81 + * if errcheck: + * err = pj_ctx_get_errno(pj_get_default_ctx()) + * if err != 0: # <<<<<<<<<<<<<< + * raise RuntimeError(pj_strerrno(err)) + * # since HUGE_VAL can be 'inf', + */ + __pyx_t_7 = (__pyx_v_err != 0); + if (__pyx_t_7) { + + /* "_proj.pyx":82 + * err = pj_ctx_get_errno(pj_get_default_ctx()) + * if err != 0: + * raise RuntimeError(pj_strerrno(err)) # <<<<<<<<<<<<<< * # since HUGE_VAL can be 'inf', * # change it to a real (but very large) number. */ - __pyx_t_4 = PyBytes_FromString(pj_strerrno(pj_errno)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_3)); - PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_4)); - __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); - __pyx_t_4 = 0; - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_4)); + __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); + __pyx_t_4 = 0; + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L15; + } + __pyx_L15:; goto __pyx_L14; } __pyx_L14:; - /* "_proj.pyx":81 + /* "_proj.pyx":86 * # change it to a real (but very large) number. * # also check for NaNs. * if projxyout.u == HUGE_VAL or\ # <<<<<<<<<<<<<< * projxyout.u != projxyout.u: * if errcheck: */ - __pyx_t_6 = (__pyx_v_projxyout.u == HUGE_VAL); - if (!__pyx_t_6) { + __pyx_t_7 = (__pyx_v_projxyout.u == HUGE_VAL); + if (!__pyx_t_7) { - /* "_proj.pyx":82 + /* "_proj.pyx":87 * # also check for NaNs. * if projxyout.u == HUGE_VAL or\ * projxyout.u != projxyout.u: # <<<<<<<<<<<<<< * if errcheck: * raise RuntimeError('projection undefined') */ - __pyx_t_7 = (__pyx_v_projxyout.u != __pyx_v_projxyout.u); - __pyx_t_1 = __pyx_t_7; + __pyx_t_1 = (__pyx_v_projxyout.u != __pyx_v_projxyout.u); + __pyx_t_6 = __pyx_t_1; } else { - __pyx_t_1 = __pyx_t_6; + __pyx_t_6 = __pyx_t_7; } - if (__pyx_t_1) { + if (__pyx_t_6) { - /* "_proj.pyx":83 + /* "_proj.pyx":88 * if projxyout.u == HUGE_VAL or\ * projxyout.u != projxyout.u: * if errcheck: # <<<<<<<<<<<<<< * raise RuntimeError('projection undefined') * lonsdata[i] = 1.e30 */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_1) { + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__pyx_t_6) { - /* "_proj.pyx":84 + /* "_proj.pyx":89 * projxyout.u != projxyout.u: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * lonsdata[i] = 1.e30 * else: */ - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_7), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_7), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L16; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L17; } - __pyx_L16:; + __pyx_L17:; - /* "_proj.pyx":85 + /* "_proj.pyx":90 * if errcheck: * raise RuntimeError('projection undefined') * lonsdata[i] = 1.e30 # <<<<<<<<<<<<<< @@ -1332,11 +1359,11 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ * lonsdata[i] = projxyout.u */ (__pyx_v_lonsdata[__pyx_v_i]) = 1.e30; - goto __pyx_L15; + goto __pyx_L16; } /*else*/ { - /* "_proj.pyx":87 + /* "_proj.pyx":92 * lonsdata[i] = 1.e30 * else: * lonsdata[i] = projxyout.u # <<<<<<<<<<<<<< @@ -1345,59 +1372,59 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ */ (__pyx_v_lonsdata[__pyx_v_i]) = __pyx_v_projxyout.u; } - __pyx_L15:; + __pyx_L16:; - /* "_proj.pyx":88 + /* "_proj.pyx":93 * else: * lonsdata[i] = projxyout.u * if projxyout.v == HUGE_VAL or\ # <<<<<<<<<<<<<< * projxyout.u != projxyout.u: * if errcheck: */ - __pyx_t_1 = (__pyx_v_projxyout.v == HUGE_VAL); - if (!__pyx_t_1) { + __pyx_t_6 = (__pyx_v_projxyout.v == HUGE_VAL); + if (!__pyx_t_6) { - /* "_proj.pyx":89 + /* "_proj.pyx":94 * lonsdata[i] = projxyout.u * if projxyout.v == HUGE_VAL or\ * projxyout.u != projxyout.u: # <<<<<<<<<<<<<< * if errcheck: * raise RuntimeError('projection undefined') */ - __pyx_t_6 = (__pyx_v_projxyout.u != __pyx_v_projxyout.u); - __pyx_t_7 = __pyx_t_6; + __pyx_t_7 = (__pyx_v_projxyout.u != __pyx_v_projxyout.u); + __pyx_t_1 = __pyx_t_7; } else { - __pyx_t_7 = __pyx_t_1; + __pyx_t_1 = __pyx_t_6; } - if (__pyx_t_7) { + if (__pyx_t_1) { - /* "_proj.pyx":90 + /* "_proj.pyx":95 * if projxyout.v == HUGE_VAL or\ * projxyout.u != projxyout.u: * if errcheck: # <<<<<<<<<<<<<< * raise RuntimeError('projection undefined') * latsdata[i] = 1.e30 */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_7) { + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__pyx_t_1) { - /* "_proj.pyx":91 + /* "_proj.pyx":96 * projxyout.u != projxyout.u: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * latsdata[i] = 1.e30 * else: */ - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_8), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_8), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L18; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L19; } - __pyx_L18:; + __pyx_L19:; - /* "_proj.pyx":92 + /* "_proj.pyx":97 * if errcheck: * raise RuntimeError('projection undefined') * latsdata[i] = 1.e30 # <<<<<<<<<<<<<< @@ -1405,11 +1432,11 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ * latsdata[i] = projxyout.v */ (__pyx_v_latsdata[__pyx_v_i]) = 1.e30; - goto __pyx_L17; + goto __pyx_L18; } /*else*/ { - /* "_proj.pyx":94 + /* "_proj.pyx":99 * latsdata[i] = 1.e30 * else: * latsdata[i] = projxyout.v # <<<<<<<<<<<<<< @@ -1418,7 +1445,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ */ (__pyx_v_latsdata[__pyx_v_i]) = __pyx_v_projxyout.v; } - __pyx_L17:; + __pyx_L18:; __pyx_L9_continue:; } @@ -1436,7 +1463,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ return __pyx_r; } -/* "_proj.pyx":96 +/* "_proj.pyx":101 * latsdata[i] = projxyout.v * * def _inv(self, object x, object y, radians=False, errcheck=False): # <<<<<<<<<<<<<< @@ -1461,6 +1488,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ void *__pyx_v_ydata; double *__pyx_v_xdatab; double *__pyx_v_ydatab; + int __pyx_v_err; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; @@ -1500,7 +1528,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y); if (likely(values[1])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_inv", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_inv", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { @@ -1514,7 +1542,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_inv") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_inv") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { @@ -1533,14 +1561,14 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_inv", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_inv", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("_proj.Proj._inv", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - /* "_proj.pyx":110 + /* "_proj.pyx":115 * cdef double *xdatab, *ydatab * # if buffer api is supported, get pointer to data buffers. * if PyObject_AsWriteBuffer(x, &xdata, &buflenx) <> 0: # <<<<<<<<<<<<<< @@ -1550,7 +1578,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_x, (&__pyx_v_xdata), (&__pyx_v_buflenx)) != 0); if (__pyx_t_1) { - /* "_proj.pyx":111 + /* "_proj.pyx":116 * # if buffer api is supported, get pointer to data buffers. * if PyObject_AsWriteBuffer(x, &xdata, &buflenx) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -1558,12 +1586,12 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ * raise RuntimeError */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; - /* "_proj.pyx":112 + /* "_proj.pyx":117 * if PyObject_AsWriteBuffer(x, &xdata, &buflenx) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(y, &ydata, &bufleny) <> 0: # <<<<<<<<<<<<<< @@ -1573,7 +1601,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_y, (&__pyx_v_ydata), (&__pyx_v_bufleny)) != 0); if (__pyx_t_1) { - /* "_proj.pyx":113 + /* "_proj.pyx":118 * raise RuntimeError * if PyObject_AsWriteBuffer(y, &ydata, &bufleny) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -1581,12 +1609,12 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ * # (for numpy/regular python arrays). */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L7; } __pyx_L7:; - /* "_proj.pyx":116 + /* "_proj.pyx":121 * # process data in buffer * # (for numpy/regular python arrays). * if buflenx != bufleny: # <<<<<<<<<<<<<< @@ -1596,42 +1624,42 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (__pyx_v_buflenx != __pyx_v_bufleny); if (__pyx_t_1) { - /* "_proj.pyx":117 + /* "_proj.pyx":122 * # (for numpy/regular python arrays). * if buflenx != bufleny: * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< * ndim = buflenx//_doublesize * xdatab = xdata */ - __pyx_t_2 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_11), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_11), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L8; } __pyx_L8:; - /* "_proj.pyx":118 + /* "_proj.pyx":123 * if buflenx != bufleny: * raise RuntimeError("Buffer lengths not the same") * ndim = buflenx//_doublesize # <<<<<<<<<<<<<< * xdatab = xdata * ydatab = ydata */ - __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_buflenx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_buflenx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_FloorDivide(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyNumber_FloorDivide(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_ndim = __pyx_t_5; - /* "_proj.pyx":119 + /* "_proj.pyx":124 * raise RuntimeError("Buffer lengths not the same") * ndim = buflenx//_doublesize * xdatab = xdata # <<<<<<<<<<<<<< @@ -1640,7 +1668,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_xdatab = ((double *)__pyx_v_xdata); - /* "_proj.pyx":120 + /* "_proj.pyx":125 * ndim = buflenx//_doublesize * xdatab = xdata * ydatab = ydata # <<<<<<<<<<<<<< @@ -1649,7 +1677,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_ydatab = ((double *)__pyx_v_ydata); - /* "_proj.pyx":121 + /* "_proj.pyx":126 * xdatab = xdata * ydatab = ydata * for i from 0 <= i < ndim: # <<<<<<<<<<<<<< @@ -1659,7 +1687,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_5 = __pyx_v_ndim; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_5; __pyx_v_i++) { - /* "_proj.pyx":123 + /* "_proj.pyx":128 * for i from 0 <= i < ndim: * # if inputs are nan's, return big number. * if xdatab[i] != xdatab[i] or ydatab[i] != ydatab[i]: # <<<<<<<<<<<<<< @@ -1675,7 +1703,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ } if (__pyx_t_7) { - /* "_proj.pyx":124 + /* "_proj.pyx":129 * # if inputs are nan's, return big number. * if xdatab[i] != xdatab[i] or ydatab[i] != ydatab[i]: * xdatab[i]=1.e30; ydatab[i]=1.e30 # <<<<<<<<<<<<<< @@ -1685,33 +1713,33 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ (__pyx_v_xdatab[__pyx_v_i]) = 1.e30; (__pyx_v_ydatab[__pyx_v_i]) = 1.e30; - /* "_proj.pyx":125 + /* "_proj.pyx":130 * if xdatab[i] != xdatab[i] or ydatab[i] != ydatab[i]: * xdatab[i]=1.e30; ydatab[i]=1.e30 * if errcheck: # <<<<<<<<<<<<<< * raise RuntimeError('projection undefined') * continue */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_7) { - /* "_proj.pyx":126 + /* "_proj.pyx":131 * xdatab[i]=1.e30; ydatab[i]=1.e30 * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * continue * projxyin.u = xdatab[i] */ - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_12), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_12), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L12; } __pyx_L12:; - /* "_proj.pyx":127 + /* "_proj.pyx":132 * if errcheck: * raise RuntimeError('projection undefined') * continue # <<<<<<<<<<<<<< @@ -1723,7 +1751,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ } __pyx_L11:; - /* "_proj.pyx":128 + /* "_proj.pyx":133 * raise RuntimeError('projection undefined') * continue * projxyin.u = xdatab[i] # <<<<<<<<<<<<<< @@ -1732,115 +1760,131 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_projxyin.u = (__pyx_v_xdatab[__pyx_v_i]); - /* "_proj.pyx":129 + /* "_proj.pyx":134 * continue * projxyin.u = xdatab[i] * projxyin.v = ydatab[i] # <<<<<<<<<<<<<< * projlonlatout = pj_inv(projxyin,self.projpj) - * if errcheck and pj_errno != 0: + * if errcheck: */ __pyx_v_projxyin.v = (__pyx_v_ydatab[__pyx_v_i]); - /* "_proj.pyx":130 + /* "_proj.pyx":135 * projxyin.u = xdatab[i] * projxyin.v = ydatab[i] * projlonlatout = pj_inv(projxyin,self.projpj) # <<<<<<<<<<<<<< - * if errcheck and pj_errno != 0: - * raise RuntimeError(pj_strerrno(pj_errno)) + * if errcheck: + * err = pj_ctx_get_errno(pj_get_default_ctx()) */ __pyx_v_projlonlatout = pj_inv(__pyx_v_projxyin, ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projpj); - /* "_proj.pyx":131 + /* "_proj.pyx":136 * projxyin.v = ydatab[i] * projlonlatout = pj_inv(projxyin,self.projpj) - * if errcheck and pj_errno != 0: # <<<<<<<<<<<<<< - * raise RuntimeError(pj_strerrno(pj_errno)) - * # since HUGE_VAL can be 'inf', + * if errcheck: # <<<<<<<<<<<<<< + * err = pj_ctx_get_errno(pj_get_default_ctx()) + * if err != 0: */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_7) { - __pyx_t_1 = (pj_errno != 0); - __pyx_t_6 = __pyx_t_1; - } else { - __pyx_t_6 = __pyx_t_7; - } - if (__pyx_t_6) { - /* "_proj.pyx":132 + /* "_proj.pyx":137 * projlonlatout = pj_inv(projxyin,self.projpj) - * if errcheck and pj_errno != 0: - * raise RuntimeError(pj_strerrno(pj_errno)) # <<<<<<<<<<<<<< + * if errcheck: + * err = pj_ctx_get_errno(pj_get_default_ctx()) # <<<<<<<<<<<<<< + * if err != 0: + * raise RuntimeError(pj_strerrno(err)) + */ + __pyx_v_err = pj_ctx_get_errno(pj_get_default_ctx()); + + /* "_proj.pyx":138 + * if errcheck: + * err = pj_ctx_get_errno(pj_get_default_ctx()) + * if err != 0: # <<<<<<<<<<<<<< + * raise RuntimeError(pj_strerrno(err)) + * # since HUGE_VAL can be 'inf', + */ + __pyx_t_7 = (__pyx_v_err != 0); + if (__pyx_t_7) { + + /* "_proj.pyx":139 + * err = pj_ctx_get_errno(pj_get_default_ctx()) + * if err != 0: + * raise RuntimeError(pj_strerrno(err)) # <<<<<<<<<<<<<< * # since HUGE_VAL can be 'inf', * # change it to a real (but very large) number. */ - __pyx_t_4 = PyBytes_FromString(pj_strerrno(pj_errno)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_3)); - PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_4)); - __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); - __pyx_t_4 = 0; - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_4)); + __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); + __pyx_t_4 = 0; + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L14; + } + __pyx_L14:; goto __pyx_L13; } __pyx_L13:; - /* "_proj.pyx":136 + /* "_proj.pyx":143 * # change it to a real (but very large) number. * # also check for NaNs. * if projlonlatout.u == HUGE_VAL or \ # <<<<<<<<<<<<<< * projlonlatout.u != projlonlatout.u: * if errcheck: */ - __pyx_t_6 = (__pyx_v_projlonlatout.u == HUGE_VAL); - if (!__pyx_t_6) { + __pyx_t_7 = (__pyx_v_projlonlatout.u == HUGE_VAL); + if (!__pyx_t_7) { - /* "_proj.pyx":137 + /* "_proj.pyx":144 * # also check for NaNs. * if projlonlatout.u == HUGE_VAL or \ * projlonlatout.u != projlonlatout.u: # <<<<<<<<<<<<<< * if errcheck: * raise RuntimeError('projection undefined') */ - __pyx_t_7 = (__pyx_v_projlonlatout.u != __pyx_v_projlonlatout.u); - __pyx_t_1 = __pyx_t_7; + __pyx_t_1 = (__pyx_v_projlonlatout.u != __pyx_v_projlonlatout.u); + __pyx_t_6 = __pyx_t_1; } else { - __pyx_t_1 = __pyx_t_6; + __pyx_t_6 = __pyx_t_7; } - if (__pyx_t_1) { + if (__pyx_t_6) { - /* "_proj.pyx":138 + /* "_proj.pyx":145 * if projlonlatout.u == HUGE_VAL or \ * projlonlatout.u != projlonlatout.u: * if errcheck: # <<<<<<<<<<<<<< * raise RuntimeError('projection undefined') * xdatab[i] = 1.e30 */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_1) { + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__pyx_t_6) { - /* "_proj.pyx":139 + /* "_proj.pyx":146 * projlonlatout.u != projlonlatout.u: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * xdatab[i] = 1.e30 * elif radians: */ - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_13), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_13), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L15; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L16; } - __pyx_L15:; + __pyx_L16:; - /* "_proj.pyx":140 + /* "_proj.pyx":147 * if errcheck: * raise RuntimeError('projection undefined') * xdatab[i] = 1.e30 # <<<<<<<<<<<<<< @@ -1848,20 +1892,20 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ * xdatab[i] = projlonlatout.u */ (__pyx_v_xdatab[__pyx_v_i]) = 1.e30; - goto __pyx_L14; + goto __pyx_L15; } - /* "_proj.pyx":141 + /* "_proj.pyx":148 * raise RuntimeError('projection undefined') * xdatab[i] = 1.e30 * elif radians: # <<<<<<<<<<<<<< * xdatab[i] = projlonlatout.u * else: */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_1) { + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__pyx_t_6) { - /* "_proj.pyx":142 + /* "_proj.pyx":149 * xdatab[i] = 1.e30 * elif radians: * xdatab[i] = projlonlatout.u # <<<<<<<<<<<<<< @@ -1869,82 +1913,82 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ * xdatab[i] = _rad2dg*projlonlatout.u */ (__pyx_v_xdatab[__pyx_v_i]) = __pyx_v_projlonlatout.u; - goto __pyx_L14; + goto __pyx_L15; } /*else*/ { - /* "_proj.pyx":144 + /* "_proj.pyx":151 * xdatab[i] = projlonlatout.u * else: * xdatab[i] = _rad2dg*projlonlatout.u # <<<<<<<<<<<<<< * if projlonlatout.v == HUGE_VAL or \ * projlonlatout.v != projlonlatout.v: */ - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyFloat_FromDouble(__pyx_v_projlonlatout.u); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyFloat_FromDouble(__pyx_v_projlonlatout.u); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; (__pyx_v_xdatab[__pyx_v_i]) = __pyx_t_8; } - __pyx_L14:; + __pyx_L15:; - /* "_proj.pyx":145 + /* "_proj.pyx":152 * else: * xdatab[i] = _rad2dg*projlonlatout.u * if projlonlatout.v == HUGE_VAL or \ # <<<<<<<<<<<<<< * projlonlatout.v != projlonlatout.v: * if errcheck: */ - __pyx_t_1 = (__pyx_v_projlonlatout.v == HUGE_VAL); - if (!__pyx_t_1) { + __pyx_t_6 = (__pyx_v_projlonlatout.v == HUGE_VAL); + if (!__pyx_t_6) { - /* "_proj.pyx":146 + /* "_proj.pyx":153 * xdatab[i] = _rad2dg*projlonlatout.u * if projlonlatout.v == HUGE_VAL or \ * projlonlatout.v != projlonlatout.v: # <<<<<<<<<<<<<< * if errcheck: * raise RuntimeError('projection undefined') */ - __pyx_t_6 = (__pyx_v_projlonlatout.v != __pyx_v_projlonlatout.v); - __pyx_t_7 = __pyx_t_6; + __pyx_t_7 = (__pyx_v_projlonlatout.v != __pyx_v_projlonlatout.v); + __pyx_t_1 = __pyx_t_7; } else { - __pyx_t_7 = __pyx_t_1; + __pyx_t_1 = __pyx_t_6; } - if (__pyx_t_7) { + if (__pyx_t_1) { - /* "_proj.pyx":147 + /* "_proj.pyx":154 * if projlonlatout.v == HUGE_VAL or \ * projlonlatout.v != projlonlatout.v: * if errcheck: # <<<<<<<<<<<<<< * raise RuntimeError('projection undefined') * ydatab[i] = 1.e30 */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_7) { + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__pyx_t_1) { - /* "_proj.pyx":148 + /* "_proj.pyx":155 * projlonlatout.v != projlonlatout.v: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * ydatab[i] = 1.e30 * elif radians: */ - __pyx_t_2 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_14), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_14), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L17; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L18; } - __pyx_L17:; + __pyx_L18:; - /* "_proj.pyx":149 + /* "_proj.pyx":156 * if errcheck: * raise RuntimeError('projection undefined') * ydatab[i] = 1.e30 # <<<<<<<<<<<<<< @@ -1952,20 +1996,20 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ * ydatab[i] = projlonlatout.v */ (__pyx_v_ydatab[__pyx_v_i]) = 1.e30; - goto __pyx_L16; + goto __pyx_L17; } - /* "_proj.pyx":150 + /* "_proj.pyx":157 * raise RuntimeError('projection undefined') * ydatab[i] = 1.e30 * elif radians: # <<<<<<<<<<<<<< * ydatab[i] = projlonlatout.v * else: */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_7) { + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__pyx_t_1) { - /* "_proj.pyx":151 + /* "_proj.pyx":158 * ydatab[i] = 1.e30 * elif radians: * ydatab[i] = projlonlatout.v # <<<<<<<<<<<<<< @@ -1973,30 +2017,30 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ * ydatab[i] = _rad2dg*projlonlatout.v */ (__pyx_v_ydatab[__pyx_v_i]) = __pyx_v_projlonlatout.v; - goto __pyx_L16; + goto __pyx_L17; } /*else*/ { - /* "_proj.pyx":153 + /* "_proj.pyx":160 * ydatab[i] = projlonlatout.v * else: * ydatab[i] = _rad2dg*projlonlatout.v # <<<<<<<<<<<<<< * * # def _fwdn(self, c_numpy.ndarray lonlat, radians=False, errcheck=False): */ - __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyFloat_FromDouble(__pyx_v_projlonlatout.v); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyFloat_FromDouble(__pyx_v_projlonlatout.v); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; (__pyx_v_ydatab[__pyx_v_i]) = __pyx_t_8; } - __pyx_L16:; + __pyx_L17:; __pyx_L9_continue:; } @@ -2014,7 +2058,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ return __pyx_r; } -/* "_proj.pyx":227 +/* "_proj.pyx":239 * # llptr[i].v = _rad2dg*projlonlatout.v * * def is_latlong(self): # <<<<<<<<<<<<<< @@ -2033,7 +2077,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO int __pyx_clineno = 0; __Pyx_RefNannySetupContext("is_latlong"); - /* "_proj.pyx":230 + /* "_proj.pyx":242 * # returns True if projection in geographic (lon/lat) coordinates * cdef int i * i = pj_is_latlong(self.projpj) # <<<<<<<<<<<<<< @@ -2042,7 +2086,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO */ __pyx_v_i = pj_is_latlong(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projpj); - /* "_proj.pyx":231 + /* "_proj.pyx":243 * cdef int i * i = pj_is_latlong(self.projpj) * if i: # <<<<<<<<<<<<<< @@ -2051,7 +2095,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO */ if (__pyx_v_i) { - /* "_proj.pyx":232 + /* "_proj.pyx":244 * i = pj_is_latlong(self.projpj) * if i: * return True # <<<<<<<<<<<<<< @@ -2059,7 +2103,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO * return False */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; @@ -2068,7 +2112,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO } /*else*/ { - /* "_proj.pyx":234 + /* "_proj.pyx":246 * return True * else: * return False # <<<<<<<<<<<<<< @@ -2076,7 +2120,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO * def is_geocent(self): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; @@ -2096,7 +2140,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO return __pyx_r; } -/* "_proj.pyx":236 +/* "_proj.pyx":248 * return False * * def is_geocent(self): # <<<<<<<<<<<<<< @@ -2115,7 +2159,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHO int __pyx_clineno = 0; __Pyx_RefNannySetupContext("is_geocent"); - /* "_proj.pyx":239 + /* "_proj.pyx":251 * # returns True if projection in geocentric (x/y) coordinates * cdef int i * i = pj_is_geocent(self.projpj) # <<<<<<<<<<<<<< @@ -2124,7 +2168,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHO */ __pyx_v_i = pj_is_geocent(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projpj); - /* "_proj.pyx":240 + /* "_proj.pyx":252 * cdef int i * i = pj_is_geocent(self.projpj) * if i: # <<<<<<<<<<<<<< @@ -2133,7 +2177,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHO */ if (__pyx_v_i) { - /* "_proj.pyx":241 + /* "_proj.pyx":253 * i = pj_is_geocent(self.projpj) * if i: * return True # <<<<<<<<<<<<<< @@ -2141,7 +2185,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHO * return False */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; @@ -2150,7 +2194,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHO } /*else*/ { - /* "_proj.pyx":243 + /* "_proj.pyx":255 * return True * else: * return False # <<<<<<<<<<<<<< @@ -2158,7 +2202,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHO * def _transform(Proj p1, Proj p2, inx, iny, inz, radians): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; @@ -2292,7 +2336,7 @@ static int __pyx_pf_5_proj_4Proj_3srs_2__del__(PyObject *__pyx_v_self) { return __pyx_r; } -/* "_proj.pyx":245 +/* "_proj.pyx":257 * return False * * def _transform(Proj p1, Proj p2, inx, iny, inz, radians): # <<<<<<<<<<<<<< @@ -2320,7 +2364,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p Py_ssize_t __pyx_v_buflenz; Py_ssize_t __pyx_v_npts; Py_ssize_t __pyx_v_i; - int __pyx_v_ierr; + int __pyx_v_err; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; @@ -2361,35 +2405,35 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p2); if (likely(values[1])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__inx); if (likely(values[2])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__iny); if (likely(values[3])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 4: values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__inz); if (likely(values[4])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 5: values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__radians); if (likely(values[5])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_transform") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_transform") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 6) { goto __pyx_L5_argtuple_error; @@ -2410,18 +2454,18 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("_proj._transform", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_p1), __pyx_ptype_5_proj_Proj, 1, "p1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_p2), __pyx_ptype_5_proj_Proj, 1, "p2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_p1), __pyx_ptype_5_proj_Proj, 1, "p1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_p2), __pyx_ptype_5_proj_Proj, 1, "p2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /* "_proj.pyx":250 - * cdef double *xx, *yy, *zz + /* "_proj.pyx":263 * cdef Py_ssize_t buflenx, bufleny, buflenz, npts, i + * cdef int err * if PyObject_AsWriteBuffer(inx, &xdata, &buflenx) <> 0: # <<<<<<<<<<<<<< * raise RuntimeError * if PyObject_AsWriteBuffer(iny, &ydata, &bufleny) <> 0: @@ -2429,20 +2473,20 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_inx, (&__pyx_v_xdata), (&__pyx_v_buflenx)) != 0); if (__pyx_t_1) { - /* "_proj.pyx":251 - * cdef Py_ssize_t buflenx, bufleny, buflenz, npts, i + /* "_proj.pyx":264 + * cdef int err * if PyObject_AsWriteBuffer(inx, &xdata, &buflenx) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< * if PyObject_AsWriteBuffer(iny, &ydata, &bufleny) <> 0: * raise RuntimeError */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; - /* "_proj.pyx":252 + /* "_proj.pyx":265 * if PyObject_AsWriteBuffer(inx, &xdata, &buflenx) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(iny, &ydata, &bufleny) <> 0: # <<<<<<<<<<<<<< @@ -2452,7 +2496,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_iny, (&__pyx_v_ydata), (&__pyx_v_bufleny)) != 0); if (__pyx_t_1) { - /* "_proj.pyx":253 + /* "_proj.pyx":266 * raise RuntimeError * if PyObject_AsWriteBuffer(iny, &ydata, &bufleny) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -2460,12 +2504,12 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p * if PyObject_AsWriteBuffer(inz, &zdata, &buflenz) <> 0: */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L7; } __pyx_L7:; - /* "_proj.pyx":254 + /* "_proj.pyx":267 * if PyObject_AsWriteBuffer(iny, &ydata, &bufleny) <> 0: * raise RuntimeError * if inz is not None: # <<<<<<<<<<<<<< @@ -2475,7 +2519,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_1 = (__pyx_v_inz != Py_None); if (__pyx_t_1) { - /* "_proj.pyx":255 + /* "_proj.pyx":268 * raise RuntimeError * if inz is not None: * if PyObject_AsWriteBuffer(inz, &zdata, &buflenz) <> 0: # <<<<<<<<<<<<<< @@ -2485,7 +2529,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_inz, (&__pyx_v_zdata), (&__pyx_v_buflenz)) != 0); if (__pyx_t_1) { - /* "_proj.pyx":256 + /* "_proj.pyx":269 * if inz is not None: * if PyObject_AsWriteBuffer(inz, &zdata, &buflenz) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -2493,7 +2537,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p * buflenz = bufleny */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L9; } __pyx_L9:; @@ -2501,7 +2545,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } /*else*/ { - /* "_proj.pyx":258 + /* "_proj.pyx":271 * raise RuntimeError * else: * buflenz = bufleny # <<<<<<<<<<<<<< @@ -2512,7 +2556,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } __pyx_L8:; - /* "_proj.pyx":259 + /* "_proj.pyx":272 * else: * buflenz = bufleny * if not (buflenx == bufleny == buflenz): # <<<<<<<<<<<<<< @@ -2526,23 +2570,23 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { - /* "_proj.pyx":260 + /* "_proj.pyx":273 * buflenz = bufleny * if not (buflenx == bufleny == buflenz): * raise RuntimeError('x,y and z must be same size') # <<<<<<<<<<<<<< * xx = xdata * yy = ydata */ - __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_16), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_16), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L10; } __pyx_L10:; - /* "_proj.pyx":261 + /* "_proj.pyx":274 * if not (buflenx == bufleny == buflenz): * raise RuntimeError('x,y and z must be same size') * xx = xdata # <<<<<<<<<<<<<< @@ -2551,7 +2595,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p */ __pyx_v_xx = ((double *)__pyx_v_xdata); - /* "_proj.pyx":262 + /* "_proj.pyx":275 * raise RuntimeError('x,y and z must be same size') * xx = xdata * yy = ydata # <<<<<<<<<<<<<< @@ -2560,7 +2604,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p */ __pyx_v_yy = ((double *)__pyx_v_ydata); - /* "_proj.pyx":263 + /* "_proj.pyx":276 * xx = xdata * yy = ydata * if inz is not None: # <<<<<<<<<<<<<< @@ -2570,7 +2614,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_2 = (__pyx_v_inz != Py_None); if (__pyx_t_2) { - /* "_proj.pyx":264 + /* "_proj.pyx":277 * yy = ydata * if inz is not None: * zz = zdata # <<<<<<<<<<<<<< @@ -2582,7 +2626,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } __pyx_L11:; - /* "_proj.pyx":265 + /* "_proj.pyx":278 * if inz is not None: * zz = zdata * npts = buflenx/8 # <<<<<<<<<<<<<< @@ -2591,22 +2635,22 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p */ __pyx_v_npts = __Pyx_div_Py_ssize_t(__pyx_v_buflenx, 8); - /* "_proj.pyx":266 + /* "_proj.pyx":279 * zz = zdata * npts = buflenx/8 * if not radians and p1.is_latlong(): # <<<<<<<<<<<<<< * for i from 0 <= i < npts: * xx[i] = xx[i]*_dg2rad */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = (!__pyx_t_2); if (__pyx_t_1) { - __pyx_t_3 = PyObject_GetAttr(((PyObject *)__pyx_v_p1), __pyx_n_s__is_latlong); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyObject_GetAttr(((PyObject *)__pyx_v_p1), __pyx_n_s__is_latlong); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = __pyx_t_2; } else { @@ -2614,7 +2658,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } if (__pyx_t_5) { - /* "_proj.pyx":267 + /* "_proj.pyx":280 * npts = buflenx/8 * if not radians and p1.is_latlong(): * for i from 0 <= i < npts: # <<<<<<<<<<<<<< @@ -2624,41 +2668,41 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_6 = __pyx_v_npts; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) { - /* "_proj.pyx":268 + /* "_proj.pyx":281 * if not radians and p1.is_latlong(): * for i from 0 <= i < npts: * xx[i] = xx[i]*_dg2rad # <<<<<<<<<<<<<< * yy[i] = yy[i]*_dg2rad * if inz is not None: */ - __pyx_t_4 = PyFloat_FromDouble((__pyx_v_xx[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyFloat_FromDouble((__pyx_v_xx[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_7 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; (__pyx_v_xx[__pyx_v_i]) = __pyx_t_8; - /* "_proj.pyx":269 + /* "_proj.pyx":282 * for i from 0 <= i < npts: * xx[i] = xx[i]*_dg2rad * yy[i] = yy[i]*_dg2rad # <<<<<<<<<<<<<< * if inz is not None: - * ierr = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, zz) + * err = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, zz) */ - __pyx_t_7 = PyFloat_FromDouble((__pyx_v_yy[__pyx_v_i])); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = PyFloat_FromDouble((__pyx_v_yy[__pyx_v_i])); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_Multiply(__pyx_t_7, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyNumber_Multiply(__pyx_t_7, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; (__pyx_v_yy[__pyx_v_i]) = __pyx_t_8; } @@ -2666,89 +2710,89 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } __pyx_L12:; - /* "_proj.pyx":270 + /* "_proj.pyx":283 * xx[i] = xx[i]*_dg2rad * yy[i] = yy[i]*_dg2rad * if inz is not None: # <<<<<<<<<<<<<< - * ierr = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, zz) + * err = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, zz) * else: */ __pyx_t_5 = (__pyx_v_inz != Py_None); if (__pyx_t_5) { - /* "_proj.pyx":271 + /* "_proj.pyx":284 * yy[i] = yy[i]*_dg2rad * if inz is not None: - * ierr = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, zz) # <<<<<<<<<<<<<< + * err = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, zz) # <<<<<<<<<<<<<< * else: - * ierr = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, NULL) + * err = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, NULL) */ - __pyx_v_ierr = pj_transform(__pyx_v_p1->projpj, __pyx_v_p2->projpj, __pyx_v_npts, 0, __pyx_v_xx, __pyx_v_yy, __pyx_v_zz); + __pyx_v_err = pj_transform(__pyx_v_p1->projpj, __pyx_v_p2->projpj, __pyx_v_npts, 0, __pyx_v_xx, __pyx_v_yy, __pyx_v_zz); goto __pyx_L15; } /*else*/ { - /* "_proj.pyx":273 - * ierr = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, zz) + /* "_proj.pyx":286 + * err = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, zz) * else: - * ierr = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, NULL) # <<<<<<<<<<<<<< - * if ierr != 0: - * raise RuntimeError(pj_strerrno(ierr)) + * err = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, NULL) # <<<<<<<<<<<<<< + * if err != 0: + * raise RuntimeError(pj_strerrno(err)) */ - __pyx_v_ierr = pj_transform(__pyx_v_p1->projpj, __pyx_v_p2->projpj, __pyx_v_npts, 0, __pyx_v_xx, __pyx_v_yy, NULL); + __pyx_v_err = pj_transform(__pyx_v_p1->projpj, __pyx_v_p2->projpj, __pyx_v_npts, 0, __pyx_v_xx, __pyx_v_yy, NULL); } __pyx_L15:; - /* "_proj.pyx":274 + /* "_proj.pyx":287 * else: - * ierr = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, NULL) - * if ierr != 0: # <<<<<<<<<<<<<< - * raise RuntimeError(pj_strerrno(ierr)) + * err = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, NULL) + * if err != 0: # <<<<<<<<<<<<<< + * raise RuntimeError(pj_strerrno(err)) * if not radians and p2.is_latlong(): */ - __pyx_t_5 = (__pyx_v_ierr != 0); + __pyx_t_5 = (__pyx_v_err != 0); if (__pyx_t_5) { - /* "_proj.pyx":275 - * ierr = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, NULL) - * if ierr != 0: - * raise RuntimeError(pj_strerrno(ierr)) # <<<<<<<<<<<<<< + /* "_proj.pyx":288 + * err = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, NULL) + * if err != 0: + * raise RuntimeError(pj_strerrno(err)) # <<<<<<<<<<<<<< * if not radians and p2.is_latlong(): * for i from 0 <= i < npts: */ - __pyx_t_4 = PyBytes_FromString(pj_strerrno(__pyx_v_ierr)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_4)); __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L16; } __pyx_L16:; - /* "_proj.pyx":276 - * if ierr != 0: - * raise RuntimeError(pj_strerrno(ierr)) + /* "_proj.pyx":289 + * if err != 0: + * raise RuntimeError(pj_strerrno(err)) * if not radians and p2.is_latlong(): # <<<<<<<<<<<<<< * for i from 0 <= i < npts: * xx[i] = xx[i]*_rad2dg */ - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = (!__pyx_t_5); if (__pyx_t_1) { - __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_p2), __pyx_n_s__is_latlong); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_p2), __pyx_n_s__is_latlong); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_2 = __pyx_t_5; } else { @@ -2756,8 +2800,8 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } if (__pyx_t_2) { - /* "_proj.pyx":277 - * raise RuntimeError(pj_strerrno(ierr)) + /* "_proj.pyx":290 + * raise RuntimeError(pj_strerrno(err)) * if not radians and p2.is_latlong(): * for i from 0 <= i < npts: # <<<<<<<<<<<<<< * xx[i] = xx[i]*_rad2dg @@ -2766,41 +2810,41 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_6 = __pyx_v_npts; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) { - /* "_proj.pyx":278 + /* "_proj.pyx":291 * if not radians and p2.is_latlong(): * for i from 0 <= i < npts: * xx[i] = xx[i]*_rad2dg # <<<<<<<<<<<<<< * yy[i] = yy[i]*_rad2dg * */ - __pyx_t_3 = PyFloat_FromDouble((__pyx_v_xx[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyFloat_FromDouble((__pyx_v_xx[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; (__pyx_v_xx[__pyx_v_i]) = __pyx_t_8; - /* "_proj.pyx":279 + /* "_proj.pyx":292 * for i from 0 <= i < npts: * xx[i] = xx[i]*_rad2dg * yy[i] = yy[i]*_rad2dg # <<<<<<<<<<<<<< * * cdef _strencode(pystr,encoding='ascii'): */ - __pyx_t_7 = PyFloat_FromDouble((__pyx_v_yy[__pyx_v_i])); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = PyFloat_FromDouble((__pyx_v_yy[__pyx_v_i])); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyNumber_Multiply(__pyx_t_7, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyNumber_Multiply(__pyx_t_7, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; (__pyx_v_yy[__pyx_v_i]) = __pyx_t_8; } @@ -2822,7 +2866,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p return __pyx_r; } -/* "_proj.pyx":281 +/* "_proj.pyx":294 * yy[i] = yy[i]*_rad2dg * * cdef _strencode(pystr,encoding='ascii'): # <<<<<<<<<<<<<< @@ -2851,7 +2895,7 @@ static PyObject *__pyx_f_5_proj__strencode(PyObject *__pyx_v_pystr, struct __pyx } } - /* "_proj.pyx":283 + /* "_proj.pyx":296 * cdef _strencode(pystr,encoding='ascii'): * # encode a string into bytes. If already bytes, do nothing. * try: # <<<<<<<<<<<<<< @@ -2865,7 +2909,7 @@ static PyObject *__pyx_f_5_proj__strencode(PyObject *__pyx_v_pystr, struct __pyx __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "_proj.pyx":284 + /* "_proj.pyx":297 * # encode a string into bytes. If already bytes, do nothing. * try: * return pystr.encode(encoding) # <<<<<<<<<<<<<< @@ -2873,14 +2917,14 @@ static PyObject *__pyx_f_5_proj__strencode(PyObject *__pyx_v_pystr, struct __pyx * return pystr # already bytes? */ __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = PyObject_GetAttr(__pyx_v_pystr, __pyx_n_s__encode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_t_4 = PyObject_GetAttr(__pyx_v_pystr, __pyx_n_s__encode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); __Pyx_INCREF(__pyx_v_encoding); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_encoding); __Pyx_GIVEREF(__pyx_v_encoding); - __pyx_t_6 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_t_6 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; @@ -2903,7 +2947,7 @@ static PyObject *__pyx_f_5_proj__strencode(PyObject *__pyx_v_pystr, struct __pyx __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "_proj.pyx":285 + /* "_proj.pyx":298 * try: * return pystr.encode(encoding) * except AttributeError: # <<<<<<<<<<<<<< @@ -2912,12 +2956,12 @@ static PyObject *__pyx_f_5_proj__strencode(PyObject *__pyx_v_pystr, struct __pyx __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError); if (__pyx_t_7) { __Pyx_AddTraceback("_proj._strencode", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} + if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_GOTREF(__pyx_t_5); __Pyx_GOTREF(__pyx_t_4); - /* "_proj.pyx":286 + /* "_proj.pyx":299 * return pystr.encode(encoding) * except AttributeError: * return pystr # already bytes? # <<<<<<<<<<<<<< @@ -3271,8 +3315,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {0, 0, 0, 0, 0, 0, 0} }; static int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_AttributeError = __Pyx_GetName(__pyx_b, __pyx_n_s__AttributeError); if (!__pyx_builtin_AttributeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_builtin_AttributeError = __Pyx_GetName(__pyx_b, __pyx_n_s__AttributeError); if (!__pyx_builtin_AttributeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} return 0; __pyx_L1_error:; return -1; @@ -3282,126 +3326,126 @@ static int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants"); - /* "_proj.pyx":58 + /* "_proj.pyx":61 * # process data in buffer * if buflenx != bufleny: * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< * ndim = buflenx//_doublesize * lonsdata = londata */ - __pyx_k_tuple_4 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_4 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_4)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_3)); PyTuple_SET_ITEM(__pyx_k_tuple_4, 0, ((PyObject *)__pyx_kp_s_3)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_3)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_4)); - /* "_proj.pyx":67 + /* "_proj.pyx":70 * lonsdata[i]=1.e30; latsdata[i]=1.e30 * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * continue * if radians: */ - __pyx_k_tuple_6 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_6 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_6)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_5)); PyTuple_SET_ITEM(__pyx_k_tuple_6, 0, ((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_6)); - /* "_proj.pyx":84 + /* "_proj.pyx":89 * projxyout.u != projxyout.u: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * lonsdata[i] = 1.e30 * else: */ - __pyx_k_tuple_7 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_7 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_7)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_5)); PyTuple_SET_ITEM(__pyx_k_tuple_7, 0, ((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_7)); - /* "_proj.pyx":91 + /* "_proj.pyx":96 * projxyout.u != projxyout.u: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * latsdata[i] = 1.e30 * else: */ - __pyx_k_tuple_8 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_8 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_8)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_5)); PyTuple_SET_ITEM(__pyx_k_tuple_8, 0, ((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_8)); - /* "_proj.pyx":117 + /* "_proj.pyx":122 * # (for numpy/regular python arrays). * if buflenx != bufleny: * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< * ndim = buflenx//_doublesize * xdatab = xdata */ - __pyx_k_tuple_11 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_11 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_11)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_3)); PyTuple_SET_ITEM(__pyx_k_tuple_11, 0, ((PyObject *)__pyx_kp_s_3)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_3)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_11)); - /* "_proj.pyx":126 + /* "_proj.pyx":131 * xdatab[i]=1.e30; ydatab[i]=1.e30 * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * continue * projxyin.u = xdatab[i] */ - __pyx_k_tuple_12 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_12 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_12)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_5)); PyTuple_SET_ITEM(__pyx_k_tuple_12, 0, ((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_12)); - /* "_proj.pyx":139 + /* "_proj.pyx":146 * projlonlatout.u != projlonlatout.u: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * xdatab[i] = 1.e30 * elif radians: */ - __pyx_k_tuple_13 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_13 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_13)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_5)); PyTuple_SET_ITEM(__pyx_k_tuple_13, 0, ((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_13)); - /* "_proj.pyx":148 + /* "_proj.pyx":155 * projlonlatout.v != projlonlatout.v: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * ydatab[i] = 1.e30 * elif radians: */ - __pyx_k_tuple_14 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_14 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_14)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_5)); PyTuple_SET_ITEM(__pyx_k_tuple_14, 0, ((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_14)); - /* "_proj.pyx":260 + /* "_proj.pyx":273 * buflenz = bufleny * if not (buflenx == bufleny == buflenz): * raise RuntimeError('x,y and z must be same size') # <<<<<<<<<<<<<< * xx = xdata * yy = ydata */ - __pyx_k_tuple_16 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_16 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_16)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_15)); PyTuple_SET_ITEM(__pyx_k_tuple_16, 0, ((PyObject *)__pyx_kp_s_15)); @@ -3490,7 +3534,7 @@ PyMODINIT_FUNC PyInit__proj(void) /*--- Function import code ---*/ /*--- Execution code ---*/ - /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":1 + /* "/Volumes/User/jwhitaker/python/basemap.jswhit.git/src/_pyproj.pxi":1 * import math # <<<<<<<<<<<<<< * * _dg2rad = math.radians(1.) @@ -3500,7 +3544,7 @@ PyMODINIT_FUNC PyInit__proj(void) if (PyObject_SetAttr(__pyx_m, __pyx_n_s__math, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":3 + /* "/Volumes/User/jwhitaker/python/basemap.jswhit.git/src/_pyproj.pxi":3 * import math * * _dg2rad = math.radians(1.) # <<<<<<<<<<<<<< @@ -3526,7 +3570,7 @@ PyMODINIT_FUNC PyInit__proj(void) if (PyObject_SetAttr(__pyx_m, __pyx_n_s___dg2rad, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":4 + /* "/Volumes/User/jwhitaker/python/basemap.jswhit.git/src/_pyproj.pxi":4 * * _dg2rad = math.radians(1.) * _rad2dg = math.degrees(1.) # <<<<<<<<<<<<<< @@ -3552,7 +3596,7 @@ PyMODINIT_FUNC PyInit__proj(void) if (PyObject_SetAttr(__pyx_m, __pyx_n_s___rad2dg, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":5 + /* "/Volumes/User/jwhitaker/python/basemap.jswhit.git/src/_pyproj.pxi":5 * _dg2rad = math.radians(1.) * _rad2dg = math.degrees(1.) * _doublesize = sizeof(double) # <<<<<<<<<<<<<< @@ -3564,7 +3608,7 @@ PyMODINIT_FUNC PyInit__proj(void) if (PyObject_SetAttr(__pyx_m, __pyx_n_s___doublesize, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":6 + /* "/Volumes/User/jwhitaker/python/basemap.jswhit.git/src/_pyproj.pxi":6 * _rad2dg = math.degrees(1.) * _doublesize = sizeof(double) * __version__ = "1.9.0" # <<<<<<<<<<<<<< @@ -3585,52 +3629,52 @@ PyMODINIT_FUNC PyInit__proj(void) if (PyObject_SetAttr(__pyx_m, __pyx_n_s__set_datapath, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_proj.pyx":38 + /* "_proj.pyx":40 * return (self.__class__,(self.srs,)) * * def _fwd(self, object lons, object lats, radians=False, errcheck=False): # <<<<<<<<<<<<<< * """ * forward transformation - lons,lats to x,y (done in place). */ - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_1 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_2 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_proj.pyx":96 + /* "_proj.pyx":101 * latsdata[i] = projxyout.v * * def _inv(self, object x, object y, radians=False, errcheck=False): # <<<<<<<<<<<<<< * """ * inverse transformation - x,y to lons,lats (done in place). */ - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_9 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_10 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_proj.pyx":245 + /* "_proj.pyx":257 * return False * * def _transform(Proj p1, Proj p2, inx, iny, inz, radians): # <<<<<<<<<<<<<< * # private function to call pj_transform * cdef void *xdata, *ydata, *zdata */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5_proj_1_transform, NULL, __pyx_n_s___proj); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5_proj_1_transform, NULL, __pyx_n_s___proj); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetAttr(__pyx_m, __pyx_n_s___transform, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_s___transform, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "_proj.pyx":1 diff --git a/src/_proj.pyx b/src/_proj.pyx index c21270b3f..26d18d234 100644 --- a/src/_proj.pyx +++ b/src/_proj.pyx @@ -18,13 +18,15 @@ cdef class Proj: def __cinit__(self, projstring): # setup proj initialization string. + cdef int err self.srs = projstring bytestr = _strencode(projstring) self.pjinitstring = bytestr # initialize projection self.projpj = pj_init_plus(self.pjinitstring) - if pj_errno != 0: - raise RuntimeError(pj_strerrno(pj_errno)) + err = pj_ctx_get_errno(pj_get_default_ctx()) + if err != 0: + raise RuntimeError(pj_strerrno(err)) self.proj_version = PJ_VERSION/100. def __dealloc__(self): @@ -48,6 +50,7 @@ cdef class Proj: cdef double u, v cdef double *lonsdata, *latsdata cdef void *londata, *latdata + cdef int err # if buffer api is supported, get pointer to data buffers. if PyObject_AsWriteBuffer(lons, &londata, &buflenx) <> 0: raise RuntimeError @@ -73,8 +76,10 @@ cdef class Proj: projlonlatin.u = _dg2rad*lonsdata[i] projlonlatin.v = _dg2rad*latsdata[i] projxyout = pj_fwd(projlonlatin,self.projpj) - if errcheck and pj_errno != 0: - raise RuntimeError(pj_strerrno(pj_errno)) + if errcheck: + err = pj_ctx_get_errno(pj_get_default_ctx()) + if err != 0: + raise RuntimeError(pj_strerrno(err)) # since HUGE_VAL can be 'inf', # change it to a real (but very large) number. # also check for NaNs. @@ -128,8 +133,10 @@ cdef class Proj: projxyin.u = xdatab[i] projxyin.v = ydatab[i] projlonlatout = pj_inv(projxyin,self.projpj) - if errcheck and pj_errno != 0: - raise RuntimeError(pj_strerrno(pj_errno)) + if errcheck: + err = pj_ctx_get_errno(pj_get_default_ctx()) + if err != 0: + raise RuntimeError(pj_strerrno(err)) # since HUGE_VAL can be 'inf', # change it to a real (but very large) number. # also check for NaNs. @@ -165,6 +172,7 @@ cdef class Proj: # """ # cdef projUV projxyout, projlonlatin # cdef projUV *llptr +# cdef int err # cdef Py_ssize_t npts, i # npts = c_numpy.PyArray_SIZE(lonlat)//2 # llptr = lonlat.data @@ -176,8 +184,10 @@ cdef class Proj: # projlonlatin.v = _dg2rad*llptr[i].v # projxyout = pj_fwd(projlonlatin,self.projpj) -# if errcheck and pj_errno != 0: -# raise RuntimeError(pj_strerrno(pj_errno)) +# if errcheck: +# err = pj_ctx_get_errno(pj_get_default_ctx()) +# if err != 0: +# raise RuntimeError(pj_strerrno(err)) # # since HUGE_VAL can be 'inf', # # change it to a real (but very large) number. # if projxyout.u == HUGE_VAL: @@ -207,8 +217,10 @@ cdef class Proj: # for i from 0 <= i < npts: # projxyin = llptr[i] # projlonlatout = pj_inv(projxyin, self.projpj) -# if errcheck and pj_errno != 0: -# raise RuntimeError(pj_strerrno(pj_errno)) +# if errcheck: +# err = pj_ctx_get_errno(pj_get_default_ctx()) +# if err != 0: +# raise RuntimeError(pj_strerrno(err)) # # since HUGE_VAL can be 'inf', # # change it to a real (but very large) number. # if projlonlatout.u == HUGE_VAL: @@ -247,6 +259,7 @@ def _transform(Proj p1, Proj p2, inx, iny, inz, radians): cdef void *xdata, *ydata, *zdata cdef double *xx, *yy, *zz cdef Py_ssize_t buflenx, bufleny, buflenz, npts, i + cdef int err if PyObject_AsWriteBuffer(inx, &xdata, &buflenx) <> 0: raise RuntimeError if PyObject_AsWriteBuffer(iny, &ydata, &bufleny) <> 0: @@ -268,11 +281,11 @@ def _transform(Proj p1, Proj p2, inx, iny, inz, radians): xx[i] = xx[i]*_dg2rad yy[i] = yy[i]*_dg2rad if inz is not None: - ierr = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, zz) + err = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, zz) else: - ierr = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, NULL) - if ierr != 0: - raise RuntimeError(pj_strerrno(ierr)) + err = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, NULL) + if err != 0: + raise RuntimeError(pj_strerrno(err)) if not radians and p2.is_latlong(): for i from 0 <= i < npts: xx[i] = xx[i]*_rad2dg diff --git a/src/_pyproj.pxi b/src/_pyproj.pxi index 909700f9b..667eaace1 100644 --- a/src/_pyproj.pxi +++ b/src/_pyproj.pxi @@ -37,7 +37,8 @@ cdef extern from "geodesic.h": int geod_inv(GEODESIC_T *g) cdef extern from "proj_api.h": - ctypedef double *projPJ + ctypedef void *projPJ + ctypedef void *projCtx projPJ pj_init_plus(char *) projUV pj_fwd(projUV, projPJ) projUV pj_inv(projUV, projPJ) @@ -46,9 +47,10 @@ cdef extern from "proj_api.h": int pj_is_latlong(projPJ) int pj_is_geocent(projPJ) char *pj_strerrno(int) + int pj_ctx_get_errno( projCtx ) + projCtx pj_get_default_ctx() void pj_free(projPJ) void pj_set_searchpath ( int count, char **path ) - cdef extern int pj_errno cdef enum: PJ_VERSION From dd26d39e7fec5117f3be3c9342141cb53726a136 Mon Sep 17 00:00:00 2001 From: Jeff Whitaker Date: Tue, 20 Dec 2011 10:04:58 -0700 Subject: [PATCH 06/14] add geodesic source --- geodesic/COPYING | 20 ++ geodesic/proj_adjlon.c | 70 +++++++ geodesic/proj_gforward.c | 57 ++++++ geodesic/proj_ginverse.c | 58 ++++++ geodesic/proj_in_fwd.c | 96 ++++++++++ geodesic/proj_in_inv.c | 394 +++++++++++++++++++++++++++++++++++++++ geodesic/proj_pt_fwd.c | 139 ++++++++++++++ geodesic/proj_pt_inv.c | 99 ++++++++++ geodesic/proj_sp_fwd.c | 72 +++++++ geodesic/proj_sp_inv.c | 96 ++++++++++ geodesic/project.h | 368 ++++++++++++++++++++++++++++++++++++ 11 files changed, 1469 insertions(+) create mode 100644 geodesic/COPYING create mode 100644 geodesic/proj_adjlon.c create mode 100644 geodesic/proj_gforward.c create mode 100644 geodesic/proj_ginverse.c create mode 100644 geodesic/proj_in_fwd.c create mode 100644 geodesic/proj_in_inv.c create mode 100644 geodesic/proj_pt_fwd.c create mode 100644 geodesic/proj_pt_inv.c create mode 100644 geodesic/proj_sp_fwd.c create mode 100644 geodesic/proj_sp_inv.c create mode 100644 geodesic/project.h diff --git a/geodesic/COPYING b/geodesic/COPYING new file mode 100644 index 000000000..83055c184 --- /dev/null +++ b/geodesic/COPYING @@ -0,0 +1,20 @@ +The following is best known as the MIT copying permission. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/geodesic/proj_adjlon.c b/geodesic/proj_adjlon.c new file mode 100644 index 000000000..8001ab819 --- /dev/null +++ b/geodesic/proj_adjlon.c @@ -0,0 +1,70 @@ +/* +** libgeodesy -- library of geodesy functions +** +** Copyright (c) 2003, 2006, 2009 Gerald I. Evenden +*/ +static const char + PROG_ID[] = "$Id: proj_adjlon.c,v 5.4 2009/05/05 23:40:30 gie Exp gie $"; +/* +** Permission is hereby granted, free of charge, to any person obtaining +** a copy of this software and associated documentation files (the +** "Software"), to deal in the Software without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Software, and to +** permit persons to whom the Software is furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +/** + * @file proj_adjlon.c + * @brief Reduce argument to range +/- PI + * @author Gerald I. Evenden +*/ +#include +#define DBL_EPSILON 1e-14 +/** + * @brief reduce longitude to a range of +- 180 (+- pi) + * @param lon longitude + * @return reduced longitude value + * + * This seems like an expensive means of doing this problem where an + * iterative add/subtraction might seem the more reasonable approach: + * However, cases where a carelessly entered and quite large number + * can bring a program to its knees with the iterative method. + * May be a bit slower but it is safer. + */ +double proj_adjlon(double lon) { + double x; + + if ((fabs(x = lon * M_1_PI) - 1.) > 3.*DBL_EPSILON) { + x = 0.5 * (x + 1.0); + lon = ((x - floor(x)) - 0.5) * 2 * M_PI; + } + return (lon); +} + +/* +** $Log: proj_adjlon.c,v $ +** Revision 5.4 2009/05/05 23:40:30 gie +** restored config.h header +** +** Revision 5.3 2009/05/03 01:00:29 gie +** removed config.h reference +** +** Revision 5.2 2009/05/01 17:54:48 gie +** added conditional compile +** +** Revision 5.1 2009/04/30 20:47:47 gie +** *** empty log message *** +** +*/ diff --git a/geodesic/proj_gforward.c b/geodesic/proj_gforward.c new file mode 100644 index 000000000..7ea93daa7 --- /dev/null +++ b/geodesic/proj_gforward.c @@ -0,0 +1,57 @@ +/* +** Copyright (c) 2009 Gerald I. Evenden +*/ +static const char + PROJ_ID[] = "$Id: proj_gforward.c,v 5.1 2009/04/30 20:47:47 gie Exp gie $"; +/* +** Permission is hereby granted, free of charge, to any person obtaining +** a copy of this software and associated documentation files (the +** "Software"), to deal in the Software without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Software, and to +** permit persons to whom the Software is furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +/** @file proj_gforward.c + * @brief compute the inverse geodesic + * @author Gerald I. Evenden + */ +#include +#include +/** + * @brief Forward geodesic computation - elliptical earth + * @param A pointer to geodesic line stucturei + * @return 0 if OK, != 0 if error detected + * + * This is the preferred entry to geodesic computation routines. + * It will automatically test that point 1 is present and that + * A->S > 0.. + */ +int proj_gforward(PROJ_LINE * A) { + + if (A->pt1 == NULL || A->S <= 0 || A->E == NULL) + return 1; + if (A->E->f) /* ellipsoid earth */ + proj_in_fwd(A); + else /* spherical earth */ + proj_sp_fwd(A); + return 0; +} + +/* + * $Log: proj_gforward.c,v $ + * Revision 5.1 2009/04/30 20:47:47 gie + * *** empty log message *** + * +*/ diff --git a/geodesic/proj_ginverse.c b/geodesic/proj_ginverse.c new file mode 100644 index 000000000..cd27abd2c --- /dev/null +++ b/geodesic/proj_ginverse.c @@ -0,0 +1,58 @@ +/* +** Copyright (c) 2009 Gerald I. Evenden +*/ +static const char + PROJ_ID[] = "$Id: proj_ginverse.c,v 5.1 2009/04/30 20:47:47 gie Exp gie $"; +/* +** Permission is hereby granted, free of charge, to any person obtaining +** a copy of this software and associated documentation files (the +** "Software"), to deal in the Software without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Software, and to +** permit persons to whom the Software is furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +/** @file proj_ginverse.c + * @brief compute the inverse geodesic + * @author Gerald I. Evenden + */ +#include +#include +/** + * @brief Inverse geodesic computation - elliptical earth + * @param A pointer to geodesic line stucture + * @return 0 if OK else !=0 + * @author Gerald I. Evenden + * + * Determines the geodesic distance between A->pt1 and A-pt2 + * and the forward azimuth and back azimuths for each point. + * + * Preferred entry for geodesic computations. + */ +int proj_ginverse(PROJ_LINE * A) { + if (A->pt1 == NULL || A->pt2 == NULL || A->E == NULL) + return 1; + if (A->E->f) /* ellipsoid earth */ + proj_in_inv(A); + else /* spherical earth */ + proj_sp_inv(A); + return 0; +} + +/* + * $Log: proj_ginverse.c,v $ + * Revision 5.1 2009/04/30 20:47:47 gie + * *** empty log message *** + * +*/ diff --git a/geodesic/proj_in_fwd.c b/geodesic/proj_in_fwd.c new file mode 100644 index 000000000..0b263377c --- /dev/null +++ b/geodesic/proj_in_fwd.c @@ -0,0 +1,96 @@ +/* +** Copyright (c) 2009 Gerald I. Evenden +*/ +static const char + PROJ_ID[] = "$Id: proj_in_fwd.c,v 5.1 2009/04/30 20:47:47 gie Exp gie $"; +/* +** Permission is hereby granted, free of charge, to any person obtaining +** a copy of this software and associated documentation files (the +** "Software"), to deal in the Software without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Software, and to +** permit persons to whom the Software is furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +/** @file proj_in_fwd.c + * @brief compute the forward geodesic for an ellipsoid + */ +#include +#include +#define EPS 5e-14 +/** + * @brief forward geodesic computation + * @param A pointer to geodesic line structure + */ +void proj_in_fwd(PROJ_LINE * A) { + double c, d, e, r, x, y, cf, sa, cu, sf, cy, cz, su, tu, sy, c2a, flat; + +/* *** SOLUTION OF THE GEODETIC DIRECT PROBLEM AFTER T.VINCENTY */ +/* *** MODIFIED RAINSFORD'S METHOD WITH HELMERT'S ELLIPTICAL TERMS */ +/* *** EFFECTIVE IN ANY AZIMUTH AND AT ANY DISTANCE SHORT OF ANTIPODAL */ + +/* *** A IS THE SEMI-MAJOR AXIS OF THE REFERENCE ELLIPSOID */ +/* *** F IS THE FLATTENING OF THE REFERENCE ELLIPSOID */ +/* *** LATITUDES AND LONGITUDES IN RADIANS POSITIVE NORTH AND EAST */ +/* *** AZIMUTHS IN RADIANS CLOCKWISE FROM NORTH */ +/* *** GEODESIC DISTANCE S ASSUMED IN UNITS OF SEMI-MAJOR AXIS A */ + +/* *** PROGRAMMED FOR CDC-6600 BY LCDR L.PFEIFER NGS ROCKVILLE MD 20FEB75 */ +/* *** MODIFIED FOR SYSTEM 360 BY JOHN G GERGEN NGS ROCKVILLE MD 750608 */ + + r = 1.0 - (flat = A->E->f); + tu = r * sin(A->pt1->phi) / cos(A->pt1->phi); + sf = sin(A->az12); + cf = cos(A->az12); + A->az21 = 0.0; + if (cf != 0.0) + A->az21 = atan2(tu, cf) * 2.0; + cu = 1.0 / sqrt(tu * tu + 1.0); + su = tu * cu; + sa = cu * sf; + c2a = -sa * sa + 1.0; + x = sqrt((1.0 / r / r - 1.0) * c2a + 1.0) + 1.0; + x = (x - 2.0) / x; + c = 1.0 - x; + c = (x * x / 4.0 + 1) / c; + d = (x * .375 * x - 1.0) * x; + tu = A->S / A->E->a / r / c; + y = tu; + do { + sy = sin(y); + cy = cos(y); + cz = cos(A->az21 + y); + e = cz * cz * 2.0 - 1.0; + c = y; + x = e * cy; + y = e + e - 1.0; + y = (((sy * sy * 4.0 - 3.0) * y * cz * d / 6.0 + x) * d / 4.0 - cz) * + sy * d + tu; + } while (fabs(y - c) > EPS); + A->az21 = cu * cy * cf - su * sy; + A->pt2->phi = atan2(su * cy + cu * sy * cf, r * hypot(sa, A->az21)); + x = atan2(sy * sf, cu * cy - su * sy * cf); + c = ((c2a * -3.0 + 4.0) * flat + 4.0) * c2a * flat / 16.0; + d = ((e * cy * c + cz) * sy * c + y) * sa; + A->pt2->lam = A->pt1->lam + x - (1.0 - c) * d * flat; + A->az21 = atan2(sa, A->az21) + M_PI; + return; +} + +/* + * $Log: proj_in_fwd.c,v $ + * Revision 5.1 2009/04/30 20:47:47 gie + * *** empty log message *** + * +*/ diff --git a/geodesic/proj_in_inv.c b/geodesic/proj_in_inv.c new file mode 100644 index 000000000..6a55e8ee8 --- /dev/null +++ b/geodesic/proj_in_inv.c @@ -0,0 +1,394 @@ +/* +** Copyright (c) 2009 Gerald I. Evenden +*/ +static const char + PROJ_ID[] = "$Id: proj_in_inv.c,v 5.2 2009/05/06 18:46:51 gie Exp gie $"; +/* +** Permission is hereby granted, free of charge, to any person obtaining +** a copy of this software and associated documentation files (the +** "Software"), to deal in the Software without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Software, and to +** permit persons to whom the Software is furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +/** @file proj_in_inv.c + * @brief compute the forward geodesic for an ellipsoid + */ +#include +#include +#include +#define TOL0 5e-15 +#define TOL1 5e-14 +#define TOL2 .007 +#define TT 5e-13 +#define TTA 5e-15 +/** + * @brief Distance along meridian + * @param[in] esq ellipsoid eccentricity squared + * @param[in] phi1 first latitude + * @param[in] phi2 second latitude + * @return distance along meridian between phi1 and phi2 + */ +static double merid_arc(double esq, double phi1, double phi2) { + double a, b, c, d, e, f, e2, e4, e6, e8, s1, s2, t1, t2, + t3, t4, t5, da, db, dc, dd, de, df, ex; + int flag; +/* INPUT PARAMETERS: */ +/* ----------------- */ +/* ESQ ECCENTRICITY SQUARED FOR REFERENCE ELLIPSOID */ +/* P1 LAT STATION 1 */ +/* P2 LAT STATION 2 */ +/* return value */ +/* ------------------ */ +/* ARC GEODETIC DISTANCE or unit ellipse */ +/* CHECK FOR A 90 DEGREE LOOKUP */ + flag = 0; + s1 = fabs(phi1); + s2 = fabs(phi2); + flag = (s1 <= TTA) && (fabs(s2 - M_PI_2) < TTA); + da = phi2 - phi1; + s1 = 0.; + s2 = 0.; +/* COMPUTE THE LENGTH OF A MERIDIONAL ARC BETWEEN TWO LATITUDES */ + e2 = esq; + e4 = e2 * e2; + e6 = e4 * e2; + e8 = e6 * e2; + ex = e8 * e2; + t1 = e2 * .75; + t2 = e4 * .234375; + t3 = e6 * .068359375; + t4 = e8 * .01922607421875; + t5 = ex * .00528717041015625; + a = t1 + 1. + t2 * 3. + t3 * 10. + t4 * 35. + t5 * 126.; + if (!flag) { + b = t1 + t2 * 4. + t3 * 15. + t4 * 56. + t5 * 210.; + c = t2 + t3 * 6. + t4 * 28. + t5 * 120.; + d = t3 + t4 * 8. + t5 * 45.; + e = t4 + t5 * 10.; + f = t5; + db = sin(phi2 * 2.) - sin(phi1 * 2.); + dc = sin(phi2 * 4.) - sin(phi1 * 4.); + dd = sin(phi2 * 6.) - sin(phi1 * 6.); + de = sin(phi2 * 8.) - sin(phi1 * 8.); + df = sin(phi2 * 10.) - sin(phi1 * 10.); + /* COMPUTE THE S2 PART OF THE SERIES EXPANSION */ + s2 = -db * b / 2. + dc * c / 4. - dd * d / 6. + + de * e / 8. - df * f / 10.; + } +/* COMPUTE THE S1 PART OF THE SERIES EXPANSION */ + s1 = da * a; +/* COMPUTE THE ARC LENGTH */ + return ((1. - esq) * (s1 + s2)); +} + +/** + * @brief Determines internal factors + * @param[in] flat ellipsoid flattening + * @param[in] esq ellipsoid eccentricity squared + * @param[in] dlam difference in longitude between points + * @param[in] az12 azimuth from p1 to p2 + * @param[out] az21 azimuth from p2 to p1 + * @param[out] ao constant + * @param[out] bo constant + * @param[out] sms equitorial geodesic + */ +static void +func_loa(double flat, double esq, double dlam, double az12, + double *az21, double *ao, double *bo, double *sms) { + /* Local variables */ + double s, c2, t1, t2, u2, t4, u4, t6, u6, t8, u8, cs, az, dlon, cons; + int iter; + double esqp; + +/* INPUT PARAMETERS: */ +/* ----------------- */ +/* FLAT FLATTENING (0.0033528 ... ) */ +/* ESQ ECCENTRICITY SQUARED FOR REFERENCE ELLIPSOID */ +/* DLAM LON DIFFERENCE */ +/* AZ12 AZI AT STA 1 -> STA 2 */ + +/* OUTPUT PARAMETERS: */ +/* ------------------ */ +/* AZ21 AZ2 AT STA 2 -> STA 1 */ +/* AO CONST */ +/* BO CONST */ +/* SMS DISTANCE ... EQUATORIAL - GEODESIC (S - s) "SMS" */ + + dlon = fabs(dlam); + cons = (M_PI - dlon) / (M_PI * flat); +/* COMPUTE AN APPROXIMATE AZ */ + az = asin(cons); + t1 = 1.; + t2 = flat * -.25 * (flat + 1. + flat * flat); + t4 = flat * .1875 * flat * (flat * 2.25 + 1.); + t6 = flat * -.1953125 * flat * flat; + iter = 0; + do { + s = cos(az); + c2 = s * s; + /* COMPUTE NEW AO */ + *ao = t1 + c2 * (t2 + c2 * (t4 + c2 * t6)); + cs = cons / *ao; + s = asin(cs); + if (fabs(s - az) < TT) + break; + az = s; + } while (++iter <= 6); + az12 = s; + if (dlam < 0.) + az12 = M_PI * 2. - az12; + *az21 = M_PI * 2. - az12; +/* EQUATORIAL - GEODESIC (S - s) "SMS" */ + esqp = esq / (1. - esq); + s = cos(az12); + u2 = esqp * s * s; + u4 = u2 * u2; + u6 = u4 * u2; + u8 = u6 * u2; + t1 = 1.; + t2 = u2 * .25; + t4 = u4 * -.046875; + t6 = u6 * .01953125; + t8 = u8 * -.01068115234375; + *bo = t1 + t2 + t4 + t6 + t8; + s = sin(az12); + *sms = M_PI * (1. - flat * fabs(s) * *ao - *bo * (1. - flat)); + return; +} + +/** + * @brief inverse geodesic computation for elliptical earth + * @param A pointer to geodesic line structure + */ +void proj_in_inv(PROJ_LINE * A) { + double b, w, z, a2, b2, a4, f0, f2, f3, f4, a6, b4, b6, r1, f, esq, + r2, q2, u1, u2, t4, q4, t6, q6, r3, aa, ab, bb, ao, bo, qo, ss, + xy, xz, cu1, cu2, su1, su2, arc, sig, equ, sms, csig, clon, dlon, + ssig, epsq, slon, tana1, tana2, sina1, sina2; + int kount; + double sinalf, alimit; +/* solution of the geodetic inverse problem after t. vincenty */ +/* modified rainsford's method with helmert's elliptical terms */ +/* effective in any azimuth and at any distance short of antipocal */ +/* from/to stations must not be the geographic pole. */ +/* parameter a is the semi-major axis of the reference ellipsoid */ +/* finv=1/f is the inverse flattening of the reference ellipsoid */ +/* latitudes and longitudes in radians positive north and west */ +/* forward and back azimuths returned in radians clockwise from south */ +/* geodesic distance s returned in units of semi-major axis a */ +/* programmed for ibm 360-195 09/23/75 */ + +/* note - note - note - */ +/* 1. do not use for meridional arcs and be careful on the equator. */ +/* 2. azimuths are from north(+) clockwise and */ +/* 3. longitudes are positive east(+) */ + +/* input parameters: */ +/* ----------------- */ +/* a semi-major axis of reference ellipsoid meters */ +/* f flattening (0.0033528...) */ +/* esq eccentricity squared */ +/* p1 lat station 1 radians */ +/* e1 lon station 1 radians */ +/* p2 lat station 2 radians */ +/* e2 lon station 2 radians */ + +/* output parameters: */ +/* ------------------ */ +/* az1 azi at sta 1 -> sta 2 radians */ +/* az2 azi at sta 2 -> sta 1 radians */ +/* s geodetic dist between sta(s) 1 & 2 meters */ + +/* local variables and constants: */ +/* ------------------------------ */ +/* aa constant from subroutine gpnloa */ +/* alimit equatorial arc distance along the equator (radians) */ +/* arc meridional arc distance latitude p1 to p2 (in meters) */ +/* az1 azimuth forward (in radians) */ +/* az2 azimuth back (in radians) */ +/* bb constant from subroutine gpnloa */ +/* dlon temporary value for difference in longitude (radians) */ +/* equ equatorial distance (in meters) */ +/* r1,r2 temporary variables */ +/* s ellipsoid distance (in meters) */ +/* sms equatorial - geodesic distance (S - s) "Sms" */ +/* ss temporary variable */ +/* TOL0 tolerance for checking computation value */ +/* TOL1 tolerance for checking a real zero value */ +/* TOL2 tolerance for close to zero value */ + +/* test the longitude difference with TOL1 */ +/* TOL1 is approximately 0.000000001 arc seconds */ + f = A->E->f; + esq = A->E->es; + ss = A->pt2->lam - A->pt1->lam; + if (fabs(ss) < TOL1) { + r2 = A->pt2->phi; + r1 = A->pt1->phi; + arc = merid_arc(esq, r1, r2); + A->S = A->E->a * fabs(arc); + if (A->pt2->phi > A->pt1->phi) { + A->az12 = 0.; + A->az21 = M_PI; + } else { + A->az12 = M_PI; + A->az21 = 0.; + } + return; + } +/* test for longitude over 180 degrees */ + dlon = A->pt2->lam - A->pt1->lam; + + if (dlon >= 0.) { + if ((M_PI <= dlon) && (dlon < (2. * M_PI))) + dlon -= (2. * M_PI); + } else { + ss = fabs(dlon); + if (M_PI <= ss && ss < (2. * M_PI)) + dlon += (2. * M_PI); + } + ss = fabs(dlon); + if (ss > M_PI) + ss = (2. * M_PI) - ss; +/* compute the limit in longitude (alimit), it is equal */ +/* to twice the distance from the equator to the pole, */ +/* as measured along the equator (east/west) */ + alimit = M_PI * (1. - f); +/* test for anti-nodal difference */ + if (ss >= alimit) { + r1 = fabs(A->pt1->phi); + r2 = fabs(A->pt2->phi); + /* latitudes r1 & r2 are not near the equator */ + if (!(r1 > TOL2 && r2 > TOL2) && + /* longitude difference is greater than lift-off point */ + /* now check to see if "both" r1 & r2 are on equator */ + !(r1 < TOL1 && r2 > TOL2) && !(r2 < TOL1 && r1 > TOL2)) { + /* check for either r1 or r2 just off the equator but < TOL2 */ + if (r1 > TOL1 || r2 > TOL1) { + A->az12 = 0.; + A->az21 = 0.; + A->S = 0.; + return; + } + /* compute the azimuth to anti-nodal point */ + func_loa(f, esq, dlon, A->az12, &(A->az21), &aa, &bb, &sms); + /* compute the equatorial distance & geodetic */ + equ = fabs(dlon); + A->S = equ - sms; + return; + } + } + f0 = 1. - f; + b = f0; + epsq = esq / (1. - esq); + f2 = f * f; + f3 = f * f2; + f4 = f * f3; +/* the longitude difference */ + dlon = A->pt2->lam - A->pt1->lam; + ab = dlon; +/* the reduced latitudes */ + u1 = f0 * sin(A->pt1->phi) / cos(A->pt1->phi); + u2 = f0 * sin(A->pt2->phi) / cos(A->pt2->phi); + u1 = atan(u1); + u2 = atan(u2); + su1 = sin(u1); + cu1 = cos(u1); + su2 = sin(u2); + cu2 = cos(u2); +/* counter for the iteration operation */ + kount = 0; + do { + clon = cos(ab); + slon = sin(ab); + csig = su1 * su2 + cu1 * cu2 * clon; + ssig = hypot(slon * cu2, su2 * cu1 - su1 * cu2 * clon); + sig = atan2(ssig, csig); + sinalf = cu1 * cu2 * slon / ssig; + w = 1. - sinalf * sinalf; + t4 = w * w; + t6 = w * t4; + /* the coefficients of type a */ + ao = f - f2 * (f + 1. + f2) * w / 4. + f3 * 3. * (f * 9. / 4. + 1.) * + t4 / 16. - f4 * 25. * t6 / 128.; + a2 = f2 * (f + 1. + f2) * w / 4. - f3 * (f * 9. / 4. + 1.) * t4 / 4. + + f4 * 75. * t6 / 256.; + a4 = f3 * (f * 9. / 4. + 1.) * t4 / 32. - f4 * 15. * t6 / 256.; + a6 = f4 * 5. * t6 / 768.; + /* the multiple angle functions */ + qo = 0.; + if (w > TOL0) + qo = su1 * -2. * su2 / w; + q2 = csig + qo; + q4 = q2 * 2. * q2 - 1.; + q6 = q2 * (q2 * 4. * q2 - 3.); + r2 = ssig * 2. * csig; + r3 = ssig * (3. - ssig * 4. * ssig); + /* the longitude difference */ + A->S = + sinalf * (ao * sig + a2 * ssig * q2 + a4 * r2 * q4 + a6 * r3 * q6); + xz = dlon + A->S; + xy = fabs(xz - ab); + ab = dlon + A->S; + } while (xy >= 5e-14 && ++kount <= 7); +/* the coefficients of type b */ + z = epsq * w; + bo = z * (z * (z * (.01953125 - z * 175. / 16384.) - .046875) + .25) + 1.; + b2 = z * (z * (z * (z * 35. / 2048. - .029296875) + .0625) - .25); + b4 = z * z * (z * (.005859375 - z * 35. / 8192.) - .0078125); + b6 = z * z * z * (z * 5. / 6144. - 6.5104166666666663e-4); +/* distance */ + A->S = A->E->a * b * + (bo * sig + b2 * ssig * q2 + b4 * r2 * q4 + b6 * r3 * q6); +/* first compute the az12 & az21 for along the equator */ + if (dlon > M_PI) + dlon -= M_PI * 2.; + if (fabs(dlon) > M_PI) + dlon += M_PI * 2.; + A->az12 = M_PI / 2.; + if (dlon < 0.) + A->az12 *= 3.; + A->az21 = A->az12 + M_PI; + if (A->az21 > M_PI * 2.) + A->az21 -= M_PI * 2.; +/* now compute the az1 & az2 for latitudes not on the equator */ + if (!(fabs(su1) < TOL0 && fabs(su2) < TOL0)) { + tana1 = slon * cu2 / (su2 * cu1 - clon * su1 * cu2); + tana2 = slon * cu1 / (su1 * cu2 - clon * su2 * cu1); + sina1 = sinalf / cu1; + sina2 = -sinalf / cu2; + /* azimuths from north,longitudes positive east */ + A->az12 = atan2(sina1, sina1 / tana1); + A->az21 = M_PI - atan2(sina2, sina2 / tana2); + } + if (A->az12 < 0.) + A->az12 += (2. * M_PI); + if (A->az21 < 0.) + A->az21 += (2. * M_PI); + A->az12 = proj_adjlon(A->az12); + A->az21 = proj_adjlon(A->az21); + return; +} + +/* + * $Log: proj_in_inv.c,v $ + * Revision 5.2 2009/05/06 18:46:51 gie + * updates for Doxygen + * + * Revision 5.1 2009/04/30 20:47:47 gie + * *** empty log message *** + * +*/ diff --git a/geodesic/proj_pt_fwd.c b/geodesic/proj_pt_fwd.c new file mode 100644 index 000000000..c06228d96 --- /dev/null +++ b/geodesic/proj_pt_fwd.c @@ -0,0 +1,139 @@ +/* +** Copyright (c) 2009 Gerald I. Evenden +*/ +static const char + PROG_ID[] = "$Id: proj_pt_fwd.c,v 5.1 2009/04/30 20:47:47 gie Exp gie $"; +/* +** Permission is hereby granted, free of charge, to any person obtaining +** a copy of this software and associated documentation files (the +** "Software"), to deal in the Software without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Software, and to +** permit persons to whom the Software is furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +/** + * @file proj_pt_fwd.c + * @brief Thomas Forward geodesic function + * @author Gerald I. Evenden + */ +#include +#include +# define MERI_TOL 1e-9 +/** + * @brief Forward geodesic function + * @param Arc pointer to geodetic line structure + * + * Procedure determins point point 2 and azimuth at distance + * and azimuth from pt1 upon an ellipsoidal Earth. + * + * Based upon "Spherical Geodesics, Reference Systems, & Local + * Geometry", USNOO SP-138, 1970, Paul Thomas. + */ +void proj_pt_fwd(PROJ_LINE * Arc) { + double d, sind, u, V, X, ds, cosds, sinds, ss, de, al12, f2, f4, f, onef; + double th1, costh1, sinth1, sina12, cosa12, M, N, c1, c2, D, P, s1, al21, + phi2; + int merid, signS; + + f4 = 0.5 * (f2 = 0.5 * (f = Arc->E->f)); + onef = 1. - f; + al12 = proj_adjlon(Arc->az12); /* reduce to +- 0-PI */ + signS = fabs(al12) > M_PI_2 ? 1 : 0; + th1 = atan(onef * tan(Arc->pt1->phi)); + costh1 = cos(th1); + sinth1 = sin(th1); + if ((merid = fabs(sina12 = sin(al12)) < MERI_TOL)) { + sina12 = 0.; + cosa12 = fabs(al12) < M_PI_2 ? 1. : -1.; + M = 0.; + } else { + cosa12 = cos(al12); + M = costh1 * sina12; + } + N = costh1 * cosa12; + if (merid) { + c1 = 0.; + c2 = f4; + D = 1. - c2; + D *= D; + P = c2 / D; + } else { + c1 = f * M; + c2 = f4 * (1. - M * M); + D = (1. - c2) * (1. - c2 - c1 * M); + P = (1. + .5 * c1 * M) * c2 / D; + } + if (merid) + s1 = M_PI_2 - th1; + else { + s1 = (fabs(M) >= 1.) ? 0. : acos(M); + s1 = sinth1 / sin(s1); + s1 = (fabs(s1) >= 1.) ? 0. : acos(s1); + } + d = Arc->S / (D * Arc->E->a); + if (signS) + d = -d; + u = 2. * (s1 - d); + V = cos(u + d); + X = c2 * c2 * (sind = sin(d)) * cos(d) * (2. * V * V - 1.); + ds = d + X - 2. * P * V * (1. - 2. * P * cos(u)) * sind; + ss = s1 + s1 - ds; + cosds = cos(ds); + sinds = sin(ds); + if (signS) + sinds = -sinds; + al21 = N * cosds - sinth1 * sinds; + if (merid) { + phi2 = atan(tan(M_PI_2 + s1 - ds) / onef); + if (al21 > 0.) { + al21 = M_PI; + if (signS) + de = M_PI; + else { + phi2 = -phi2; + de = 0.; + } + } else { + al21 = 0.; + if (signS) { + phi2 = -phi2; + de = 0; + } else + de = M_PI; + } + } else { + al21 = atan(M / al21); + if (al21 > 0.) + al21 += M_PI; + if (al12 < 0.) + al21 -= M_PI; + Arc->az21 = proj_adjlon(al21); + Arc->pt2->phi = atan(-(sinth1 * cosds + N * sinds) * sin(al21) / + (onef * M)); + de = atan2(sinds * sina12, (costh1 * cosds - sinth1 * sinds * cosa12)); + if (signS) + de += c1 * ((1. - c2) * ds + c2 * sinds * cos(ss)); + else + de -= c1 * ((1. - c2) * ds - c2 * sinds * cos(ss)); + } + Arc->pt2->lam = proj_adjlon(Arc->pt1->lam + de); +} + +/* + * $Log: proj_pt_fwd.c,v $ + * Revision 5.1 2009/04/30 20:47:47 gie + * *** empty log message *** + * +*/ diff --git a/geodesic/proj_pt_inv.c b/geodesic/proj_pt_inv.c new file mode 100644 index 000000000..0c6f6f3e5 --- /dev/null +++ b/geodesic/proj_pt_inv.c @@ -0,0 +1,99 @@ +/* +** Copyright (c) 2009 Gerald I. Evenden +*/ +static const char + PROG_ID[] = "$Id: proj_pt_inv.c,v 5.1 2009/04/30 20:47:47 gie Exp gie $"; +/* +** Permission is hereby granted, free of charge, to any person obtaining +** a copy of this software and associated documentation files (the +** "Software"), to deal in the Software without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Software, and to +** permit persons to whom the Software is furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +/** + * @file proj_pt_inv.c + * @brief Thomas Inverse Geodetic Function + * @author Gerald I. Evenden + */ +#include +#include +# define DTOL 1e-12 +/** + * @brief Inverse geodesic function + * @param Arc pointer to geodetic line structure + * + * Procedure determins distance and forward/back azimuth between + * points pt1 and pt2 in stucture Arc based upon an ellipsoidal + * Earth. + * + * Based upon "Spherical Geodesics, Reference Systems, & Local + * Geometry", USNOO SP-138, 1970, Paul Thomas. + */ +void proj_pt_inv(PROJ_LINE * Arc) { + double th1, th2, thm, dthm, dlamm, dlam, sindlamm, costhm, sinthm, cosdthm, + sindthm, L, E, cosd, d, X, Y, T, sind, tandlammp, u, v, D, A, B, f2, f4, + f64, onef; + + f4 = 0.5 * (f2 = 0.5 * (onef = Arc->E->f)); + f64 = 0.25 * f4 * f4; + onef = 1. - onef; + th1 = atan(onef * tan(Arc->pt1->phi)); + th2 = atan(onef * tan(Arc->pt2->phi)); + thm = .5 * (th1 + th2); + dthm = .5 * (th2 - th1); + dlamm = .5 * (dlam = proj_adjlon(Arc->pt2->lam - Arc->pt1->lam)); + if (fabs(dlam) < DTOL && fabs(dthm) < DTOL) { // pt1 == pt2 + Arc->az12 = Arc->az21 = Arc->S = 0.; + return; + } + sindlamm = sin(dlamm); + costhm = cos(thm); + sinthm = sin(thm); + cosdthm = cos(dthm); + sindthm = sin(dthm); + L = sindthm * sindthm + (cosdthm * cosdthm - sinthm * sinthm) + * sindlamm * sindlamm; + d = acos(cosd = 1 - L - L); + E = cosd + cosd; + sind = sin(d); + Y = sinthm * cosdthm; + Y *= (Y + Y) / (1. - L); + T = sindthm * costhm; + T *= (T + T) / L; + X = Y + T; + Y -= T; + T = d / sind; + D = 4. * T * T; + A = D * E; + B = D + D; + Arc->S = sind * (T - f4 * (T * X - Y) + + f64 * (X * (A + (T - .5 * (A - E)) * X) - + Y * (B + E * Y) + D * X * Y)); + tandlammp = tan(.5 * (dlam - .25 * (Y + Y - E * (4. - X)) * + (f2 * T + f64 * (32. * T - (20. * T - A) + * X - (B + 4.) * Y)) * tan(dlam))); + u = atan2(sindthm, (tandlammp * costhm)); + v = atan2(cosdthm, (tandlammp * sinthm)); + Arc->az12 = proj_adjlon((2 * M_PI) + v - u); + Arc->az21 = proj_adjlon((2 * M_PI) - v - u); +} + +/* + * $Log: proj_pt_inv.c,v $ + * Revision 5.1 2009/04/30 20:47:47 gie + * *** empty log message *** + * +*/ diff --git a/geodesic/proj_sp_fwd.c b/geodesic/proj_sp_fwd.c new file mode 100644 index 000000000..561683f78 --- /dev/null +++ b/geodesic/proj_sp_fwd.c @@ -0,0 +1,72 @@ +/* +** Copyright (c) 2009 Gerald I. Evenden +*/ +static const char + PROJ_ID[] = "$Id: proj_sp_fwd.c,v 5.1 2009/04/30 20:47:47 gie Exp gie $"; +/* +** Permission is hereby granted, free of charge, to any person obtaining +** a copy of this software and associated documentation files (the +** "Software"), to deal in the Software without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Software, and to +** permit persons to whom the Software is furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +/* Procedure to compute the geographic location of a point 1 at + * azimuth A->az12 and distance A->S along a great circle from + * point 0. In addition the back azimuth from 1 to 0 is determined. + * All arguments in radians. + * + * Computation for a spherical earth based upon formulas in "Map + * Projections--A Working Manual," USGS Bulletin 1395, p. 30-31, + * 1987 by John P. Snyder. +*/ +/** @file proj_sp_fwd.c + * @brief compute the forward geodesic for a spherical earth. + * @author Gerald I. Evenden + */ +#include +#include +/** @brief Forward geodesic computation - spherical earth + * @param A pointer to geodesic line structure + * + * Computes the location of the second point in the structure + * based on the first point's location and the distance and + * forward azumuth + */ +void proj_sp_fwd(PROJ_LINE * A) { + double cc, sc, cp, sp, ca, dl, S; + + cc = cos(S = A->S / A->E->a); + sc = sin(S); + cp = cos(A->pt1->phi); + sp = sin(A->pt1->phi); + ca = cos(A->az12); + + A->pt2->phi = asin(sp * cc + cp * sc * ca); + A->pt2->lam = A->pt1->lam + + atan2(sc * sin(A->az12), cp * cc - sp * sc * ca); + dl = A->pt1->lam - A->pt2->lam; + A->az21 = atan2(cp * sin(dl), + cos(A->pt2->phi) * sp - sin(A->pt2->phi) * cp * cos(dl)); + if (fabs(A->pt2->lam) > M_PI) + A->pt2->lam -= copysign(2.*M_PI, A->pt2->lam); +} + +/* + * $Log: proj_sp_fwd.c,v $ + * Revision 5.1 2009/04/30 20:47:47 gie + * *** empty log message *** + * +*/ diff --git a/geodesic/proj_sp_inv.c b/geodesic/proj_sp_inv.c new file mode 100644 index 000000000..45cf479d7 --- /dev/null +++ b/geodesic/proj_sp_inv.c @@ -0,0 +1,96 @@ +/* +** Copyright (c) 2009 Gerald I. Evenden +*/ +static const char + PROJ_ID[] = "$Id: proj_sp_inv.c,v 5.1 2009/04/30 20:47:47 gie Exp gie $"; +/* +** Permission is hereby granted, free of charge, to any person obtaining +** a copy of this software and associated documentation files (the +** "Software"), to deal in the Software without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Software, and to +** permit persons to whom the Software is furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +/* Procedure to compute the distance, dist, along a great circle + * between point A->pt1.phi-A->pt1.lam and point A->pt2.phi-A->pt2.lam. In addition, + * the forward azimuth, Az_01, of the great circle at point 0 and + * the back azimuth, Az_10, at point 1 are returned. All arguments + * and results are in radians. + * + * Computation for a spherical earth based upon formulas in "Map + * Projections--A Working Manual," USGS Bulletin 1395, p. 30-31, + * 1987 by John P. Snyder. +*/ +/** @file proj_sp_inv.c + * @brief compute the inverse geodesic for a spherical earth. + * @author Gerald I. Evenden + */ +#include +#include +/** @brief Inverse geodesic computation - spherical earth + * @param A pointer to geodesic line structure + * @author Gerald I. Evenden + * + * Computes distance, forward and back azimuths in structure + * for the two end points of the geodesic line + * + * Algorithm based upon J. Snyder's method, described in "Map Projection--- + * A Working Manual", USGS Prof. Paper 1396, p. 30, which minimized + * loss of precision for closely spaced points. + * Comments in body of procedure note alternative computation to maintain + * precision at the apod. + */ +void proj_sp_inv(PROJ_LINE * A) { + double dlam, dphi, shp, shl, c1, c0, s1, s0; + + dlam = A->pt2->lam - A->pt1->lam; + dphi = A->pt2->phi - A->pt1->phi; + c1 = cos(A->pt2->phi); + c0 = cos(A->pt1->phi); + s1 = sin(A->pt2->phi); + s0 = sin(A->pt1->phi); + shp = sin(0.5 * dphi); + shl = sin(0.5 * dlam); +/* + * the following is suggestion of JP Snyder for greater precision + * for points close together compared to the cosine version. + */ + A->S = 2. * A->E->a * asin(sqrt(shp * shp + c0 * c1 * shl * shl)); +/* + * the follewing is purported to maintain precison at both nearby + * points and those at apodal distances. However, limited testing + * shows precious little difference at the apode it remains as + * a referenced alternative. + */ +// { double t = cos(dlam); +// A->S = A->E->a * atan2(hypot(c1*sin(dlam), c0*s1-s0*c1*t), +// s0*s1 + c0*c1*t); +// } + + A->az12 = atan2(c1 * (shp = sin(dlam)), + c0 * s1 - s0 * c1 * (shl = cos(dlam))); + if (A->az12 < 0.) + A->az12 += 2.*M_PI; + A->az21 = -atan2(c0 * shp, c1 * s0 - s1 * c0 * shl); + if (A->az21 < 0.) + A->az21 += 2.*M_PI; +} + +/* + * $Log: proj_sp_inv.c,v $ + * Revision 5.1 2009/04/30 20:47:47 gie + * *** empty log message *** + * +*/ diff --git a/geodesic/project.h b/geodesic/project.h new file mode 100644 index 000000000..a653edbbc --- /dev/null +++ b/geodesic/project.h @@ -0,0 +1,368 @@ +/* +** Copyright (c) 2009 Gerald I. Evenden +** +** "$Id: project.h,v 1.2 2009/05/17 15:16:34 gie Exp gie $" +** +** Permission is hereby granted, free of charge, to any person obtaining +** a copy of this software and associated documentation files (the +** "Software"), to deal in the Software without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Software, and to +** permit persons to whom the Software is furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +/** @file project.h + * @brief The header file for the geodesic library routines + * @author Gerald I. Evenden + */ +#ifndef PROJECT_incl +#define PROJECT_incl 1 +#include +#include +#include +/** @brief Geographic coordinate */ +typedef struct { + double lam; /**< longitude in radians */ + double phi; /**< latitude in radians */ +} PROJ_LP; +/** @brief Cartesian coordinate */ +typedef struct { + double x; /**< Easting */ + double y; /**< Northing */ +} PROJ_XY; +/** @brief 3D Geographic coordinate */ +typedef struct { + double lam; /**< longitude in radians */ + double phi; /**< latitude in radians */ + double h; /**< height above the ellipsoid */ +} PROJ_PT_LPH; +/** + * @brief Geocentric Cartesian coordinate + * + * Each element in same units as \a a in structure \link ellips \endlink + */ +typedef struct { + double x; /**< X axis */ + double y; /**< Y axis */ + double z; /**< Z axis */ +} PROJ_PT_XYZ; +/** + * @brief Earth's elliptical constants. + * + * Element \a a units, typically meters, defines the units for + * all other length elements. + */ +typedef struct { + double a; /**< semi-major axis or sphere radius */ + double f; /**< ellipsoid flattening, if == 0 then sphere */ + double es; /**< eccentricity squared, if == 0 then sphere */ + double one_es; /**< 1-es */ +} PROJ_ELLIPS; +/** + * @brief Geodesic line structure + * + * Azimuths in radians clockwise from North. Distance units the + * same as element \a a in structure \link ellips \endlink. + */ +typedef struct { + PROJ_PT_LPH *pt1; /**< pointer to geographic coord of first location */ + double az12; /**< azimuth from pt1 to pt2 (forward) */ + PROJ_PT_LPH *pt2; /**< pointer to geographic coord of second location */ + double az21; /**< azimuth from pt2 to pt1 (back) */ + double S; /**< geodetic distance between points */ + PROJ_ELLIPS *E; /**< pointer to ellipsoid constants */ +} PROJ_LINE; +/** + * @brief linked argument list + * + * The size of param means nothing and is only of use so that + * the debugger will dump at least that many characters. + */ + /* parameter list struct */ +typedef struct proj_arg_list { + struct proj_arg_list *next; /**< pointer to next entry if !NULL */ + char used; /**< if not 0 then argument referenced */ + char param[5]; /**< character string of argument */ +} PROJ_PARAM_ITEM; +/** + * @brief list of ellipsoid parameters + */ +struct PROJ_ELLPS_LIST { + char *id; /**< ellipse keyword name */ + char *major; /**< a= major-axis value */ + char *ell; /**< elliptical parameter */ + char *name; /**< comments */ +}; + +#ifndef PROJ_ELLPS_LIST_FLAG +extern const struct PROJ_ELLPS_LIST proj_ellps[]; +#endif // end of PROJ_ELLPS_LIST_FLAG + +/** + * @brief list of prime meridians + */ +struct PROJ_PRIMES_LIST { + char *name; /**< prime meridian name */ + char *del_lon; /**< longitude offset from Greenwich */ +}; + +#ifndef PROJ_PRIMES_LIST_FLAG +extern const struct PROJ_PRIMES_LIST proj_pm_list[]; +#endif // end of PROJ_PRIMES_LIST_FLAG + +struct PROJ_DERIVS { + double x_l, x_p; /* derivatives of x for lambda-phi */ + double y_l, y_p; /* derivatives of y for lambda-phi */ +}; +struct PROJ_FACTORS { + struct PROJ_DERIVS der; + double h, k; /* meridinal, parallel scales */ + double omega, thetap; /* angular distortion, theta prime */ + double conv; /* convergence */ + double s; /* areal scale factor */ + double a, b; /* max-min scale error */ + int code; /* info as to analytics, see following */ +}; +#define DERIVS(name) static int name(PROJ *P, PROJ_LP lp, struct PROJ_DERIVS *der) { + +#define IS_ANAL_XL_YL 01 /* derivatives of lon analytic */ +#define IS_ANAL_XP_YP 02 /* derivatives of lat analytic */ +#define IS_ANAL_HK 04 /* h and k analytic */ +#define IS_ANAL_CONV 010 /* convergence analytic */ +struct PROJ_UNITS { + char *id; /* units keyword */ + char *to_meter; /* multiply by value to get meters */ + char *name; /* comments */ +}; + +typedef struct { double r, i; } PROJ_COMPLEX; + +/** + * @brief basic projection control structure + */ +typedef struct PROJconsts { + PROJ_XY (*fwd)(PROJ_LP, struct PROJconsts *); /**< forward projection */ + PROJ_LP (*inv)(PROJ_XY, struct PROJconsts *); /**< inverse projection */ + void (*spc)(PROJ_LP, struct PROJconsts *, struct PROJ_FACTORS *); /**< projection factors */ + int (*derivs)(struct PROJconsts *, PROJ_LP, struct PROJ_DERIVS *); /**< drivatives entry */ + void (*pfree)(struct PROJconsts *); /**< free this structure memory */ + const char *descr; /**< string of projection characteristics */ + PROJ_PARAM_ITEM *params; /**< parameter list */ + int over; /**< over-range flag */ + double + a, /**< major axis or radius if es==0 */ + e, /**< eccentricity */ + es, /**< e ^ 2 */ + ra, /**< 1/a */ + one_es, /**< 1 - e^2 */ + rone_es, /**< 1/one_es */ + primer, /**< prime meridian */ + netlam0, /**< net adjustment to I/O longitude value */ + lam0, phi0, /**< central longitude, latitude */ + x0, y0, /**< false easting and northing */ + k0, /**< general scaling factor */ + to_meter, fr_meter; /**< Cartesian scaling */ +#ifdef PROJ_PARMS__ +PROJ_PARMS__ +#endif /* end of optional extensions */ +} PROJ; +/** + * @brief structure listing the available projection entries + */ +struct PROJ_LIST { + char *id; /**< projection keyword */ + PROJ *(*proj)(PROJ *); /**< projection entry point */ + char * const *descr; /**< description text */ +}; + +/* Generate proj_list external or make list from include file */ +#ifndef PROJ_LIST_H +extern const struct PROJ_LIST proj_list[]; +#else +#define PROJ_HEAD(id, name) \ + extern PROJ *proj_##id(PROJ *); extern char * const proj_s_##id; +#include PROJ_LIST_H +#undef PROJ_HEAD +#define PROJ_HEAD(id, name) {#id, proj_##id, &proj_s_##id}, + const struct PROJ_LIST +proj_list[] = { +#include PROJ_LIST_H + {0, 0, 0}, + }; +#undef PROJ_HEAD +#endif // end of PROJ_LIST_H + +typedef struct {int errnum; char * name; } PROJ_ERR_LIST; +#ifndef PROJ_UNITS__ +extern const struct PROJ_UNITS proj_units[]; +#endif // end of PROJ_UNITS + +extern int * proj_errno_loc(void); +#define proj_errno (*proj_errno_loc()) +#ifdef PROJ_LIB__ + /* repeatative projection code */ +#define PROJ_HEAD(id, name) static const char des_##id [] = name +#define ENTRYA(name) const char * const proj_s_##name = des_##name; \ + PROJ *proj_##name(PROJ *P) { if (!P) { \ + if ((P = (PROJ *)malloc(sizeof(PROJ)))) { \ + P->pfree = freeup; P->fwd = 0; P->inv = 0; \ + P->spc = 0; P->descr = des_##name; +#define ENTRYX } return P; } else { +#define ENTRY0(name) ENTRYA(name) ENTRYX +#define ENTRY1(name, a) ENTRYA(name) P->a = 0; ENTRYX +#define ENTRY2(name, a, b) ENTRYA(name) P->a = 0; P->b = 0; ENTRYX +#define ENDENTRY(p) } return (p); } +#define E_ERROR(err) { proj_errno = err; freeup(P); return(0); } +#define E_ERROR_0 { freeup(P); return(0); } +#define F_ERROR { proj_errno = -20; return(xy); } +#define I_ERROR { proj_errno = -20; return(lp); } +#define FORWARD(name) static PROJ_XY name(PROJ_LP lp,PROJ*P) {PROJ_XY xy={0.,0.} +#define INVERSE(name) static PROJ_LP name(PROJ_XY xy,PROJ*P) {PROJ_LP lp={0.,0.} +#define FREEUP static void freeup(PROJ *P) { +#define SPECIAL(name) static void name(PROJ_LP lp, PROJ *P, struct PROJ_FACTORS *fac) +#endif // end of PROJ_LIB__ + +/** +* \defgroup local Locally developed procedures + * @brief General purpose procedures. + * + */ +/*@{*/ +PROJ *proj_init(int, char **); +void proj_free(PROJ *); +PROJ *proj_initstr(const char *); +int proj_ell_set(PROJ_PARAM_ITEM *, double *, double *); +PROJ_PARAM_ITEM *proj_mkparam(const char *, const char **); +PROJ_PARAM_ITEM *proj_free_param(PROJ_PARAM_ITEM *); +int proj_param(PROJ_PARAM_ITEM *, const char *, void *); +double proj_adjlon(double ang); +void proj_sp_inv(PROJ_LINE *); +void proj_sp_fwd(PROJ_LINE *); +void proj_pt_inv(PROJ_LINE *); +void proj_pt_fwd(PROJ_LINE *); +int proj_gforward(PROJ_LINE *); +int proj_ginverse(PROJ_LINE *); +double proj_dms2rad(const char *, char **); +int proj_rad2dms(char *, size_t, const char *, double, const char *); +int proj_casecmp(const char *, const char *); +int proj_ncasecmp(const char *, const char *, size_t); +int proj_factors(PROJ_LP, PROJ *, double, struct PROJ_FACTORS *); +double proj_qsfn(double, const void *); +void *proj_auth_ini(double, double *); +double proj_auth_lat(double, const void *); +double proj_auth_inv(double, const void *); +int proj_deriv(PROJ_LP, double h, PROJ *, struct PROJ_DERIVS *); +int *proj_errno_loc(void); +int proj_factors(PROJ_LP, PROJ *, double h, struct PROJ_FACTORS *); +void *proj_gauss_ini(double, double phi0, double *, double *); +PROJ_LP proj_gauss(PROJ_LP, const void *); +PROJ_LP proj_inv_gauss(PROJ_LP, const void *); +int proj_gdinverse(PROJ *, PROJ_LP *est, PROJ_XY, double); +void *proj_mdist_ini(double); +double proj_mdist(double, double sphi, double cphi, const void *); +double proj_inv_mdist(double, const void *); +double proj_msfn(double, double cosphi, double); +double proj_phi2(double, double); +double proj_psi(double, double sphi, double); +double proj_apsi(double, double); +const char *proj_strerrno(int); +int proj_strerror_r(int, char *, int); +double proj_asin(double); +double proj_acos(double); +double proj_sqrt(double); +double proj_atan2(double, double); +PROJ_LP proj_translate(PROJ_LP, const void *); +PROJ_LP proj_inv_translate(PROJ_LP, const void *); +void *proj_translate_ini(double, double); +double proj_tsfn(double, double sinphi, double); +PROJ_COMPLEX proj_zpoly1(PROJ_COMPLEX, PROJ_COMPLEX *, int); +PROJ_COMPLEX proj_zpolyd1(PROJ_COMPLEX, PROJ_COMPLEX *, int n, PROJ_COMPLEX *); + +void proj_pr_list(PROJ *); +PROJ_XY proj_fwd(PROJ_LP, PROJ *); +PROJ_LP proj_inv(PROJ_XY, PROJ *); +/*@}*/ + +/** \defgroup imported Imported and translated procedures + * @brief Procedures converted from FORTRAN to C + * + * These routines were extracted from FORTRAN programs located at + * http://www.ngs.noaa.gov/PC_PROD/Inv_Fwd/ . + * They are based upon mathematics by Vincenty: + * http://www.ngs.noaa.gov/PUBS_LIB/inverse.pdf . + * + * The applicable procedures were extracted from the composite + * program FORTRAN files FORWARD.FOR and INVERSE.FOR and + * converted to C by the f2c program. The converted procedures + * were further edited to remove f2c dependencies and clean up + * translation "noise." Original FORTRAN code comments were + * preserved when possible. + * + * The so called 3D versions of the geodesic procedures were not + * translated because there seemed to be constants and other factors + * that were limited to one ellipsoid and thus the procedures could not + * be considered general purpose routines. + * + * Note: the original FORTRAN files were successfully compiled + * by gfortran and served as a benchmark for the converted C code. + */ +/*@{ */ +void proj_lph2xyz(PROJ_PT_LPH * p1, PROJ_PT_XYZ * p2, PROJ_ELLIPS * E); +int proj_xyz2lph(PROJ_PT_XYZ * p1, PROJ_PT_LPH * p2, PROJ_ELLIPS * E); +void proj_in_fwd(PROJ_LINE * A); +void proj_in_inv(PROJ_LINE * A); +/*@}*/ +#endif /* PROJECT_incl */ +/* + * $Log: project.h,v $ + * Revision 1.2 2009/05/17 15:16:34 gie + * corrected list conditional + * + * Revision 1.1 2009/05/15 17:17:28 gie + * Initial revision + * + * Revision 2.7 2009/04/03 19:46:43 gie + * removed *fig.h from project.h + * + * Revision 2.6 2009/04/01 16:07:02 gie + * corrected type_t to size_t --- what details, details, grr. + * + * Revision 2.5 2009/04/01 15:36:00 gie + * added typedefs for PROJ_LP and _XY + * + * Revision 2.4 2009/03/27 20:08:47 gie + * updates regarding proj_casecmp + * + * Revision 2.3 2009/03/20 00:15:29 gie + * minor doxygen control change + * + * Revision 2.2 2009/02/23 22:44:27 gie + * *** empty log message *** + * + * Revision 2.1 2009/02/01 19:27:11 gie + * *** empty log message *** + * + * Revision 1.4 2009/01/09 21:35:23 gie + * some additions + * + * Revision 1.3 2009/01/08 01:48:13 gie + * prep for release + * + * Revision 1.2 2008/12/07 18:55:14 gie + * initial + * + * Revision 1.1 2008/12/03 02:54:58 gie + * Initial revision + * + */ From f4eb4892196009bcdd554c498136829fa578c5c9 Mon Sep 17 00:00:00 2001 From: Jeff Whitaker Date: Tue, 20 Dec 2011 10:05:30 -0700 Subject: [PATCH 07/14] update pyproj, Geod now uses source code in geodesic dir. --- lib/mpl_toolkits/basemap/pyproj.py | 191 +- setup.py | 4 +- src/_geod.c | 2581 +++++++++++----------------- src/_geod.pyx | 230 +-- src/_proj.c | 679 ++++---- src/_proj.pyx | 15 +- src/_pyproj.pxi | 3 + src/geod.c | 245 --- src/geod_for.c | 110 -- src/geod_inv.c | 59 - src/geod_set.c | 133 -- 11 files changed, 1631 insertions(+), 2619 deletions(-) delete mode 100644 src/geod.c delete mode 100644 src/geod_for.c delete mode 100644 src/geod_inv.c delete mode 100644 src/geod_set.c diff --git a/lib/mpl_toolkits/basemap/pyproj.py b/lib/mpl_toolkits/basemap/pyproj.py index 4f599a990..e87c0a372 100644 --- a/lib/mpl_toolkits/basemap/pyproj.py +++ b/lib/mpl_toolkits/basemap/pyproj.py @@ -51,7 +51,7 @@ __version__ = _proj.__version__ set_datapath = _proj.set_datapath from array import array -import os +import os, math #import numpy as np pj_list={ 'aea': "Albers Equal Area", @@ -189,48 +189,48 @@ 'wintri': "Winkel Tripel"} pj_ellps={ -"MERIT": "a=6378137.0 rf=298.257 MERIT 1983", -"SGS85": "a=6378136.0 rf=298.257 Soviet Geodetic System 85", -"GRS80": "a=6378137.0 rf=298.257222101 GRS 1980(IUGG, 1980)", -"IAU76": "a=6378140.0 rf=298.257 IAU 1976", -"airy": "a=6377563.396 b=6356256.910 Airy 1830", -"APL4.9": "a=6378137.0. rf=298.25 Appl. Physics. 1965", -"NWL9D": "a=6378145.0. rf=298.25 Naval Weapons Lab., 1965", -"mod_airy": "a=6377340.189 b=6356034.446 Modified Airy", -"andrae": "a=6377104.43 rf=300.0 Andrae 1876 (Den., Iclnd.)", -"aust_SA": "a=6378160.0 rf=298.25 Australian Natl & S. Amer. 1969", -"GRS67": "a=6378160.0 rf=298.2471674270 GRS 67(IUGG 1967)", -"bessel": "a=6377397.155 rf=299.1528128 Bessel 1841", -"bess_nam": "a=6377483.865 rf=299.1528128 Bessel 1841 (Namibia)", -"clrk66": "a=6378206.4 b=6356583.8 Clarke 1866", -"clrk80": "a=6378249.145 rf=293.4663 Clarke 1880 mod.", -"CPM": "a=6375738.7 rf=334.29 Comm. des Poids et Mesures 1799", -"delmbr": "a=6376428. rf=311.5 Delambre 1810 (Belgium)", -"engelis": "a=6378136.05 rf=298.2566 Engelis 1985", -"evrst30": "a=6377276.345 rf=300.8017 Everest 1830", -"evrst48": "a=6377304.063 rf=300.8017 Everest 1948", -"evrst56": "a=6377301.243 rf=300.8017 Everest 1956", -"evrst69": "a=6377295.664 rf=300.8017 Everest 1969", -"evrstSS": "a=6377298.556 rf=300.8017 Everest (Sabah & Sarawak)", -"fschr60": "a=6378166. rf=298.3 Fischer (Mercury Datum) 1960", -"fschr60m": "a=6378155. rf=298.3 Modified Fischer 1960", -"fschr68": "a=6378150. rf=298.3 Fischer 1968", -"helmert": "a=6378200. rf=298.3 Helmert 1906", -"hough": "a=6378270.0 rf=297. Hough", -"intl": "a=6378388.0 rf=297. International 1909 (Hayford)", -"krass": "a=6378245.0 rf=298.3 Krassovsky, 1942", -"kaula": "a=6378163. rf=298.24 Kaula 1961", -"lerch": "a=6378139. rf=298.257 Lerch 1979", -"mprts": "a=6397300. rf=191. Maupertius 1738", -"new_intl": "a=6378157.5 b=6356772.2 New International 1967", -"plessis": "a=6376523. b=6355863. Plessis 1817 (France)", -"SEasia": "a=6378155.0 b=6356773.3205 Southeast Asia", -"walbeck": "a=6376896.0 b=6355834.8467 Walbeck", -"WGS60": "a=6378165.0 rf=298.3 WGS 60", -"WGS66": "a=6378145.0 rf=298.25 WGS 66", -"WGS72": "a=6378135.0 rf=298.26 WGS 72", -"WGS84": "a=6378137.0 rf=298.257223563 WGS 84", -"sphere": "a=6370997.0 b=6370997.0 Normal Sphere", +"MERIT": {'a':6378137.0,'rf':298.257,'description':"MERIT 1983"}, +"SGS85": {'a':6378136.0,'rf':298.257,'description':"Soviet Geodetic System 85"}, +"GRS80": {'a':6378137.0,'rf':298.257222101,'description':"GRS 1980(IUGG, 1980)"}, +"IAU76": {'a':6378140.0,'rf':298.257,'description':"IAU 1976"}, +"airy": {'a':6377563.396,'b':6356256.910,'description':"Airy 1830"}, +"APL4.9": {'a':6378137.0,'rf':298.25,'description':"Appl. Physics. 1965"}, +"NWL9D": {'a':6378145.0,'rf':298.25,'description':" Naval Weapons Lab., 1965"}, +"mod_airy": {'a':6377340.189,'b':6356034.446,'description':"Modified Airy"}, +"andrae": {'a':6377104.43,'rf':300.0,'description':"Andrae 1876 (Den., Iclnd.)"}, +"aust_SA": {'a':6378160.0,'rf':298.25,'description':"Australian Natl & S. Amer. 1969"}, +"GRS67": {'a':6378160.0,'rf':298.2471674270,'description':"GRS 67(IUGG 1967)"}, +"bessel": {'a':6377397.155,'rf':299.1528128,'description':"Bessel 1841"}, +"bess_nam": {'a':6377483.865,'rf':299.1528128,'description':"Bessel 1841 (Namibia)"}, +"clrk66": {'a':6378206.4,'b':6356583.8,'description':"Clarke 1866"}, +"clrk80": {'a':6378249.145,'rf':293.4663,'description':"Clarke 1880 mod."}, +"CPM": {'a':6375738.7,'rf':334.29,'description':"Comm. des Poids et Mesures 1799"}, +"delmbr": {'a':6376428.,'rf':311.5,'description':"Delambre 1810 (Belgium)"}, +"engelis": {'a':6378136.05,'rf':298.2566,'description':"Engelis 1985"}, +"evrst30": {'a':6377276.345,'rf':300.8017,'description':"Everest 1830"}, +"evrst48": {'a':6377304.063,'rf':300.8017,'description':"Everest 1948"}, +"evrst56": {'a':6377301.243,'rf':300.8017,'description':"Everest 1956"}, +"evrst69": {'a':6377295.664,'rf':300.8017,'description':"Everest 1969"}, +"evrstSS": {'a':6377298.556,'rf':300.8017,'description':"Everest (Sabah & Sarawak)"}, +"fschr60": {'a':6378166.,'rf':298.3,'description':"Fischer (Mercury Datum) 1960"}, +"fschr60m": {'a':6378155.,'rf':298.3,'description':"Modified Fischer 1960"}, +"fschr68": {'a':6378150.,'rf':298.3,'description':"Fischer 1968"}, +"helmert": {'a':6378200.,'rf':298.3,'description':"Helmert 1906"}, +"hough": {'a':6378270.0,'rf':297.,'description':"Hough"}, +"intl": {'a':6378388.0,'rf':297.,'description':"International 1909 (Hayford)"}, +"krass": {'a':6378245.0,'rf':298.3,'description':"Krassovsky, 1942"}, +"kaula": {'a':6378163.,'rf':298.24,'description':"Kaula 1961"}, +"lerch": {'a':6378139.,'rf':298.257,'description':"Lerch 1979"}, +"mprts": {'a':6397300.,'rf':191.,'description':"Maupertius 1738"}, +"new_intl": {'a':6378157.5,'b':6356772.2,'description':"New International 1967"}, +"plessis": {'a':6376523.,'b':6355863.,'description':"Plessis 1817 (France)"}, +"SEasia": {'a':6378155.0,'b':6356773.3205,'description':"Southeast Asia"}, +"walbeck": {'a':6376896.0,'b':6355834.8467,'description':"Walbeck"}, +"WGS60": {'a':6378165.0,'rf':298.3,'description':"WGS 60"}, +"WGS66": {'a':6378145.0,'rf':298.25,'description':"WGS 66"}, +"WGS72": {'a':6378135.0,'rf':298.26,'description':"WGS 72"}, +"WGS84": {'a':6378137.0,'rf':298.257223563,'description':"WGS 84"}, +"sphere": {'a':6370997.0,'b':6370997.0,'description':"Normal Sphere"}, } pyproj_datadir = os.sep.join([os.path.dirname(__file__), 'data']) @@ -564,7 +564,7 @@ class Geod(_geod.Geod): azimuths and distance given the latitudes and longitudes of an initial and terminus point. """ - def __new__(self, initparams=None, **kwargs): + def __new__(self, initstring=None, **kwargs): """ initialize a Geod class instance. @@ -656,49 +656,78 @@ def __new__(self, initparams=None, **kwargs): >>> for faz,baz,d in list(zip(az12,az21,dist)): "%7.3f %7.3f %9.3f" % (faz,baz,d) ' 54.663 -123.448 288303.720' '-65.463 79.342 4013037.318' - ' 51.254 -71.576 5579916.649' + ' 51.254 -71.576 5579916.651' >>> g2 = Geod('+ellps=clrk66') # use proj4 style initialization string >>> az12,az21,dist = g2.inv(boston_lon,boston_lat,portland_lon,portland_lat) >>> "%7.3f %6.3f %12.3f" % (az12,az21,dist) '-66.531 75.654 4164192.708' """ - # if initparams is None, use kwargs. - if initparams is None: - if len(kwargs) == 0: - raise RuntimeError('no ellipsoid control parameters specified') - else: - initstring = _dict2string(kwargs) - elif type(initparams) == str: - # if projparams is a string, interpret as a proj4 init string. - initstring = initparams - else: # projparams a dict - initstring = _dict2string(initparams) - # make sure units are meters. - if not initstring.count('+units='): - initstring = '+units=m '+initstring - else: - kvpairs = [] + # if initparams is a proj-type init string, + # convert to dict. + ellpsd = {} + if initstring is not None: for kvpair in initstring.split(): - if kvpair.startswith('+units'): - k,v = kvpair.split('=') - kvpairs.append(k+'=m ') - else: - kvpairs.append(kvpair+' ') - initstring = ''.join(kvpairs) - # check ellps keyword - for kvpair in initstring.split(): - try: - k,v = kvpair.split('=') - except: - msg="Geod must be specified using dict or kwargs" - raise ValueError(msg) - if k == '+ellps' and v not in pj_ellps: - msg = 'unknown ellps specification - see pj_ellps for options' - raise ValueError(msg) - # first try a Proj class (catches errors properly) - projstring = initstring + ' +proj=latlon' - p = Proj(projstring) # this is never used - return _geod.Geod.__new__(self, initstring) + k,v = kvpair.split('=') + k = k.lstrip('+') + if k in ['a','b','rf','f','es','e']: + v = float(v) + ellpsd[k] = v + # merge this dict with kwargs dict. + kwargs = dict(list(kwargs.items()) + list(ellpsd.items())) + self.sphere = False + if kwargs.has_key('ellps'): + # ellipse name given, look up in pj_ellps dict + ellps_dict = pj_ellps[kwargs['ellps']] + a = ellps_dict['a'] + if ellps_dict['description']=='Normal Sphere': + self.sphere = True + if ellps_dict.has_key('b'): + b = ellps_dict['b'] + es = 1. - (b * b) / (a * a) + f = (a - b)/a + elif ellps_dict.has_key('rf'): + f = 1./ellps_dict['rf'] + b = a*(1. - f) + es = 1. - (b * b) / (a * a) + else: + # a (semi-major axis) and one of + # b the semi-minor axis + # rf the reciprocal flattening + # f flattening + # es eccentricity squared + # must be given. + a = kwargs['a'] + if kwargs.has_key('b'): + b = kwargs['b'] + es = 1. - (b * b) / (a * a) + f = (a - b)/a + elif kwargs.has_key('rf'): + f = 1./kwargs['rf'] + b = a*(1. - f) + es = 1. - (b * b) / (a * a) + elif kwargs.has_key('f'): + f = kwargs['f'] + b = a*(1. - f) + es = 1. - (b/a)**2 + elif kwargs.has_key('es'): + es = kwargs['es'] + b = math.sqrt(a**2 - es*a**2) + f = (a - b)/a + elif kwargs.has_key('e'): + es = kwargs['e']**2 + b = math.sqrt(a**2 - es*a**2) + f = (a - b)/a + else: + b = a + f = 0. + es = 0. + #msg='ellipse name or a, plus one of f,es,b must be given' + #raise ValueError(msg) + if math.fabs(f) < 1.e-8: self.sphere = True + self.a = a + self.f = f + self.es = es + return _geod.Geod.__new__(self,self.a,self.f,self.es,self.sphere) def fwd(self, lons, lats, az, dist, radians=False): """ diff --git a/setup.py b/setup.py index 5eac2f786..00af44d72 100644 --- a/setup.py +++ b/setup.py @@ -67,7 +67,9 @@ def checkversion(GEOS_dir): packages = ['mpl_toolkits','mpl_toolkits.basemap'] package_dirs = {'':'lib'} extensions = [Extension("mpl_toolkits.basemap._proj",deps+['src/_proj.c'],include_dirs = ['src'],)] -extensions.append(Extension("mpl_toolkits.basemap._geod",deps+['src/_geod.c'],include_dirs = ['src'],)) +deps = glob.glob('geodesic/*.c') +extensions.append(Extension("mpl_toolkits.basemap._geod",deps+['src/_geod.c'],\ + include_dirs = ['geodesic'],)) # can't install _geoslib in mpl_toolkits.basemap namespace, # or Basemap objects won't be pickleable. if sys.platform == 'win32': diff --git a/src/_geod.c b/src/_geod.c index 8a096ffc5..e4d8a4576 100644 --- a/src/_geod.c +++ b/src/_geod.c @@ -1,4 +1,4 @@ -/* Generated by Cython 0.15.1 on Fri Dec 16 10:22:37 2011 */ +/* Generated by Cython 0.15.1 on Tue Dec 20 08:28:53 2011 */ #define PY_SSIZE_T_CLEAN #include "Python.h" @@ -232,10 +232,7 @@ #include #define __PYX_HAVE___geod #define __PYX_HAVE_API___geod -#include "stdlib.h" -#include "math.h" -#include "geodesic.h" -#include "proj_api.h" +#include "project.h" #ifdef _OPENMP #include #endif /* _OPENMP */ @@ -319,38 +316,24 @@ static const char *__pyx_filename; static const char *__pyx_f[] = { "_geod.pyx", - "_pyproj.pxi", }; /*--- Type declarations ---*/ struct __pyx_obj_5_geod_Geod; -struct __pyx_opt_args_5_geod__strencode; -/* "_geod.pyx":177 - * return lons, lats - * - * cdef _strencode(pystr,encoding='ascii'): # <<<<<<<<<<<<<< - * # encode a string into bytes. If already bytes, do nothing. - * try: - */ -struct __pyx_opt_args_5_geod__strencode { - int __pyx_n; - PyObject *encoding; -}; - -/* "_geod.pyx":5 - * include "_pyproj.pxi" +/* "_geod.pyx":41 + * void proj_in_inv(PROJ_LINE * A) * * cdef class Geod: # <<<<<<<<<<<<<< - * cdef GEODESIC_T geodesic_t - * cdef public object geodstring + * cdef PROJ_LINE arc + * cdef PROJ_ELLIPS ellps */ struct __pyx_obj_5_geod_Geod { PyObject_HEAD - GEODESIC_T geodesic_t; - PyObject *geodstring; - PyObject *proj_version; - char *geodinitstring; + PROJ_LINE arc; + PROJ_ELLIPS ellps; + PROJ_PT_LPH pt1; + PROJ_PT_LPH pt2; }; @@ -396,24 +379,19 @@ struct __pyx_obj_5_geod_Geod { static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ + static void __Pyx_RaiseDoubleKeywordsError( const char* func_name, PyObject* kw_name); /*proto*/ static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, const char* function_name); /*proto*/ -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ - static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/ -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ - -static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ -static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ - static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level); /*proto*/ static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *); @@ -457,18 +435,21 @@ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ /* Module declarations from '_geod' */ static PyTypeObject *__pyx_ptype_5_geod_Geod = 0; -static PyObject *__pyx_f_5_geod__strencode(PyObject *, struct __pyx_opt_args_5_geod__strencode *__pyx_optional_args); /*proto*/ +static double __pyx_v_5_geod__dg2rad; +static double __pyx_v_5_geod__rad2dg; #define __Pyx_MODULE_NAME "_geod" int __pyx_module_is_main__geod = 0; /* Implementation of '_geod' */ static PyObject *__pyx_builtin_RuntimeError; -static PyObject *__pyx_builtin_ValueError; -static PyObject *__pyx_builtin_AttributeError; -static char __pyx_k_2[] = "Buffer lengths not the same"; -static char __pyx_k_4[] = "undefined inverse geodesic (may be an antipodal point)"; -static char __pyx_k_10[] = "1.9.0"; +static char __pyx_k_1[] = "+a=%s +f=%s +es=%s"; +static char __pyx_k_3[] = "Buffer lengths not the same"; +static char __pyx_k_7[] = "undefined inverse geodesic (may be an antipodal point)"; +static char __pyx_k__a[] = "a"; +static char __pyx_k__f[] = "f"; +static char __pyx_k__v[] = "v"; static char __pyx_k__az[] = "az"; +static char __pyx_k__es[] = "es"; static char __pyx_k__dist[] = "dist"; static char __pyx_k__lat1[] = "lat1"; static char __pyx_k__lat2[] = "lat2"; @@ -478,44 +459,32 @@ static char __pyx_k__lon2[] = "lon2"; static char __pyx_k__lons[] = "lons"; static char __pyx_k__math[] = "math"; static char __pyx_k__npts[] = "npts"; -static char __pyx_k__ascii[] = "ascii"; static char __pyx_k__lats1[] = "lats1"; static char __pyx_k__lats2[] = "lats2"; static char __pyx_k__lons1[] = "lons1"; static char __pyx_k__lons2[] = "lons2"; -static char __pyx_k__encode[] = "encode"; -static char __pyx_k___dg2rad[] = "_dg2rad"; -static char __pyx_k___rad2dg[] = "_rad2dg"; +static char __pyx_k__sphere[] = "sphere"; static char __pyx_k__degrees[] = "degrees"; static char __pyx_k__radians[] = "radians"; static char __pyx_k____main__[] = "__main__"; static char __pyx_k____test__[] = "__test__"; static char __pyx_k____class__[] = "__class__"; -static char __pyx_k__ValueError[] = "ValueError"; -static char __pyx_k__geodstring[] = "geodstring"; -static char __pyx_k____version__[] = "__version__"; static char __pyx_k___doublesize[] = "_doublesize"; static char __pyx_k__RuntimeError[] = "RuntimeError"; -static char __pyx_k__AttributeError[] = "AttributeError"; -static PyObject *__pyx_kp_s_10; -static PyObject *__pyx_kp_s_2; -static PyObject *__pyx_kp_s_4; -static PyObject *__pyx_n_s__AttributeError; +static PyObject *__pyx_kp_s_1; +static PyObject *__pyx_kp_s_3; +static PyObject *__pyx_kp_s_7; static PyObject *__pyx_n_s__RuntimeError; -static PyObject *__pyx_n_s__ValueError; static PyObject *__pyx_n_s____class__; static PyObject *__pyx_n_s____main__; static PyObject *__pyx_n_s____test__; -static PyObject *__pyx_n_s____version__; -static PyObject *__pyx_n_s___dg2rad; static PyObject *__pyx_n_s___doublesize; -static PyObject *__pyx_n_s___rad2dg; -static PyObject *__pyx_n_s__ascii; +static PyObject *__pyx_n_s__a; static PyObject *__pyx_n_s__az; static PyObject *__pyx_n_s__degrees; static PyObject *__pyx_n_s__dist; -static PyObject *__pyx_n_s__encode; -static PyObject *__pyx_n_s__geodstring; +static PyObject *__pyx_n_s__es; +static PyObject *__pyx_n_s__f; static PyObject *__pyx_n_s__lat1; static PyObject *__pyx_n_s__lat2; static PyObject *__pyx_n_s__lats; @@ -529,44 +498,46 @@ static PyObject *__pyx_n_s__lons2; static PyObject *__pyx_n_s__math; static PyObject *__pyx_n_s__npts; static PyObject *__pyx_n_s__radians; -static PyObject *__pyx_k_1; -static PyObject *__pyx_k_6; -static PyObject *__pyx_k_9; -static PyObject *__pyx_k_tuple_3; -static PyObject *__pyx_k_tuple_5; -static PyObject *__pyx_k_tuple_7; -static PyObject *__pyx_k_tuple_8; - -/* "_geod.pyx":11 - * cdef char *geodinitstring +static PyObject *__pyx_n_s__sphere; +static PyObject *__pyx_n_s__v; +static PyObject *__pyx_k_2; +static PyObject *__pyx_k_5; +static PyObject *__pyx_k_8; +static PyObject *__pyx_k_tuple_4; +static PyObject *__pyx_k_tuple_6; + +/* "_geod.pyx":46 + * cdef PROJ_PT_LPH pt1, pt2 * - * def __cinit__(self, geodstring): # <<<<<<<<<<<<<< - * cdef GEODESIC_T GEOD_T - * cdef int err + * def __cinit__(self, object a, object f, object es, object sphere): # <<<<<<<<<<<<<< + * self.sphere = sphere + * self.ellps.a = a */ static int __pyx_pf_5_geod_4Geod___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static int __pyx_pf_5_geod_4Geod___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_geodstring = 0; - GEODESIC_T __pyx_v_GEOD_T; - int __pyx_v_err; - PyObject *__pyx_v_bytestr = NULL; + PyObject *__pyx_v_a = 0; + PyObject *__pyx_v_f = 0; + PyObject *__pyx_v_es = 0; + PyObject *__pyx_v_sphere = 0; int __pyx_r; __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - char *__pyx_t_2; - int __pyx_t_3; - PyObject *__pyx_t_4 = NULL; + double __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__geodstring,0}; + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__f,&__pyx_n_s__es,&__pyx_n_s__sphere,0}; __Pyx_RefNannySetupContext("__cinit__"); { - PyObject* values[1] = {0}; + PyObject* values[4] = {0,0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; switch (PyTuple_GET_SIZE(__pyx_args)) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); case 0: break; default: goto __pyx_L5_argtuple_error; @@ -574,190 +545,207 @@ static int __pyx_pf_5_geod_4Geod___cinit__(PyObject *__pyx_v_self, PyObject *__p kw_args = PyDict_Size(__pyx_kwds); switch (PyTuple_GET_SIZE(__pyx_args)) { case 0: - values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__geodstring); + values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a); if (likely(values[0])) kw_args--; else goto __pyx_L5_argtuple_error; + case 1: + values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__f); + if (likely(values[1])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 2: + values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__es); + if (likely(values[2])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 3: + values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__sphere); + if (likely(values[3])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } - } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { + } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); } - __pyx_v_geodstring = values[0]; + __pyx_v_a = values[0]; + __pyx_v_f = values[1]; + __pyx_v_es = values[2]; + __pyx_v_sphere = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("_geod.Geod.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; - /* "_geod.pyx":15 - * cdef int err - * # setup geod initialization string. - * self.geodstring = geodstring # <<<<<<<<<<<<<< - * bytestr = _strencode(geodstring) - * self.geodinitstring = bytestr - */ - __Pyx_INCREF(__pyx_v_geodstring); - __Pyx_GIVEREF(__pyx_v_geodstring); - __Pyx_GOTREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring); - __Pyx_DECREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring); - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring = __pyx_v_geodstring; - - /* "_geod.pyx":16 - * # setup geod initialization string. - * self.geodstring = geodstring - * bytestr = _strencode(geodstring) # <<<<<<<<<<<<<< - * self.geodinitstring = bytestr - * # initialize projection - */ - __pyx_t_1 = __pyx_f_5_geod__strencode(__pyx_v_geodstring, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_bytestr = __pyx_t_1; - __pyx_t_1 = 0; + /* "_geod.pyx":47 + * + * def __cinit__(self, object a, object f, object es, object sphere): + * self.sphere = sphere # <<<<<<<<<<<<<< + * self.ellps.a = a + * self.ellps.f = f + */ + if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__sphere, __pyx_v_sphere) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + + /* "_geod.pyx":48 + * def __cinit__(self, object a, object f, object es, object sphere): + * self.sphere = sphere + * self.ellps.a = a # <<<<<<<<<<<<<< + * self.ellps.f = f + * self.ellps.es = es + */ + __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_a); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->ellps.a = __pyx_t_1; + + /* "_geod.pyx":49 + * self.sphere = sphere + * self.ellps.a = a + * self.ellps.f = f # <<<<<<<<<<<<<< + * self.ellps.es = es + * self.ellps.one_es = 1.-es + */ + __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_f); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->ellps.f = __pyx_t_1; + + /* "_geod.pyx":50 + * self.ellps.a = a + * self.ellps.f = f + * self.ellps.es = es # <<<<<<<<<<<<<< + * self.ellps.one_es = 1.-es + * self.arc.E = &self.ellps + */ + __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_es); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->ellps.es = __pyx_t_1; - /* "_geod.pyx":17 - * self.geodstring = geodstring - * bytestr = _strencode(geodstring) - * self.geodinitstring = bytestr # <<<<<<<<<<<<<< - * # initialize projection - * self.geodesic_t = GEOD_init_plus(self.geodinitstring, &GEOD_T)[0] - */ - __pyx_t_2 = PyBytes_AsString(__pyx_v_bytestr); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodinitstring = __pyx_t_2; - - /* "_geod.pyx":19 - * self.geodinitstring = bytestr - * # initialize projection - * self.geodesic_t = GEOD_init_plus(self.geodinitstring, &GEOD_T)[0] # <<<<<<<<<<<<<< - * err = pj_ctx_get_errno(pj_get_default_ctx()) - * if err != 0: - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t = (GEOD_init_plus(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodinitstring, (&__pyx_v_GEOD_T))[0]); - - /* "_geod.pyx":20 - * # initialize projection - * self.geodesic_t = GEOD_init_plus(self.geodinitstring, &GEOD_T)[0] - * err = pj_ctx_get_errno(pj_get_default_ctx()) # <<<<<<<<<<<<<< - * if err != 0: - * raise RuntimeError(pj_strerrno(err)) - */ - __pyx_v_err = pj_ctx_get_errno(pj_get_default_ctx()); - - /* "_geod.pyx":21 - * self.geodesic_t = GEOD_init_plus(self.geodinitstring, &GEOD_T)[0] - * err = pj_ctx_get_errno(pj_get_default_ctx()) - * if err != 0: # <<<<<<<<<<<<<< - * raise RuntimeError(pj_strerrno(err)) - * self.proj_version = PJ_VERSION/100. - */ - __pyx_t_3 = (__pyx_v_err != 0); - if (__pyx_t_3) { - - /* "_geod.pyx":22 - * err = pj_ctx_get_errno(pj_get_default_ctx()) - * if err != 0: - * raise RuntimeError(pj_strerrno(err)) # <<<<<<<<<<<<<< - * self.proj_version = PJ_VERSION/100. + /* "_geod.pyx":51 + * self.ellps.f = f + * self.ellps.es = es + * self.ellps.one_es = 1.-es # <<<<<<<<<<<<<< + * self.arc.E = &self.ellps * */ - __pyx_t_1 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_1)); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_1)); - __Pyx_GIVEREF(((PyObject *)__pyx_t_1)); - __pyx_t_1 = 0; - __pyx_t_1 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L6; - } - __pyx_L6:; + __pyx_t_2 = PyFloat_FromDouble(1.); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Subtract(__pyx_t_2, __pyx_v_es); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->ellps.one_es = __pyx_t_1; - /* "_geod.pyx":23 - * if err != 0: - * raise RuntimeError(pj_strerrno(err)) - * self.proj_version = PJ_VERSION/100. # <<<<<<<<<<<<<< + /* "_geod.pyx":52 + * self.ellps.es = es + * self.ellps.one_es = 1.-es + * self.arc.E = &self.ellps # <<<<<<<<<<<<<< * * def __reduce__(self): */ - __pyx_t_1 = PyFloat_FromDouble((PJ_VERSION / 100.)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->proj_version); - __Pyx_DECREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->proj_version); - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->proj_version = __pyx_t_1; - __pyx_t_1 = 0; + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.E = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->ellps); __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("_geod.Geod.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - __Pyx_XDECREF(__pyx_v_bytestr); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "_geod.pyx":25 - * self.proj_version = PJ_VERSION/100. +/* "_geod.pyx":54 + * self.arc.E = &self.ellps * * def __reduce__(self): # <<<<<<<<<<<<<< * """special method that allows pyproj.Geod instance to be pickled""" - * return (self.__class__,(self.geodstring,)) + * initstring = '+a=%s +f=%s +es=%s' % (self.a, self.f, self.es) */ static PyObject *__pyx_pf_5_geod_4Geod_1__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static char __pyx_doc_5_geod_4Geod_1__reduce__[] = "special method that allows pyproj.Geod instance to be pickled"; static PyObject *__pyx_pf_5_geod_4Geod_1__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_v_initstring = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__reduce__"); - /* "_geod.pyx":27 + /* "_geod.pyx":56 * def __reduce__(self): * """special method that allows pyproj.Geod instance to be pickled""" - * return (self.__class__,(self.geodstring,)) # <<<<<<<<<<<<<< + * initstring = '+a=%s +f=%s +es=%s' % (self.a, self.f, self.es) # <<<<<<<<<<<<<< + * return (self.__class__,(initstring,)) * - * def _fwd(self, object lons, object lats, object az, object dist, radians=False): */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__a); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_2)); - __Pyx_INCREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring); - PyTuple_SET_ITEM(__pyx_t_2, 0, ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring); - __Pyx_GIVEREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring); - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_3)); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__f); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__es); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_t_2)); - __Pyx_GIVEREF(((PyObject *)__pyx_t_2)); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); __pyx_t_1 = 0; __pyx_t_2 = 0; - __pyx_r = ((PyObject *)__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_1), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; + __pyx_v_initstring = ((PyObject *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "_geod.pyx":57 + * """special method that allows pyproj.Geod instance to be pickled""" + * initstring = '+a=%s +f=%s +es=%s' % (self.a, self.f, self.es) + * return (self.__class__,(initstring,)) # <<<<<<<<<<<<<< + * + * def _fwd(self, lons, lats, az, dist, radians=False): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s____class__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); + __Pyx_INCREF(__pyx_v_initstring); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_initstring); + __Pyx_GIVEREF(__pyx_v_initstring); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_2)); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_t_4)); + __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_r = ((PyObject *)__pyx_t_2); + __pyx_t_2 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); @@ -766,24 +754,25 @@ static PyObject *__pyx_pf_5_geod_4Geod_1__reduce__(PyObject *__pyx_v_self, CYTHO __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("_geod.Geod.__reduce__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; + __Pyx_XDECREF(__pyx_v_initstring); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "_geod.pyx":29 - * return (self.__class__,(self.geodstring,)) +/* "_geod.pyx":59 + * return (self.__class__,(initstring,)) * - * def _fwd(self, object lons, object lats, object az, object dist, radians=False): # <<<<<<<<<<<<<< - * """ - * forward transformation - determine longitude, latitude and back azimuth + * def _fwd(self, lons, lats, az, dist, radians=False): # <<<<<<<<<<<<<< + * cdef Py_ssize_t buflenlons, buflenlats, buflenaz, buflend, ndim, i + * cdef double *lonsdata, *latsdata, *azdata, *distdata */ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_5_geod_4Geod_2_fwd[] = "\n forward transformation - determine longitude, latitude and back azimuth \n of a terminus point given an initial point longitude and latitude, plus\n forward azimuth and distance.\n if radians=True, lons/lats are radians instead of degrees.\n "; static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_lons = 0; PyObject *__pyx_v_lats = 0; @@ -804,7 +793,6 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ void *__pyx_v_latdata; void *__pyx_v_azdat; void *__pyx_v_distdat; - int __pyx_v_err; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; @@ -813,7 +801,6 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; Py_ssize_t __pyx_t_6; - double __pyx_t_7; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -821,7 +808,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ __Pyx_RefNannySetupContext("_fwd"); { PyObject* values[5] = {0,0,0,0,0}; - values[4] = __pyx_k_1; + values[4] = __pyx_k_2; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; switch (PyTuple_GET_SIZE(__pyx_args)) { @@ -843,19 +830,19 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lats); if (likely(values[1])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__az); if (likely(values[2])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dist); if (likely(values[3])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 4: if (kw_args > 0) { @@ -864,7 +851,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_fwd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_fwd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { @@ -885,14 +872,14 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("_geod.Geod._fwd", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - /* "_geod.pyx":41 + /* "_geod.pyx":65 * cdef int err * # if buffer api is supported, get pointer to data buffers. * if PyObject_AsWriteBuffer(lons, &londata, &buflenlons) <> 0: # <<<<<<<<<<<<<< @@ -902,7 +889,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lons, (&__pyx_v_londata), (&__pyx_v_buflenlons)) != 0); if (__pyx_t_1) { - /* "_geod.pyx":42 + /* "_geod.pyx":66 * # if buffer api is supported, get pointer to data buffers. * if PyObject_AsWriteBuffer(lons, &londata, &buflenlons) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -910,12 +897,12 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ * raise RuntimeError */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; - /* "_geod.pyx":43 + /* "_geod.pyx":67 * if PyObject_AsWriteBuffer(lons, &londata, &buflenlons) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(lats, &latdata, &buflenlats) <> 0: # <<<<<<<<<<<<<< @@ -925,7 +912,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lats, (&__pyx_v_latdata), (&__pyx_v_buflenlats)) != 0); if (__pyx_t_1) { - /* "_geod.pyx":44 + /* "_geod.pyx":68 * raise RuntimeError * if PyObject_AsWriteBuffer(lats, &latdata, &buflenlats) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -933,12 +920,12 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ * raise RuntimeError */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L7; } __pyx_L7:; - /* "_geod.pyx":45 + /* "_geod.pyx":69 * if PyObject_AsWriteBuffer(lats, &latdata, &buflenlats) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(az, &azdat, &buflenaz) <> 0: # <<<<<<<<<<<<<< @@ -948,7 +935,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_az, (&__pyx_v_azdat), (&__pyx_v_buflenaz)) != 0); if (__pyx_t_1) { - /* "_geod.pyx":46 + /* "_geod.pyx":70 * raise RuntimeError * if PyObject_AsWriteBuffer(az, &azdat, &buflenaz) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -956,12 +943,12 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ * raise RuntimeError */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L8; } __pyx_L8:; - /* "_geod.pyx":47 + /* "_geod.pyx":71 * if PyObject_AsWriteBuffer(az, &azdat, &buflenaz) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(dist, &distdat, &buflend) <> 0: # <<<<<<<<<<<<<< @@ -971,7 +958,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_dist, (&__pyx_v_distdat), (&__pyx_v_buflend)) != 0); if (__pyx_t_1) { - /* "_geod.pyx":48 + /* "_geod.pyx":72 * raise RuntimeError * if PyObject_AsWriteBuffer(dist, &distdat, &buflend) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -979,12 +966,12 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ * if not buflenlons == buflenlats == buflenaz == buflend: */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L9; } __pyx_L9:; - /* "_geod.pyx":50 + /* "_geod.pyx":74 * raise RuntimeError * # process data in buffer * if not buflenlons == buflenlats == buflenaz == buflend: # <<<<<<<<<<<<<< @@ -1001,42 +988,42 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { - /* "_geod.pyx":51 + /* "_geod.pyx":75 * # process data in buffer * if not buflenlons == buflenlats == buflenaz == buflend: * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< * ndim = buflenlons//_doublesize * lonsdata = londata */ - __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_3), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L10; } __pyx_L10:; - /* "_geod.pyx":52 + /* "_geod.pyx":76 * if not buflenlons == buflenlats == buflenaz == buflend: * raise RuntimeError("Buffer lengths not the same") * ndim = buflenlons//_doublesize # <<<<<<<<<<<<<< * lonsdata = londata * latsdata = latdata */ - __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_buflenlons); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_buflenlons); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyNumber_FloorDivide(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = PyNumber_FloorDivide(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_ndim = __pyx_t_6; - /* "_geod.pyx":53 + /* "_geod.pyx":77 * raise RuntimeError("Buffer lengths not the same") * ndim = buflenlons//_doublesize * lonsdata = londata # <<<<<<<<<<<<<< @@ -1045,7 +1032,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_lonsdata = ((double *)__pyx_v_londata); - /* "_geod.pyx":54 + /* "_geod.pyx":78 * ndim = buflenlons//_doublesize * lonsdata = londata * latsdata = latdata # <<<<<<<<<<<<<< @@ -1054,7 +1041,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_latsdata = ((double *)__pyx_v_latdata); - /* "_geod.pyx":55 + /* "_geod.pyx":79 * lonsdata = londata * latsdata = latdata * azdata = azdat # <<<<<<<<<<<<<< @@ -1063,7 +1050,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_azdata = ((double *)__pyx_v_azdat); - /* "_geod.pyx":56 + /* "_geod.pyx":80 * latsdata = latdata * azdata = azdat * distdata = distdat # <<<<<<<<<<<<<< @@ -1072,361 +1059,279 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_distdata = ((double *)__pyx_v_distdat); - /* "_geod.pyx":57 + /* "_geod.pyx":81 * azdata = azdat * distdata = distdat * for i from 0 <= i < ndim: # <<<<<<<<<<<<<< * if radians: - * self.geodesic_t.p1.v = lonsdata[i] + * self.pt1.lam = lonsdata[i] */ __pyx_t_6 = __pyx_v_ndim; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) { - /* "_geod.pyx":58 + /* "_geod.pyx":82 * distdata = distdat * for i from 0 <= i < ndim: * if radians: # <<<<<<<<<<<<<< - * self.geodesic_t.p1.v = lonsdata[i] - * self.geodesic_t.p1.u = latsdata[i] + * self.pt1.lam = lonsdata[i] + * self.pt1.phi = latsdata[i] */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_2) { - /* "_geod.pyx":59 + /* "_geod.pyx":83 * for i from 0 <= i < ndim: * if radians: - * self.geodesic_t.p1.v = lonsdata[i] # <<<<<<<<<<<<<< - * self.geodesic_t.p1.u = latsdata[i] - * self.geodesic_t.ALPHA12 = azdata[i] + * self.pt1.lam = lonsdata[i] # <<<<<<<<<<<<<< + * self.pt1.phi = latsdata[i] + * self.pt1.h = 0. */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.v = (__pyx_v_lonsdata[__pyx_v_i]); + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.lam = (__pyx_v_lonsdata[__pyx_v_i]); - /* "_geod.pyx":60 + /* "_geod.pyx":84 * if radians: - * self.geodesic_t.p1.v = lonsdata[i] - * self.geodesic_t.p1.u = latsdata[i] # <<<<<<<<<<<<<< - * self.geodesic_t.ALPHA12 = azdata[i] - * self.geodesic_t.DIST = distdata[i] - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.u = (__pyx_v_latsdata[__pyx_v_i]); - - /* "_geod.pyx":61 - * self.geodesic_t.p1.v = lonsdata[i] - * self.geodesic_t.p1.u = latsdata[i] - * self.geodesic_t.ALPHA12 = azdata[i] # <<<<<<<<<<<<<< - * self.geodesic_t.DIST = distdata[i] + * self.pt1.lam = lonsdata[i] + * self.pt1.phi = latsdata[i] # <<<<<<<<<<<<<< + * self.pt1.h = 0. + * self.arc.pt1 = &self.pt1 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.phi = (__pyx_v_latsdata[__pyx_v_i]); + + /* "_geod.pyx":85 + * self.pt1.lam = lonsdata[i] + * self.pt1.phi = latsdata[i] + * self.pt1.h = 0. # <<<<<<<<<<<<<< + * self.arc.pt1 = &self.pt1 + * self.arc.az12 = azdata[i] + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.h = 0.; + + /* "_geod.pyx":86 + * self.pt1.phi = latsdata[i] + * self.pt1.h = 0. + * self.arc.pt1 = &self.pt1 # <<<<<<<<<<<<<< + * self.arc.az12 = azdata[i] + * self.arc.S = distdata[i] + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt1 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1); + + /* "_geod.pyx":87 + * self.pt1.h = 0. + * self.arc.pt1 = &self.pt1 + * self.arc.az12 = azdata[i] # <<<<<<<<<<<<<< + * self.arc.S = distdata[i] * else: */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA12 = (__pyx_v_azdata[__pyx_v_i]); + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az12 = (__pyx_v_azdata[__pyx_v_i]); - /* "_geod.pyx":62 - * self.geodesic_t.p1.u = latsdata[i] - * self.geodesic_t.ALPHA12 = azdata[i] - * self.geodesic_t.DIST = distdata[i] # <<<<<<<<<<<<<< + /* "_geod.pyx":88 + * self.arc.pt1 = &self.pt1 + * self.arc.az12 = azdata[i] + * self.arc.S = distdata[i] # <<<<<<<<<<<<<< * else: - * self.geodesic_t.p1.v = _dg2rad*lonsdata[i] + * self.pt1.lam = _dg2rad*lonsdata[i] */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.DIST = (__pyx_v_distdata[__pyx_v_i]); + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.S = (__pyx_v_distdata[__pyx_v_i]); goto __pyx_L13; } /*else*/ { - /* "_geod.pyx":64 - * self.geodesic_t.DIST = distdata[i] + /* "_geod.pyx":90 + * self.arc.S = distdata[i] * else: - * self.geodesic_t.p1.v = _dg2rad*lonsdata[i] # <<<<<<<<<<<<<< - * self.geodesic_t.p1.u = _dg2rad*latsdata[i] - * self.geodesic_t.ALPHA12 = _dg2rad*azdata[i] + * self.pt1.lam = _dg2rad*lonsdata[i] # <<<<<<<<<<<<<< + * self.pt1.phi = _dg2rad*latsdata[i] + * self.pt1.h = 0. */ - __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyFloat_FromDouble((__pyx_v_lonsdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.v = __pyx_t_7; - - /* "_geod.pyx":65 + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.lam = (__pyx_v_5_geod__dg2rad * (__pyx_v_lonsdata[__pyx_v_i])); + + /* "_geod.pyx":91 * else: - * self.geodesic_t.p1.v = _dg2rad*lonsdata[i] - * self.geodesic_t.p1.u = _dg2rad*latsdata[i] # <<<<<<<<<<<<<< - * self.geodesic_t.ALPHA12 = _dg2rad*azdata[i] - * self.geodesic_t.DIST = distdata[i] - */ - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyFloat_FromDouble((__pyx_v_latsdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.u = __pyx_t_7; - - /* "_geod.pyx":66 - * self.geodesic_t.p1.v = _dg2rad*lonsdata[i] - * self.geodesic_t.p1.u = _dg2rad*latsdata[i] - * self.geodesic_t.ALPHA12 = _dg2rad*azdata[i] # <<<<<<<<<<<<<< - * self.geodesic_t.DIST = distdata[i] - * geod_pre(&self.geodesic_t) - */ - __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyFloat_FromDouble((__pyx_v_azdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA12 = __pyx_t_7; - - /* "_geod.pyx":67 - * self.geodesic_t.p1.u = _dg2rad*latsdata[i] - * self.geodesic_t.ALPHA12 = _dg2rad*azdata[i] - * self.geodesic_t.DIST = distdata[i] # <<<<<<<<<<<<<< - * geod_pre(&self.geodesic_t) - * err = pj_ctx_get_errno(pj_get_default_ctx()) - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.DIST = (__pyx_v_distdata[__pyx_v_i]); + * self.pt1.lam = _dg2rad*lonsdata[i] + * self.pt1.phi = _dg2rad*latsdata[i] # <<<<<<<<<<<<<< + * self.pt1.h = 0. + * self.arc.pt1 = &self.pt1 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.phi = (__pyx_v_5_geod__dg2rad * (__pyx_v_latsdata[__pyx_v_i])); + + /* "_geod.pyx":92 + * self.pt1.lam = _dg2rad*lonsdata[i] + * self.pt1.phi = _dg2rad*latsdata[i] + * self.pt1.h = 0. # <<<<<<<<<<<<<< + * self.arc.pt1 = &self.pt1 + * self.arc.az12 = _dg2rad*azdata[i] + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.h = 0.; + + /* "_geod.pyx":93 + * self.pt1.phi = _dg2rad*latsdata[i] + * self.pt1.h = 0. + * self.arc.pt1 = &self.pt1 # <<<<<<<<<<<<<< + * self.arc.az12 = _dg2rad*azdata[i] + * self.arc.S = distdata[i] + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt1 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1); + + /* "_geod.pyx":94 + * self.pt1.h = 0. + * self.arc.pt1 = &self.pt1 + * self.arc.az12 = _dg2rad*azdata[i] # <<<<<<<<<<<<<< + * self.arc.S = distdata[i] + * # Computes the location of the second point in the structure + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az12 = (__pyx_v_5_geod__dg2rad * (__pyx_v_azdata[__pyx_v_i])); + + /* "_geod.pyx":95 + * self.arc.pt1 = &self.pt1 + * self.arc.az12 = _dg2rad*azdata[i] + * self.arc.S = distdata[i] # <<<<<<<<<<<<<< + * # Computes the location of the second point in the structure + * # based on the first point's location and the distance and + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.S = (__pyx_v_distdata[__pyx_v_i]); } __pyx_L13:; - /* "_geod.pyx":68 - * self.geodesic_t.ALPHA12 = _dg2rad*azdata[i] - * self.geodesic_t.DIST = distdata[i] - * geod_pre(&self.geodesic_t) # <<<<<<<<<<<<<< - * err = pj_ctx_get_errno(pj_get_default_ctx()) - * if err != 0: - */ - geod_pre((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t)); - - /* "_geod.pyx":69 - * self.geodesic_t.DIST = distdata[i] - * geod_pre(&self.geodesic_t) - * err = pj_ctx_get_errno(pj_get_default_ctx()) # <<<<<<<<<<<<<< - * if err != 0: - * raise RuntimeError(pj_strerrno(err)) - */ - __pyx_v_err = pj_ctx_get_errno(pj_get_default_ctx()); - - /* "_geod.pyx":70 - * geod_pre(&self.geodesic_t) - * err = pj_ctx_get_errno(pj_get_default_ctx()) - * if err != 0: # <<<<<<<<<<<<<< - * raise RuntimeError(pj_strerrno(err)) - * geod_for(&self.geodesic_t) + /* "_geod.pyx":99 + * # based on the first point's location and the distance and + * # forward azumuth + * if self.sphere: # <<<<<<<<<<<<<< + * proj_sp_fwd(&self.arc) + * else: */ - __pyx_t_2 = (__pyx_v_err != 0); + __pyx_t_5 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__sphere); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_2) { - /* "_geod.pyx":71 - * err = pj_ctx_get_errno(pj_get_default_ctx()) - * if err != 0: - * raise RuntimeError(pj_strerrno(err)) # <<<<<<<<<<<<<< - * geod_for(&self.geodesic_t) - * err = pj_ctx_get_errno(pj_get_default_ctx()) + /* "_geod.pyx":100 + * # forward azumuth + * if self.sphere: + * proj_sp_fwd(&self.arc) # <<<<<<<<<<<<<< + * else: + * proj_in_fwd(&self.arc) */ - __pyx_t_3 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_3)); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_3)); - __Pyx_GIVEREF(((PyObject *)__pyx_t_3)); - __pyx_t_3 = 0; - __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + proj_sp_fwd((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); goto __pyx_L14; } - __pyx_L14:; - - /* "_geod.pyx":72 - * if err != 0: - * raise RuntimeError(pj_strerrno(err)) - * geod_for(&self.geodesic_t) # <<<<<<<<<<<<<< - * err = pj_ctx_get_errno(pj_get_default_ctx()) - * if err != 0: - */ - geod_for((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t)); - - /* "_geod.pyx":73 - * raise RuntimeError(pj_strerrno(err)) - * geod_for(&self.geodesic_t) - * err = pj_ctx_get_errno(pj_get_default_ctx()) # <<<<<<<<<<<<<< - * if err != 0: - * raise RuntimeError(pj_strerrno(err)) - */ - __pyx_v_err = pj_ctx_get_errno(pj_get_default_ctx()); - - /* "_geod.pyx":74 - * geod_for(&self.geodesic_t) - * err = pj_ctx_get_errno(pj_get_default_ctx()) - * if err != 0: # <<<<<<<<<<<<<< - * raise RuntimeError(pj_strerrno(err)) - * # check for NaN. - */ - __pyx_t_2 = (__pyx_v_err != 0); - if (__pyx_t_2) { - - /* "_geod.pyx":75 - * err = pj_ctx_get_errno(pj_get_default_ctx()) - * if err != 0: - * raise RuntimeError(pj_strerrno(err)) # <<<<<<<<<<<<<< - * # check for NaN. - * if self.geodesic_t.ALPHA21 != self.geodesic_t.ALPHA21: - */ - __pyx_t_3 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_3)); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_3)); - __Pyx_GIVEREF(((PyObject *)__pyx_t_3)); - __pyx_t_3 = 0; - __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L15; - } - __pyx_L15:; + /*else*/ { - /* "_geod.pyx":77 - * raise RuntimeError(pj_strerrno(err)) - * # check for NaN. - * if self.geodesic_t.ALPHA21 != self.geodesic_t.ALPHA21: # <<<<<<<<<<<<<< - * raise ValueError('undefined inverse geodesic (may be an antipodal point)') + /* "_geod.pyx":102 + * proj_sp_fwd(&self.arc) + * else: + * proj_in_fwd(&self.arc) # <<<<<<<<<<<<<< * if radians: + * self.pt2.lam = self.arc.pt2.lam */ - __pyx_t_2 = (((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA21 != ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA21); - if (__pyx_t_2) { - - /* "_geod.pyx":78 - * # check for NaN. - * if self.geodesic_t.ALPHA21 != self.geodesic_t.ALPHA21: - * raise ValueError('undefined inverse geodesic (may be an antipodal point)') # <<<<<<<<<<<<<< - * if radians: - * lonsdata[i] = self.geodesic_t.p2.v - */ - __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_5), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L16; + proj_in_fwd((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); } - __pyx_L16:; + __pyx_L14:; - /* "_geod.pyx":79 - * if self.geodesic_t.ALPHA21 != self.geodesic_t.ALPHA21: - * raise ValueError('undefined inverse geodesic (may be an antipodal point)') + /* "_geod.pyx":103 + * else: + * proj_in_fwd(&self.arc) * if radians: # <<<<<<<<<<<<<< - * lonsdata[i] = self.geodesic_t.p2.v - * latsdata[i] = self.geodesic_t.p2.u + * self.pt2.lam = self.arc.pt2.lam + * self.pt2.phi = self.arc.pt2.phi */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_2) { - /* "_geod.pyx":80 - * raise ValueError('undefined inverse geodesic (may be an antipodal point)') + /* "_geod.pyx":104 + * proj_in_fwd(&self.arc) * if radians: - * lonsdata[i] = self.geodesic_t.p2.v # <<<<<<<<<<<<<< - * latsdata[i] = self.geodesic_t.p2.u - * azdata[i] = self.geodesic_t.ALPHA21 + * self.pt2.lam = self.arc.pt2.lam # <<<<<<<<<<<<<< + * self.pt2.phi = self.arc.pt2.phi + * lonsdata[i] = self.pt2.lam */ - (__pyx_v_lonsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v; + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2->lam; - /* "_geod.pyx":81 + /* "_geod.pyx":105 * if radians: - * lonsdata[i] = self.geodesic_t.p2.v - * latsdata[i] = self.geodesic_t.p2.u # <<<<<<<<<<<<<< - * azdata[i] = self.geodesic_t.ALPHA21 + * self.pt2.lam = self.arc.pt2.lam + * self.pt2.phi = self.arc.pt2.phi # <<<<<<<<<<<<<< + * lonsdata[i] = self.pt2.lam + * latsdata[i] = self.pt2.phi + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2->phi; + + /* "_geod.pyx":106 + * self.pt2.lam = self.arc.pt2.lam + * self.pt2.phi = self.arc.pt2.phi + * lonsdata[i] = self.pt2.lam # <<<<<<<<<<<<<< + * latsdata[i] = self.pt2.phi + * azdata[i] = self.arc.az21 + */ + (__pyx_v_lonsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam; + + /* "_geod.pyx":107 + * self.pt2.phi = self.arc.pt2.phi + * lonsdata[i] = self.pt2.lam + * latsdata[i] = self.pt2.phi # <<<<<<<<<<<<<< + * azdata[i] = self.arc.az21 * else: */ - (__pyx_v_latsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.u; + (__pyx_v_latsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi; - /* "_geod.pyx":82 - * lonsdata[i] = self.geodesic_t.p2.v - * latsdata[i] = self.geodesic_t.p2.u - * azdata[i] = self.geodesic_t.ALPHA21 # <<<<<<<<<<<<<< + /* "_geod.pyx":108 + * lonsdata[i] = self.pt2.lam + * latsdata[i] = self.pt2.phi + * azdata[i] = self.arc.az21 # <<<<<<<<<<<<<< * else: - * lonsdata[i] = _rad2dg*self.geodesic_t.p2.v + * self.pt2.lam = _rad2dg*self.arc.pt2.lam */ - (__pyx_v_azdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA21; - goto __pyx_L17; + (__pyx_v_azdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az21; + goto __pyx_L15; } /*else*/ { - /* "_geod.pyx":84 - * azdata[i] = self.geodesic_t.ALPHA21 + /* "_geod.pyx":110 + * azdata[i] = self.arc.az21 * else: - * lonsdata[i] = _rad2dg*self.geodesic_t.p2.v # <<<<<<<<<<<<<< - * latsdata[i] = _rad2dg*self.geodesic_t.p2.u - * azdata[i] = _rad2dg*self.geodesic_t.ALPHA21 + * self.pt2.lam = _rad2dg*self.arc.pt2.lam # <<<<<<<<<<<<<< + * self.pt2.phi = _rad2dg*self.arc.pt2.phi + * lonsdata[i] = self.pt2.lam */ - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - (__pyx_v_lonsdata[__pyx_v_i]) = __pyx_t_7; + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam = (__pyx_v_5_geod__rad2dg * ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2->lam); - /* "_geod.pyx":85 + /* "_geod.pyx":111 * else: - * lonsdata[i] = _rad2dg*self.geodesic_t.p2.v - * latsdata[i] = _rad2dg*self.geodesic_t.p2.u # <<<<<<<<<<<<<< - * azdata[i] = _rad2dg*self.geodesic_t.ALPHA21 + * self.pt2.lam = _rad2dg*self.arc.pt2.lam + * self.pt2.phi = _rad2dg*self.arc.pt2.phi # <<<<<<<<<<<<<< + * lonsdata[i] = self.pt2.lam + * latsdata[i] = self.pt2.phi + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi = (__pyx_v_5_geod__rad2dg * ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2->phi); + + /* "_geod.pyx":112 + * self.pt2.lam = _rad2dg*self.arc.pt2.lam + * self.pt2.phi = _rad2dg*self.arc.pt2.phi + * lonsdata[i] = self.pt2.lam # <<<<<<<<<<<<<< + * latsdata[i] = self.pt2.phi + * azdata[i] = _rad2dg*self.arc.az21 + */ + (__pyx_v_lonsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam; + + /* "_geod.pyx":113 + * self.pt2.phi = _rad2dg*self.arc.pt2.phi + * lonsdata[i] = self.pt2.lam + * latsdata[i] = self.pt2.phi # <<<<<<<<<<<<<< + * azdata[i] = _rad2dg*self.arc.az21 * */ - __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.u); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - (__pyx_v_latsdata[__pyx_v_i]) = __pyx_t_7; + (__pyx_v_latsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi; - /* "_geod.pyx":86 - * lonsdata[i] = _rad2dg*self.geodesic_t.p2.v - * latsdata[i] = _rad2dg*self.geodesic_t.p2.u - * azdata[i] = _rad2dg*self.geodesic_t.ALPHA21 # <<<<<<<<<<<<<< + /* "_geod.pyx":114 + * lonsdata[i] = self.pt2.lam + * latsdata[i] = self.pt2.phi + * azdata[i] = _rad2dg*self.arc.az21 # <<<<<<<<<<<<<< * * def _inv(self, object lons1, object lats1, object lons2, object lats2, radians=False): */ - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA21); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - (__pyx_v_azdata[__pyx_v_i]) = __pyx_t_7; + (__pyx_v_azdata[__pyx_v_i]) = (__pyx_v_5_geod__rad2dg * ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az21); } - __pyx_L17:; + __pyx_L15:; } __pyx_r = Py_None; __Pyx_INCREF(Py_None); @@ -1443,8 +1348,8 @@ static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *_ return __pyx_r; } -/* "_geod.pyx":88 - * azdata[i] = _rad2dg*self.geodesic_t.ALPHA21 +/* "_geod.pyx":116 + * azdata[i] = _rad2dg*self.arc.az21 * * def _inv(self, object lons1, object lats1, object lons2, object lats2, radians=False): # <<<<<<<<<<<<<< * """ @@ -1473,7 +1378,6 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ void *__pyx_v_latdata; void *__pyx_v_azdat; void *__pyx_v_distdat; - int __pyx_v_err; PyObject *__pyx_v_errmsg = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations @@ -1483,7 +1387,6 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; Py_ssize_t __pyx_t_6; - double __pyx_t_7; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -1491,7 +1394,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ __Pyx_RefNannySetupContext("_inv"); { PyObject* values[5] = {0,0,0,0,0}; - values[4] = __pyx_k_6; + values[4] = __pyx_k_5; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; switch (PyTuple_GET_SIZE(__pyx_args)) { @@ -1513,19 +1416,19 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lats1); if (likely(values[1])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lons2); if (likely(values[2])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lats2); if (likely(values[3])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 4: if (kw_args > 0) { @@ -1534,7 +1437,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_inv") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_inv") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { @@ -1555,14 +1458,14 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("_geod.Geod._inv", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - /* "_geod.pyx":99 + /* "_geod.pyx":127 * cdef int err * # if buffer api is supported, get pointer to data buffers. * if PyObject_AsWriteBuffer(lons1, &londata, &buflenlons) <> 0: # <<<<<<<<<<<<<< @@ -1572,7 +1475,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lons1, (&__pyx_v_londata), (&__pyx_v_buflenlons)) != 0); if (__pyx_t_1) { - /* "_geod.pyx":100 + /* "_geod.pyx":128 * # if buffer api is supported, get pointer to data buffers. * if PyObject_AsWriteBuffer(lons1, &londata, &buflenlons) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -1580,12 +1483,12 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ * raise RuntimeError */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; - /* "_geod.pyx":101 + /* "_geod.pyx":129 * if PyObject_AsWriteBuffer(lons1, &londata, &buflenlons) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(lats1, &latdata, &buflenlats) <> 0: # <<<<<<<<<<<<<< @@ -1595,7 +1498,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lats1, (&__pyx_v_latdata), (&__pyx_v_buflenlats)) != 0); if (__pyx_t_1) { - /* "_geod.pyx":102 + /* "_geod.pyx":130 * raise RuntimeError * if PyObject_AsWriteBuffer(lats1, &latdata, &buflenlats) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -1603,12 +1506,12 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ * raise RuntimeError */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L7; } __pyx_L7:; - /* "_geod.pyx":103 + /* "_geod.pyx":131 * if PyObject_AsWriteBuffer(lats1, &latdata, &buflenlats) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(lons2, &azdat, &buflenaz) <> 0: # <<<<<<<<<<<<<< @@ -1618,7 +1521,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lons2, (&__pyx_v_azdat), (&__pyx_v_buflenaz)) != 0); if (__pyx_t_1) { - /* "_geod.pyx":104 + /* "_geod.pyx":132 * raise RuntimeError * if PyObject_AsWriteBuffer(lons2, &azdat, &buflenaz) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -1626,12 +1529,12 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ * raise RuntimeError */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L8; } __pyx_L8:; - /* "_geod.pyx":105 + /* "_geod.pyx":133 * if PyObject_AsWriteBuffer(lons2, &azdat, &buflenaz) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(lats2, &distdat, &buflend) <> 0: # <<<<<<<<<<<<<< @@ -1641,7 +1544,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lats2, (&__pyx_v_distdat), (&__pyx_v_buflend)) != 0); if (__pyx_t_1) { - /* "_geod.pyx":106 + /* "_geod.pyx":134 * raise RuntimeError * if PyObject_AsWriteBuffer(lats2, &distdat, &buflend) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -1649,12 +1552,12 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ * if not buflenlons == buflenlats == buflenaz == buflend: */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L9; } __pyx_L9:; - /* "_geod.pyx":108 + /* "_geod.pyx":136 * raise RuntimeError * # process data in buffer * if not buflenlons == buflenlats == buflenaz == buflend: # <<<<<<<<<<<<<< @@ -1671,42 +1574,42 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { - /* "_geod.pyx":109 + /* "_geod.pyx":137 * # process data in buffer * if not buflenlons == buflenlats == buflenaz == buflend: * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< * ndim = buflenlons//_doublesize * lonsdata = londata */ - __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_7), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_6), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L10; } __pyx_L10:; - /* "_geod.pyx":110 + /* "_geod.pyx":138 * if not buflenlons == buflenlats == buflenaz == buflend: * raise RuntimeError("Buffer lengths not the same") * ndim = buflenlons//_doublesize # <<<<<<<<<<<<<< * lonsdata = londata * latsdata = latdata */ - __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_buflenlons); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_buflenlons); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyNumber_FloorDivide(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = PyNumber_FloorDivide(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_ndim = __pyx_t_6; - /* "_geod.pyx":111 + /* "_geod.pyx":139 * raise RuntimeError("Buffer lengths not the same") * ndim = buflenlons//_doublesize * lonsdata = londata # <<<<<<<<<<<<<< @@ -1715,7 +1618,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_lonsdata = ((double *)__pyx_v_londata); - /* "_geod.pyx":112 + /* "_geod.pyx":140 * ndim = buflenlons//_doublesize * lonsdata = londata * latsdata = latdata # <<<<<<<<<<<<<< @@ -1724,7 +1627,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_latsdata = ((double *)__pyx_v_latdata); - /* "_geod.pyx":113 + /* "_geod.pyx":141 * lonsdata = londata * latsdata = latdata * azdata = azdat # <<<<<<<<<<<<<< @@ -1733,7 +1636,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_azdata = ((double *)__pyx_v_azdat); - /* "_geod.pyx":114 + /* "_geod.pyx":142 * latsdata = latdata * azdata = azdat * distdata = distdat # <<<<<<<<<<<<<< @@ -1742,310 +1645,262 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_distdata = ((double *)__pyx_v_distdat); - /* "_geod.pyx":115 + /* "_geod.pyx":143 * azdata = azdat * distdata = distdat * errmsg = 'undefined inverse geodesic (may be an antipodal point)' # <<<<<<<<<<<<<< * for i from 0 <= i < ndim: * if radians: */ - __Pyx_INCREF(((PyObject *)__pyx_kp_s_4)); - __pyx_v_errmsg = ((PyObject *)__pyx_kp_s_4); + __Pyx_INCREF(((PyObject *)__pyx_kp_s_7)); + __pyx_v_errmsg = ((PyObject *)__pyx_kp_s_7); - /* "_geod.pyx":116 + /* "_geod.pyx":144 * distdata = distdat * errmsg = 'undefined inverse geodesic (may be an antipodal point)' * for i from 0 <= i < ndim: # <<<<<<<<<<<<<< * if radians: - * self.geodesic_t.p1.v = lonsdata[i] + * self.pt1.lam = lonsdata[i] */ __pyx_t_6 = __pyx_v_ndim; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) { - /* "_geod.pyx":117 + /* "_geod.pyx":145 * errmsg = 'undefined inverse geodesic (may be an antipodal point)' * for i from 0 <= i < ndim: * if radians: # <<<<<<<<<<<<<< - * self.geodesic_t.p1.v = lonsdata[i] - * self.geodesic_t.p1.u = latsdata[i] + * self.pt1.lam = lonsdata[i] + * self.pt1.phi = latsdata[i] */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_2) { - /* "_geod.pyx":118 + /* "_geod.pyx":146 * for i from 0 <= i < ndim: * if radians: - * self.geodesic_t.p1.v = lonsdata[i] # <<<<<<<<<<<<<< - * self.geodesic_t.p1.u = latsdata[i] - * self.geodesic_t.p2.v = azdata[i] + * self.pt1.lam = lonsdata[i] # <<<<<<<<<<<<<< + * self.pt1.phi = latsdata[i] + * self.pt1.h = 0. */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.v = (__pyx_v_lonsdata[__pyx_v_i]); + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.lam = (__pyx_v_lonsdata[__pyx_v_i]); - /* "_geod.pyx":119 + /* "_geod.pyx":147 * if radians: - * self.geodesic_t.p1.v = lonsdata[i] - * self.geodesic_t.p1.u = latsdata[i] # <<<<<<<<<<<<<< - * self.geodesic_t.p2.v = azdata[i] - * self.geodesic_t.p2.u = distdata[i] - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.u = (__pyx_v_latsdata[__pyx_v_i]); - - /* "_geod.pyx":120 - * self.geodesic_t.p1.v = lonsdata[i] - * self.geodesic_t.p1.u = latsdata[i] - * self.geodesic_t.p2.v = azdata[i] # <<<<<<<<<<<<<< - * self.geodesic_t.p2.u = distdata[i] + * self.pt1.lam = lonsdata[i] + * self.pt1.phi = latsdata[i] # <<<<<<<<<<<<<< + * self.pt1.h = 0. + * self.pt2.lam = azdata[i] + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.phi = (__pyx_v_latsdata[__pyx_v_i]); + + /* "_geod.pyx":148 + * self.pt1.lam = lonsdata[i] + * self.pt1.phi = latsdata[i] + * self.pt1.h = 0. # <<<<<<<<<<<<<< + * self.pt2.lam = azdata[i] + * self.pt2.phi = distdata[i] + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.h = 0.; + + /* "_geod.pyx":149 + * self.pt1.phi = latsdata[i] + * self.pt1.h = 0. + * self.pt2.lam = azdata[i] # <<<<<<<<<<<<<< + * self.pt2.phi = distdata[i] + * self.arc.pt1 = &self.pt1 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam = (__pyx_v_azdata[__pyx_v_i]); + + /* "_geod.pyx":150 + * self.pt1.h = 0. + * self.pt2.lam = azdata[i] + * self.pt2.phi = distdata[i] # <<<<<<<<<<<<<< + * self.arc.pt1 = &self.pt1 + * self.arc.pt2 = &self.pt2 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi = (__pyx_v_distdata[__pyx_v_i]); + + /* "_geod.pyx":151 + * self.pt2.lam = azdata[i] + * self.pt2.phi = distdata[i] + * self.arc.pt1 = &self.pt1 # <<<<<<<<<<<<<< + * self.arc.pt2 = &self.pt2 * else: */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v = (__pyx_v_azdata[__pyx_v_i]); + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt1 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1); - /* "_geod.pyx":121 - * self.geodesic_t.p1.u = latsdata[i] - * self.geodesic_t.p2.v = azdata[i] - * self.geodesic_t.p2.u = distdata[i] # <<<<<<<<<<<<<< + /* "_geod.pyx":152 + * self.pt2.phi = distdata[i] + * self.arc.pt1 = &self.pt1 + * self.arc.pt2 = &self.pt2 # <<<<<<<<<<<<<< * else: - * self.geodesic_t.p1.v = _dg2rad*lonsdata[i] + * self.pt1.lam = _dg2rad*lonsdata[i] */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.u = (__pyx_v_distdata[__pyx_v_i]); + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2); goto __pyx_L13; } /*else*/ { - /* "_geod.pyx":123 - * self.geodesic_t.p2.u = distdata[i] + /* "_geod.pyx":154 + * self.arc.pt2 = &self.pt2 * else: - * self.geodesic_t.p1.v = _dg2rad*lonsdata[i] # <<<<<<<<<<<<<< - * self.geodesic_t.p1.u = _dg2rad*latsdata[i] - * self.geodesic_t.p2.v = _dg2rad*azdata[i] + * self.pt1.lam = _dg2rad*lonsdata[i] # <<<<<<<<<<<<<< + * self.pt1.phi = _dg2rad*latsdata[i] + * self.pt1.h = 0. */ - __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyFloat_FromDouble((__pyx_v_lonsdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.v = __pyx_t_7; - - /* "_geod.pyx":124 + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.lam = (__pyx_v_5_geod__dg2rad * (__pyx_v_lonsdata[__pyx_v_i])); + + /* "_geod.pyx":155 * else: - * self.geodesic_t.p1.v = _dg2rad*lonsdata[i] - * self.geodesic_t.p1.u = _dg2rad*latsdata[i] # <<<<<<<<<<<<<< - * self.geodesic_t.p2.v = _dg2rad*azdata[i] - * self.geodesic_t.p2.u = _dg2rad*distdata[i] - */ - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyFloat_FromDouble((__pyx_v_latsdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.u = __pyx_t_7; - - /* "_geod.pyx":125 - * self.geodesic_t.p1.v = _dg2rad*lonsdata[i] - * self.geodesic_t.p1.u = _dg2rad*latsdata[i] - * self.geodesic_t.p2.v = _dg2rad*azdata[i] # <<<<<<<<<<<<<< - * self.geodesic_t.p2.u = _dg2rad*distdata[i] - * geod_inv(&self.geodesic_t) - */ - __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyFloat_FromDouble((__pyx_v_azdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v = __pyx_t_7; - - /* "_geod.pyx":126 - * self.geodesic_t.p1.u = _dg2rad*latsdata[i] - * self.geodesic_t.p2.v = _dg2rad*azdata[i] - * self.geodesic_t.p2.u = _dg2rad*distdata[i] # <<<<<<<<<<<<<< - * geod_inv(&self.geodesic_t) - * if self.geodesic_t.DIST != self.geodesic_t.DIST: # check for NaN - */ - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyFloat_FromDouble((__pyx_v_distdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.u = __pyx_t_7; + * self.pt1.lam = _dg2rad*lonsdata[i] + * self.pt1.phi = _dg2rad*latsdata[i] # <<<<<<<<<<<<<< + * self.pt1.h = 0. + * self.pt2.lam = _dg2rad*azdata[i] + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.phi = (__pyx_v_5_geod__dg2rad * (__pyx_v_latsdata[__pyx_v_i])); + + /* "_geod.pyx":156 + * self.pt1.lam = _dg2rad*lonsdata[i] + * self.pt1.phi = _dg2rad*latsdata[i] + * self.pt1.h = 0. # <<<<<<<<<<<<<< + * self.pt2.lam = _dg2rad*azdata[i] + * self.pt2.phi = _dg2rad*distdata[i] + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.h = 0.; + + /* "_geod.pyx":157 + * self.pt1.phi = _dg2rad*latsdata[i] + * self.pt1.h = 0. + * self.pt2.lam = _dg2rad*azdata[i] # <<<<<<<<<<<<<< + * self.pt2.phi = _dg2rad*distdata[i] + * self.arc.pt1 = &self.pt1 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam = (__pyx_v_5_geod__dg2rad * (__pyx_v_azdata[__pyx_v_i])); + + /* "_geod.pyx":158 + * self.pt1.h = 0. + * self.pt2.lam = _dg2rad*azdata[i] + * self.pt2.phi = _dg2rad*distdata[i] # <<<<<<<<<<<<<< + * self.arc.pt1 = &self.pt1 + * self.arc.pt2 = &self.pt2 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi = (__pyx_v_5_geod__dg2rad * (__pyx_v_distdata[__pyx_v_i])); + + /* "_geod.pyx":159 + * self.pt2.lam = _dg2rad*azdata[i] + * self.pt2.phi = _dg2rad*distdata[i] + * self.arc.pt1 = &self.pt1 # <<<<<<<<<<<<<< + * self.arc.pt2 = &self.pt2 + * # Computes distance, forward and back azimuths in structure + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt1 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1); + + /* "_geod.pyx":160 + * self.pt2.phi = _dg2rad*distdata[i] + * self.arc.pt1 = &self.pt1 + * self.arc.pt2 = &self.pt2 # <<<<<<<<<<<<<< + * # Computes distance, forward and back azimuths in structure + * # for the two end points of the geodesic line + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2); } __pyx_L13:; - /* "_geod.pyx":127 - * self.geodesic_t.p2.v = _dg2rad*azdata[i] - * self.geodesic_t.p2.u = _dg2rad*distdata[i] - * geod_inv(&self.geodesic_t) # <<<<<<<<<<<<<< - * if self.geodesic_t.DIST != self.geodesic_t.DIST: # check for NaN - * raise ValueError('undefined inverse geodesic (may be an antipodal point)') - */ - geod_inv((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t)); - - /* "_geod.pyx":128 - * self.geodesic_t.p2.u = _dg2rad*distdata[i] - * geod_inv(&self.geodesic_t) - * if self.geodesic_t.DIST != self.geodesic_t.DIST: # check for NaN # <<<<<<<<<<<<<< - * raise ValueError('undefined inverse geodesic (may be an antipodal point)') - * err = pj_ctx_get_errno(pj_get_default_ctx()) + /* "_geod.pyx":163 + * # Computes distance, forward and back azimuths in structure + * # for the two end points of the geodesic line + * if self.sphere: # <<<<<<<<<<<<<< + * proj_sp_inv(&self.arc) + * else: */ - __pyx_t_2 = (((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.DIST != ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.DIST); + __pyx_t_5 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__sphere); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_2) { - /* "_geod.pyx":129 - * geod_inv(&self.geodesic_t) - * if self.geodesic_t.DIST != self.geodesic_t.DIST: # check for NaN - * raise ValueError('undefined inverse geodesic (may be an antipodal point)') # <<<<<<<<<<<<<< - * err = pj_ctx_get_errno(pj_get_default_ctx()) - * if err != 0: - */ - __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_8), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_Raise(__pyx_t_5, 0, 0, 0); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + /* "_geod.pyx":164 + * # for the two end points of the geodesic line + * if self.sphere: + * proj_sp_inv(&self.arc) # <<<<<<<<<<<<<< + * else: + * proj_in_inv(&self.arc) + */ + proj_sp_inv((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); goto __pyx_L14; } - __pyx_L14:; - - /* "_geod.pyx":130 - * if self.geodesic_t.DIST != self.geodesic_t.DIST: # check for NaN - * raise ValueError('undefined inverse geodesic (may be an antipodal point)') - * err = pj_ctx_get_errno(pj_get_default_ctx()) # <<<<<<<<<<<<<< - * if err != 0: - * raise RuntimeError(pj_strerrno(err)) - */ - __pyx_v_err = pj_ctx_get_errno(pj_get_default_ctx()); - - /* "_geod.pyx":131 - * raise ValueError('undefined inverse geodesic (may be an antipodal point)') - * err = pj_ctx_get_errno(pj_get_default_ctx()) - * if err != 0: # <<<<<<<<<<<<<< - * raise RuntimeError(pj_strerrno(err)) - * if radians: - */ - __pyx_t_2 = (__pyx_v_err != 0); - if (__pyx_t_2) { + /*else*/ { - /* "_geod.pyx":132 - * err = pj_ctx_get_errno(pj_get_default_ctx()) - * if err != 0: - * raise RuntimeError(pj_strerrno(err)) # <<<<<<<<<<<<<< + /* "_geod.pyx":166 + * proj_sp_inv(&self.arc) + * else: + * proj_in_inv(&self.arc) # <<<<<<<<<<<<<< * if radians: - * lonsdata[i] = self.geodesic_t.ALPHA12 + * lonsdata[i] = self.arc.az12 */ - __pyx_t_5 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_5)); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_5)); - __Pyx_GIVEREF(((PyObject *)__pyx_t_5)); - __pyx_t_5 = 0; - __pyx_t_5 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; - __Pyx_Raise(__pyx_t_5, 0, 0, 0); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L15; + proj_in_inv((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); } - __pyx_L15:; + __pyx_L14:; - /* "_geod.pyx":133 - * if err != 0: - * raise RuntimeError(pj_strerrno(err)) + /* "_geod.pyx":167 + * else: + * proj_in_inv(&self.arc) * if radians: # <<<<<<<<<<<<<< - * lonsdata[i] = self.geodesic_t.ALPHA12 - * latsdata[i] = self.geodesic_t.ALPHA21 + * lonsdata[i] = self.arc.az12 + * latsdata[i] = self.arc.az21 */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_2) { - /* "_geod.pyx":134 - * raise RuntimeError(pj_strerrno(err)) + /* "_geod.pyx":168 + * proj_in_inv(&self.arc) * if radians: - * lonsdata[i] = self.geodesic_t.ALPHA12 # <<<<<<<<<<<<<< - * latsdata[i] = self.geodesic_t.ALPHA21 + * lonsdata[i] = self.arc.az12 # <<<<<<<<<<<<<< + * latsdata[i] = self.arc.az21 * else: */ - (__pyx_v_lonsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA12; + (__pyx_v_lonsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az12; - /* "_geod.pyx":135 + /* "_geod.pyx":169 * if radians: - * lonsdata[i] = self.geodesic_t.ALPHA12 - * latsdata[i] = self.geodesic_t.ALPHA21 # <<<<<<<<<<<<<< + * lonsdata[i] = self.arc.az12 + * latsdata[i] = self.arc.az21 # <<<<<<<<<<<<<< * else: - * lonsdata[i] = _rad2dg*self.geodesic_t.ALPHA12 + * lonsdata[i] = _rad2dg*self.arc.az12 */ - (__pyx_v_latsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA21; - goto __pyx_L16; + (__pyx_v_latsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az21; + goto __pyx_L15; } /*else*/ { - /* "_geod.pyx":137 - * latsdata[i] = self.geodesic_t.ALPHA21 + /* "_geod.pyx":171 + * latsdata[i] = self.arc.az21 * else: - * lonsdata[i] = _rad2dg*self.geodesic_t.ALPHA12 # <<<<<<<<<<<<<< - * latsdata[i] = _rad2dg*self.geodesic_t.ALPHA21 - * azdata[i] = self.geodesic_t.DIST + * lonsdata[i] = _rad2dg*self.arc.az12 # <<<<<<<<<<<<<< + * latsdata[i] = _rad2dg*self.arc.az21 + * azdata[i] = self.arc.S */ - __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA12); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - (__pyx_v_lonsdata[__pyx_v_i]) = __pyx_t_7; - - /* "_geod.pyx":138 + (__pyx_v_lonsdata[__pyx_v_i]) = (__pyx_v_5_geod__rad2dg * ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az12); + + /* "_geod.pyx":172 * else: - * lonsdata[i] = _rad2dg*self.geodesic_t.ALPHA12 - * latsdata[i] = _rad2dg*self.geodesic_t.ALPHA21 # <<<<<<<<<<<<<< - * azdata[i] = self.geodesic_t.DIST + * lonsdata[i] = _rad2dg*self.arc.az12 + * latsdata[i] = _rad2dg*self.arc.az21 # <<<<<<<<<<<<<< + * azdata[i] = self.arc.S * */ - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA21); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - (__pyx_v_latsdata[__pyx_v_i]) = __pyx_t_7; + (__pyx_v_latsdata[__pyx_v_i]) = (__pyx_v_5_geod__rad2dg * ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az21); } - __pyx_L16:; + __pyx_L15:; - /* "_geod.pyx":139 - * lonsdata[i] = _rad2dg*self.geodesic_t.ALPHA12 - * latsdata[i] = _rad2dg*self.geodesic_t.ALPHA21 - * azdata[i] = self.geodesic_t.DIST # <<<<<<<<<<<<<< + /* "_geod.pyx":173 + * lonsdata[i] = _rad2dg*self.arc.az12 + * latsdata[i] = _rad2dg*self.arc.az21 + * azdata[i] = self.arc.S # <<<<<<<<<<<<<< * * def _npts(self, double lon1, double lat1, double lon2, double lat2, int npts, radians=False): */ - (__pyx_v_azdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.DIST; + (__pyx_v_azdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.S; } __pyx_r = Py_None; __Pyx_INCREF(Py_None); @@ -2063,8 +1918,8 @@ static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *_ return __pyx_r; } -/* "_geod.pyx":141 - * azdata[i] = self.geodesic_t.DIST +/* "_geod.pyx":175 + * azdata[i] = self.arc.S * * def _npts(self, double lon1, double lat1, double lon2, double lat2, int npts, radians=False): # <<<<<<<<<<<<<< * """ @@ -2088,10 +1943,8 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; + long __pyx_t_3; PyObject *__pyx_t_4 = NULL; - double __pyx_t_5; - long __pyx_t_6; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -2099,7 +1952,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * __Pyx_RefNannySetupContext("_npts"); { PyObject* values[6] = {0,0,0,0,0,0}; - values[5] = __pyx_k_9; + values[5] = __pyx_k_8; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; switch (PyTuple_GET_SIZE(__pyx_args)) { @@ -2122,25 +1975,25 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lat1); if (likely(values[1])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lon2); if (likely(values[2])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lat2); if (likely(values[3])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 4: values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__npts); if (likely(values[4])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 5: if (kw_args > 0) { @@ -2149,7 +2002,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_npts") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_npts") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { @@ -2163,183 +2016,215 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * default: goto __pyx_L5_argtuple_error; } } - __pyx_v_lon1 = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_lon1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_v_lat1 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_lat1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_v_lon2 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_lon2 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_v_lat2 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_lat2 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_v_npts = __Pyx_PyInt_AsInt(values[4]); if (unlikely((__pyx_v_npts == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_v_lon1 = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_lon1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_v_lat1 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_lat1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_v_lon2 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_lon2 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_v_lat2 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_lat2 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_v_npts = __Pyx_PyInt_AsInt(values[4]); if (unlikely((__pyx_v_npts == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_v_radians = values[5]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("_geod.Geod._npts", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - /* "_geod.pyx":146 + /* "_geod.pyx":180 * cdef int i * cdef double del_s * if radians: # <<<<<<<<<<<<<< - * self.geodesic_t.p1.v = lon1 - * self.geodesic_t.p1.u = lat1 + * self.pt1.lam = lon1 + * self.pt1.phi = lat1 */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_1) { - /* "_geod.pyx":147 + /* "_geod.pyx":181 * cdef double del_s * if radians: - * self.geodesic_t.p1.v = lon1 # <<<<<<<<<<<<<< - * self.geodesic_t.p1.u = lat1 - * self.geodesic_t.p2.v = lon2 + * self.pt1.lam = lon1 # <<<<<<<<<<<<<< + * self.pt1.phi = lat1 + * self.pt1.h = 0. */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.v = __pyx_v_lon1; + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.lam = __pyx_v_lon1; - /* "_geod.pyx":148 + /* "_geod.pyx":182 * if radians: - * self.geodesic_t.p1.v = lon1 - * self.geodesic_t.p1.u = lat1 # <<<<<<<<<<<<<< - * self.geodesic_t.p2.v = lon2 - * self.geodesic_t.p2.u = lat2 - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.u = __pyx_v_lat1; - - /* "_geod.pyx":149 - * self.geodesic_t.p1.v = lon1 - * self.geodesic_t.p1.u = lat1 - * self.geodesic_t.p2.v = lon2 # <<<<<<<<<<<<<< - * self.geodesic_t.p2.u = lat2 + * self.pt1.lam = lon1 + * self.pt1.phi = lat1 # <<<<<<<<<<<<<< + * self.pt1.h = 0. + * self.pt2.lam = lon2 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.phi = __pyx_v_lat1; + + /* "_geod.pyx":183 + * self.pt1.lam = lon1 + * self.pt1.phi = lat1 + * self.pt1.h = 0. # <<<<<<<<<<<<<< + * self.pt2.lam = lon2 + * self.pt2.phi = lat2 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.h = 0.; + + /* "_geod.pyx":184 + * self.pt1.phi = lat1 + * self.pt1.h = 0. + * self.pt2.lam = lon2 # <<<<<<<<<<<<<< + * self.pt2.phi = lat2 + * self.arc.pt1 = &self.pt1 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam = __pyx_v_lon2; + + /* "_geod.pyx":185 + * self.pt1.h = 0. + * self.pt2.lam = lon2 + * self.pt2.phi = lat2 # <<<<<<<<<<<<<< + * self.arc.pt1 = &self.pt1 + * self.arc.pt2 = &self.pt2 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi = __pyx_v_lat2; + + /* "_geod.pyx":186 + * self.pt2.lam = lon2 + * self.pt2.phi = lat2 + * self.arc.pt1 = &self.pt1 # <<<<<<<<<<<<<< + * self.arc.pt2 = &self.pt2 * else: */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v = __pyx_v_lon2; + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt1 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1); - /* "_geod.pyx":150 - * self.geodesic_t.p1.u = lat1 - * self.geodesic_t.p2.v = lon2 - * self.geodesic_t.p2.u = lat2 # <<<<<<<<<<<<<< + /* "_geod.pyx":187 + * self.pt2.phi = lat2 + * self.arc.pt1 = &self.pt1 + * self.arc.pt2 = &self.pt2 # <<<<<<<<<<<<<< * else: - * self.geodesic_t.p1.v = _dg2rad*lon1 + * self.pt1.lam = _dg2rad*lon1 */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.u = __pyx_v_lat2; + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2); goto __pyx_L6; } /*else*/ { - /* "_geod.pyx":152 - * self.geodesic_t.p2.u = lat2 + /* "_geod.pyx":189 + * self.arc.pt2 = &self.pt2 * else: - * self.geodesic_t.p1.v = _dg2rad*lon1 # <<<<<<<<<<<<<< - * self.geodesic_t.p1.u = _dg2rad*lat1 - * self.geodesic_t.p2.v = _dg2rad*lon2 + * self.pt1.lam = _dg2rad*lon1 # <<<<<<<<<<<<<< + * self.pt1.phi = _dg2rad*lat1 + * self.pt1.h = 0. */ - __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyFloat_FromDouble(__pyx_v_lon1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.v = __pyx_t_5; + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.lam = (__pyx_v_5_geod__dg2rad * __pyx_v_lon1); - /* "_geod.pyx":153 + /* "_geod.pyx":190 * else: - * self.geodesic_t.p1.v = _dg2rad*lon1 - * self.geodesic_t.p1.u = _dg2rad*lat1 # <<<<<<<<<<<<<< - * self.geodesic_t.p2.v = _dg2rad*lon2 - * self.geodesic_t.p2.u = _dg2rad*lat2 - */ - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyFloat_FromDouble(__pyx_v_lat1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.u = __pyx_t_5; - - /* "_geod.pyx":154 - * self.geodesic_t.p1.v = _dg2rad*lon1 - * self.geodesic_t.p1.u = _dg2rad*lat1 - * self.geodesic_t.p2.v = _dg2rad*lon2 # <<<<<<<<<<<<<< - * self.geodesic_t.p2.u = _dg2rad*lat2 - * # do inverse computation to set azimuths, distance. - */ - __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyFloat_FromDouble(__pyx_v_lon2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v = __pyx_t_5; - - /* "_geod.pyx":155 - * self.geodesic_t.p1.u = _dg2rad*lat1 - * self.geodesic_t.p2.v = _dg2rad*lon2 - * self.geodesic_t.p2.u = _dg2rad*lat2 # <<<<<<<<<<<<<< - * # do inverse computation to set azimuths, distance. - * geod_inv(&self.geodesic_t) - */ - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyFloat_FromDouble(__pyx_v_lat2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.u = __pyx_t_5; + * self.pt1.lam = _dg2rad*lon1 + * self.pt1.phi = _dg2rad*lat1 # <<<<<<<<<<<<<< + * self.pt1.h = 0. + * self.pt2.lam = _dg2rad*lon2 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.phi = (__pyx_v_5_geod__dg2rad * __pyx_v_lat1); + + /* "_geod.pyx":191 + * self.pt1.lam = _dg2rad*lon1 + * self.pt1.phi = _dg2rad*lat1 + * self.pt1.h = 0. # <<<<<<<<<<<<<< + * self.pt2.lam = _dg2rad*lon2 + * self.pt2.phi = _dg2rad*lat2 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.h = 0.; + + /* "_geod.pyx":192 + * self.pt1.phi = _dg2rad*lat1 + * self.pt1.h = 0. + * self.pt2.lam = _dg2rad*lon2 # <<<<<<<<<<<<<< + * self.pt2.phi = _dg2rad*lat2 + * self.arc.pt1 = &self.pt1 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam = (__pyx_v_5_geod__dg2rad * __pyx_v_lon2); + + /* "_geod.pyx":193 + * self.pt1.h = 0. + * self.pt2.lam = _dg2rad*lon2 + * self.pt2.phi = _dg2rad*lat2 # <<<<<<<<<<<<<< + * self.arc.pt1 = &self.pt1 + * self.arc.pt2 = &self.pt2 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi = (__pyx_v_5_geod__dg2rad * __pyx_v_lat2); + + /* "_geod.pyx":194 + * self.pt2.lam = _dg2rad*lon2 + * self.pt2.phi = _dg2rad*lat2 + * self.arc.pt1 = &self.pt1 # <<<<<<<<<<<<<< + * self.arc.pt2 = &self.pt2 + * if self.sphere: + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt1 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1); + + /* "_geod.pyx":195 + * self.pt2.phi = _dg2rad*lat2 + * self.arc.pt1 = &self.pt1 + * self.arc.pt2 = &self.pt2 # <<<<<<<<<<<<<< + * if self.sphere: + * proj_sp_inv(&self.arc) + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2); } __pyx_L6:; - /* "_geod.pyx":157 - * self.geodesic_t.p2.u = _dg2rad*lat2 - * # do inverse computation to set azimuths, distance. - * geod_inv(&self.geodesic_t) # <<<<<<<<<<<<<< - * # set up some constants needed for forward computation. - * geod_pre(&self.geodesic_t) + /* "_geod.pyx":196 + * self.arc.pt1 = &self.pt1 + * self.arc.pt2 = &self.pt2 + * if self.sphere: # <<<<<<<<<<<<<< + * proj_sp_inv(&self.arc) + * else: */ - geod_inv((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t)); + __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__sphere); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_1) { - /* "_geod.pyx":159 - * geod_inv(&self.geodesic_t) - * # set up some constants needed for forward computation. - * geod_pre(&self.geodesic_t) # <<<<<<<<<<<<<< + /* "_geod.pyx":197 + * self.arc.pt2 = &self.pt2 + * if self.sphere: + * proj_sp_inv(&self.arc) # <<<<<<<<<<<<<< + * else: + * proj_in_inv(&self.arc) + */ + proj_sp_inv((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); + goto __pyx_L7; + } + /*else*/ { + + /* "_geod.pyx":199 + * proj_sp_inv(&self.arc) + * else: + * proj_in_inv(&self.arc) # <<<<<<<<<<<<<< * # distance increment. - * del_s = self.geodesic_t.DIST/(npts+1) + * del_s = self.arc.S/(npts+1) */ - geod_pre((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t)); + proj_in_inv((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); + } + __pyx_L7:; - /* "_geod.pyx":161 - * geod_pre(&self.geodesic_t) + /* "_geod.pyx":201 + * proj_in_inv(&self.arc) * # distance increment. - * del_s = self.geodesic_t.DIST/(npts+1) # <<<<<<<<<<<<<< + * del_s = self.arc.S/(npts+1) # <<<<<<<<<<<<<< * # initialize output tuples. * lats = () */ - __pyx_t_6 = (__pyx_v_npts + 1); - if (unlikely(__pyx_t_6 == 0)) { + __pyx_t_3 = (__pyx_v_npts + 1); + if (unlikely(__pyx_t_3 == 0)) { PyErr_Format(PyExc_ZeroDivisionError, "float division"); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_v_del_s = (((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.DIST / __pyx_t_6); + __pyx_v_del_s = (((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.S / __pyx_t_3); - /* "_geod.pyx":163 - * del_s = self.geodesic_t.DIST/(npts+1) + /* "_geod.pyx":203 + * del_s = self.arc.S/(npts+1) * # initialize output tuples. * lats = () # <<<<<<<<<<<<<< * lons = () @@ -2348,7 +2233,7 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * __Pyx_INCREF(((PyObject *)__pyx_empty_tuple)); __pyx_v_lats = __pyx_empty_tuple; - /* "_geod.pyx":164 + /* "_geod.pyx":204 * # initialize output tuples. * lats = () * lons = () # <<<<<<<<<<<<<< @@ -2358,171 +2243,185 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * __Pyx_INCREF(((PyObject *)__pyx_empty_tuple)); __pyx_v_lons = __pyx_empty_tuple; - /* "_geod.pyx":166 + /* "_geod.pyx":206 * lons = () * # loop over intermediate points, compute lat/lons. * for i from 1 <= i < npts+1: # <<<<<<<<<<<<<< - * self.geodesic_t.DIST = i*del_s - * geod_for(&self.geodesic_t) + * self.arc.S = i*del_s + * if self.sphere: */ - __pyx_t_6 = (__pyx_v_npts + 1); - for (__pyx_v_i = 1; __pyx_v_i < __pyx_t_6; __pyx_v_i++) { + __pyx_t_3 = (__pyx_v_npts + 1); + for (__pyx_v_i = 1; __pyx_v_i < __pyx_t_3; __pyx_v_i++) { - /* "_geod.pyx":167 + /* "_geod.pyx":207 * # loop over intermediate points, compute lat/lons. * for i from 1 <= i < npts+1: - * self.geodesic_t.DIST = i*del_s # <<<<<<<<<<<<<< - * geod_for(&self.geodesic_t) - * if radians: + * self.arc.S = i*del_s # <<<<<<<<<<<<<< + * if self.sphere: + * proj_sp_fwd(&self.arc) */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.DIST = (__pyx_v_i * __pyx_v_del_s); + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.S = (__pyx_v_i * __pyx_v_del_s); - /* "_geod.pyx":168 + /* "_geod.pyx":208 * for i from 1 <= i < npts+1: - * self.geodesic_t.DIST = i*del_s - * geod_for(&self.geodesic_t) # <<<<<<<<<<<<<< + * self.arc.S = i*del_s + * if self.sphere: # <<<<<<<<<<<<<< + * proj_sp_fwd(&self.arc) + * else: + */ + __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__sphere); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_1) { + + /* "_geod.pyx":209 + * self.arc.S = i*del_s + * if self.sphere: + * proj_sp_fwd(&self.arc) # <<<<<<<<<<<<<< + * else: + * proj_in_fwd(&self.arc) + */ + proj_sp_fwd((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); + goto __pyx_L10; + } + /*else*/ { + + /* "_geod.pyx":211 + * proj_sp_fwd(&self.arc) + * else: + * proj_in_fwd(&self.arc) # <<<<<<<<<<<<<< * if radians: - * lats = lats + (self.geodesic_t.p2.u,) + * lats = lats + (self.pt2.phi,) */ - geod_for((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t)); + proj_in_fwd((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); + } + __pyx_L10:; - /* "_geod.pyx":169 - * self.geodesic_t.DIST = i*del_s - * geod_for(&self.geodesic_t) + /* "_geod.pyx":212 + * else: + * proj_in_fwd(&self.arc) * if radians: # <<<<<<<<<<<<<< - * lats = lats + (self.geodesic_t.p2.u,) - * lons = lons + (self.geodesic_t.p2.v,) + * lats = lats + (self.pt2.phi,) + * lons = lons + (self.pt2.lam.v,) */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_1) { - /* "_geod.pyx":170 - * geod_for(&self.geodesic_t) + /* "_geod.pyx":213 + * proj_in_fwd(&self.arc) * if radians: - * lats = lats + (self.geodesic_t.p2.u,) # <<<<<<<<<<<<<< - * lons = lons + (self.geodesic_t.p2.v,) + * lats = lats + (self.pt2.phi,) # <<<<<<<<<<<<<< + * lons = lons + (self.pt2.lam.v,) * else: */ - __pyx_t_2 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.u); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_3)); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(((PyObject *)__pyx_v_lats), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyNumber_Add(((PyObject *)__pyx_v_lats), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); - __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_v_lats)); __pyx_v_lats = __pyx_t_2; __pyx_t_2 = 0; - /* "_geod.pyx":171 + /* "_geod.pyx":214 * if radians: - * lats = lats + (self.geodesic_t.p2.u,) - * lons = lons + (self.geodesic_t.p2.v,) # <<<<<<<<<<<<<< + * lats = lats + (self.pt2.phi,) + * lons = lons + (self.pt2.lam.v,) # <<<<<<<<<<<<<< * else: - * lats = lats + (_rad2dg*self.geodesic_t.p2.u,) + * lats = lats + (_rad2dg*self.pt2.phi,) */ - __pyx_t_2 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_3)); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(((PyObject *)__pyx_v_lons), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__v); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); - __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + __pyx_t_4 = 0; + __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_v_lons), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); + __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_v_lons)); - __pyx_v_lons = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L9; + __pyx_v_lons = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L11; } /*else*/ { - /* "_geod.pyx":173 - * lons = lons + (self.geodesic_t.p2.v,) + /* "_geod.pyx":216 + * lons = lons + (self.pt2.lam.v,) * else: - * lats = lats + (_rad2dg*self.geodesic_t.p2.u,) # <<<<<<<<<<<<<< - * lons = lons + (_rad2dg*self.geodesic_t.p2.v,) + * lats = lats + (_rad2dg*self.pt2.phi,) # <<<<<<<<<<<<<< + * lons = lons + (_rad2dg*self.pt2.lam,) * return lons, lats */ - __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.u); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyFloat_FromDouble((__pyx_v_5_geod__rad2dg * ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_3)); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_2)); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_v_lats), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_v_lats), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_v_lats)); __pyx_v_lats = __pyx_t_4; __pyx_t_4 = 0; - /* "_geod.pyx":174 + /* "_geod.pyx":217 * else: - * lats = lats + (_rad2dg*self.geodesic_t.p2.u,) - * lons = lons + (_rad2dg*self.geodesic_t.p2.v,) # <<<<<<<<<<<<<< + * lats = lats + (_rad2dg*self.pt2.phi,) + * lons = lons + (_rad2dg*self.pt2.lam,) # <<<<<<<<<<<<<< * return lons, lats - * */ - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyFloat_FromDouble((__pyx_v_5_geod__rad2dg * ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_3)); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(((PyObject *)__pyx_v_lons), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); - __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + __pyx_t_4 = 0; + __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_v_lons), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); + __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_v_lons)); - __pyx_v_lons = __pyx_t_2; - __pyx_t_2 = 0; + __pyx_v_lons = __pyx_t_4; + __pyx_t_4 = 0; } - __pyx_L9:; + __pyx_L11:; } - /* "_geod.pyx":175 - * lats = lats + (_rad2dg*self.geodesic_t.p2.u,) - * lons = lons + (_rad2dg*self.geodesic_t.p2.v,) + /* "_geod.pyx":218 + * lats = lats + (_rad2dg*self.pt2.phi,) + * lons = lons + (_rad2dg*self.pt2.lam,) * return lons, lats # <<<<<<<<<<<<<< - * - * cdef _strencode(pystr,encoding='ascii'): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_2)); + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); __Pyx_INCREF(((PyObject *)__pyx_v_lons)); - PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_lons)); + PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_lons)); __Pyx_GIVEREF(((PyObject *)__pyx_v_lons)); __Pyx_INCREF(((PyObject *)__pyx_v_lats)); - PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_lats)); + PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_v_lats)); __Pyx_GIVEREF(((PyObject *)__pyx_v_lats)); - __pyx_r = ((PyObject *)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_r = ((PyObject *)__pyx_t_4); + __pyx_t_4 = 0; goto __pyx_L0; __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("_geod.Geod._npts", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; @@ -2534,273 +2433,9 @@ static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject * return __pyx_r; } -/* "_geod.pyx":7 - * cdef class Geod: - * cdef GEODESIC_T geodesic_t - * cdef public object geodstring # <<<<<<<<<<<<<< - * cdef public object proj_version - * cdef char *geodinitstring - */ - -static PyObject *__pyx_pf_5_geod_4Geod_10geodstring___get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pf_5_geod_4Geod_10geodstring___get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__"); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring); - __pyx_r = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring; - goto __pyx_L0; - - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_5_geod_4Geod_10geodstring_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pf_5_geod_4Geod_10geodstring_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__"); - __Pyx_INCREF(__pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __Pyx_GOTREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring); - __Pyx_DECREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring); - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring = __pyx_v_value; - - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_5_geod_4Geod_10geodstring_2__del__(PyObject *__pyx_v_self); /*proto*/ -static int __pyx_pf_5_geod_4Geod_10geodstring_2__del__(PyObject *__pyx_v_self) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__"); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring); - __Pyx_DECREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring); - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring = Py_None; - - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "_geod.pyx":8 - * cdef GEODESIC_T geodesic_t - * cdef public object geodstring - * cdef public object proj_version # <<<<<<<<<<<<<< - * cdef char *geodinitstring - * - */ - -static PyObject *__pyx_pf_5_geod_4Geod_12proj_version___get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pf_5_geod_4Geod_12proj_version___get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__"); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->proj_version); - __pyx_r = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->proj_version; - goto __pyx_L0; - - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_5_geod_4Geod_12proj_version_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pf_5_geod_4Geod_12proj_version_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__"); - __Pyx_INCREF(__pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __Pyx_GOTREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->proj_version); - __Pyx_DECREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->proj_version); - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->proj_version = __pyx_v_value; - - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_5_geod_4Geod_12proj_version_2__del__(PyObject *__pyx_v_self); /*proto*/ -static int __pyx_pf_5_geod_4Geod_12proj_version_2__del__(PyObject *__pyx_v_self) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__"); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->proj_version); - __Pyx_DECREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->proj_version); - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->proj_version = Py_None; - - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "_geod.pyx":177 - * return lons, lats - * - * cdef _strencode(pystr,encoding='ascii'): # <<<<<<<<<<<<<< - * # encode a string into bytes. If already bytes, do nothing. - * try: - */ - -static PyObject *__pyx_f_5_geod__strencode(PyObject *__pyx_v_pystr, struct __pyx_opt_args_5_geod__strencode *__pyx_optional_args) { - PyObject *__pyx_v_encoding = ((PyObject *)__pyx_n_s__ascii); - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_strencode"); - if (__pyx_optional_args) { - if (__pyx_optional_args->__pyx_n > 0) { - __pyx_v_encoding = __pyx_optional_args->encoding; - } - } - - /* "_geod.pyx":179 - * cdef _strencode(pystr,encoding='ascii'): - * # encode a string into bytes. If already bytes, do nothing. - * try: # <<<<<<<<<<<<<< - * return pystr.encode(encoding) - * except AttributeError: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "_geod.pyx":180 - * # encode a string into bytes. If already bytes, do nothing. - * try: - * return pystr.encode(encoding) # <<<<<<<<<<<<<< - * except AttributeError: - * return pystr # already bytes? - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = PyObject_GetAttr(__pyx_v_pystr, __pyx_n_s__encode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_5)); - __Pyx_INCREF(__pyx_v_encoding); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_encoding); - __Pyx_GIVEREF(__pyx_v_encoding); - __pyx_t_6 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "_geod.pyx":181 - * try: - * return pystr.encode(encoding) - * except AttributeError: # <<<<<<<<<<<<<< - * return pystr # already bytes? - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError); - if (__pyx_t_7) { - __Pyx_AddTraceback("_geod._strencode", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - - /* "_geod.pyx":182 - * return pystr.encode(encoding) - * except AttributeError: - * return pystr # already bytes? # <<<<<<<<<<<<<< - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_pystr); - __pyx_r = __pyx_v_pystr; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L6_except_return; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("_geod._strencode", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - static PyObject *__pyx_tp_new_5_geod_Geod(PyTypeObject *t, PyObject *a, PyObject *k) { - struct __pyx_obj_5_geod_Geod *p; PyObject *o = (*t->tp_alloc)(t, 0); if (!o) return 0; - p = ((struct __pyx_obj_5_geod_Geod *)o); - p->geodstring = Py_None; Py_INCREF(Py_None); - p->proj_version = Py_None; Py_INCREF(Py_None); if (__pyx_pf_5_geod_4Geod___cinit__(o, a, k) < 0) { Py_DECREF(o); o = 0; } @@ -2808,76 +2443,17 @@ static PyObject *__pyx_tp_new_5_geod_Geod(PyTypeObject *t, PyObject *a, PyObject } static void __pyx_tp_dealloc_5_geod_Geod(PyObject *o) { - struct __pyx_obj_5_geod_Geod *p = (struct __pyx_obj_5_geod_Geod *)o; - Py_XDECREF(p->geodstring); - Py_XDECREF(p->proj_version); (*Py_TYPE(o)->tp_free)(o); } -static int __pyx_tp_traverse_5_geod_Geod(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_5_geod_Geod *p = (struct __pyx_obj_5_geod_Geod *)o; - if (p->geodstring) { - e = (*v)(p->geodstring, a); if (e) return e; - } - if (p->proj_version) { - e = (*v)(p->proj_version, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_5_geod_Geod(PyObject *o) { - struct __pyx_obj_5_geod_Geod *p = (struct __pyx_obj_5_geod_Geod *)o; - PyObject* tmp; - tmp = ((PyObject*)p->geodstring); - p->geodstring = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->proj_version); - p->proj_version = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyObject *__pyx_getprop_5_geod_4Geod_geodstring(PyObject *o, void *x) { - return __pyx_pf_5_geod_4Geod_10geodstring___get__(o); -} - -static int __pyx_setprop_5_geod_4Geod_geodstring(PyObject *o, PyObject *v, void *x) { - if (v) { - return __pyx_pf_5_geod_4Geod_10geodstring_1__set__(o, v); - } - else { - return __pyx_pf_5_geod_4Geod_10geodstring_2__del__(o); - } -} - -static PyObject *__pyx_getprop_5_geod_4Geod_proj_version(PyObject *o, void *x) { - return __pyx_pf_5_geod_4Geod_12proj_version___get__(o); -} - -static int __pyx_setprop_5_geod_4Geod_proj_version(PyObject *o, PyObject *v, void *x) { - if (v) { - return __pyx_pf_5_geod_4Geod_12proj_version_1__set__(o, v); - } - else { - return __pyx_pf_5_geod_4Geod_12proj_version_2__del__(o); - } -} - static PyMethodDef __pyx_methods_5_geod_Geod[] = { {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__pyx_pf_5_geod_4Geod_1__reduce__, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5_geod_4Geod_1__reduce__)}, - {__Pyx_NAMESTR("_fwd"), (PyCFunction)__pyx_pf_5_geod_4Geod_2_fwd, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5_geod_4Geod_2_fwd)}, + {__Pyx_NAMESTR("_fwd"), (PyCFunction)__pyx_pf_5_geod_4Geod_2_fwd, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}, {__Pyx_NAMESTR("_inv"), (PyCFunction)__pyx_pf_5_geod_4Geod_3_inv, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5_geod_4Geod_3_inv)}, {__Pyx_NAMESTR("_npts"), (PyCFunction)__pyx_pf_5_geod_4Geod_4_npts, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5_geod_4Geod_4_npts)}, {0, 0, 0, 0} }; -static struct PyGetSetDef __pyx_getsets_5_geod_Geod[] = { - {(char *)"geodstring", __pyx_getprop_5_geod_4Geod_geodstring, __pyx_setprop_5_geod_4Geod_geodstring, 0, 0}, - {(char *)"proj_version", __pyx_getprop_5_geod_4Geod_proj_version, __pyx_setprop_5_geod_4Geod_proj_version, 0, 0}, - {0, 0, 0, 0, 0} -}; - static PyNumberMethods __pyx_tp_as_number_Geod = { 0, /*nb_add*/ 0, /*nb_subtract*/ @@ -3000,17 +2576,17 @@ static PyTypeObject __pyx_type_5_geod_Geod = { 0, /*tp_getattro*/ 0, /*tp_setattro*/ &__pyx_tp_as_buffer_Geod, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ 0, /*tp_doc*/ - __pyx_tp_traverse_5_geod_Geod, /*tp_traverse*/ - __pyx_tp_clear_5_geod_Geod, /*tp_clear*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ 0, /*tp_iter*/ 0, /*tp_iternext*/ __pyx_methods_5_geod_Geod, /*tp_methods*/ 0, /*tp_members*/ - __pyx_getsets_5_geod_Geod, /*tp_getset*/ + 0, /*tp_getset*/ 0, /*tp_base*/ 0, /*tp_dict*/ 0, /*tp_descr_get*/ @@ -3051,25 +2627,20 @@ static struct PyModuleDef __pyx_moduledef = { #endif static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_kp_s_10, __pyx_k_10, sizeof(__pyx_k_10), 0, 0, 1, 0}, - {&__pyx_kp_s_2, __pyx_k_2, sizeof(__pyx_k_2), 0, 0, 1, 0}, - {&__pyx_kp_s_4, __pyx_k_4, sizeof(__pyx_k_4), 0, 0, 1, 0}, - {&__pyx_n_s__AttributeError, __pyx_k__AttributeError, sizeof(__pyx_k__AttributeError), 0, 0, 1, 1}, + {&__pyx_kp_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 0}, + {&__pyx_kp_s_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 0, 1, 0}, + {&__pyx_kp_s_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 0, 1, 0}, {&__pyx_n_s__RuntimeError, __pyx_k__RuntimeError, sizeof(__pyx_k__RuntimeError), 0, 0, 1, 1}, - {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1}, {&__pyx_n_s____class__, __pyx_k____class__, sizeof(__pyx_k____class__), 0, 0, 1, 1}, {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1}, {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1}, - {&__pyx_n_s____version__, __pyx_k____version__, sizeof(__pyx_k____version__), 0, 0, 1, 1}, - {&__pyx_n_s___dg2rad, __pyx_k___dg2rad, sizeof(__pyx_k___dg2rad), 0, 0, 1, 1}, {&__pyx_n_s___doublesize, __pyx_k___doublesize, sizeof(__pyx_k___doublesize), 0, 0, 1, 1}, - {&__pyx_n_s___rad2dg, __pyx_k___rad2dg, sizeof(__pyx_k___rad2dg), 0, 0, 1, 1}, - {&__pyx_n_s__ascii, __pyx_k__ascii, sizeof(__pyx_k__ascii), 0, 0, 1, 1}, + {&__pyx_n_s__a, __pyx_k__a, sizeof(__pyx_k__a), 0, 0, 1, 1}, {&__pyx_n_s__az, __pyx_k__az, sizeof(__pyx_k__az), 0, 0, 1, 1}, {&__pyx_n_s__degrees, __pyx_k__degrees, sizeof(__pyx_k__degrees), 0, 0, 1, 1}, {&__pyx_n_s__dist, __pyx_k__dist, sizeof(__pyx_k__dist), 0, 0, 1, 1}, - {&__pyx_n_s__encode, __pyx_k__encode, sizeof(__pyx_k__encode), 0, 0, 1, 1}, - {&__pyx_n_s__geodstring, __pyx_k__geodstring, sizeof(__pyx_k__geodstring), 0, 0, 1, 1}, + {&__pyx_n_s__es, __pyx_k__es, sizeof(__pyx_k__es), 0, 0, 1, 1}, + {&__pyx_n_s__f, __pyx_k__f, sizeof(__pyx_k__f), 0, 0, 1, 1}, {&__pyx_n_s__lat1, __pyx_k__lat1, sizeof(__pyx_k__lat1), 0, 0, 1, 1}, {&__pyx_n_s__lat2, __pyx_k__lat2, sizeof(__pyx_k__lat2), 0, 0, 1, 1}, {&__pyx_n_s__lats, __pyx_k__lats, sizeof(__pyx_k__lats), 0, 0, 1, 1}, @@ -3083,12 +2654,12 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_n_s__math, __pyx_k__math, sizeof(__pyx_k__math), 0, 0, 1, 1}, {&__pyx_n_s__npts, __pyx_k__npts, sizeof(__pyx_k__npts), 0, 0, 1, 1}, {&__pyx_n_s__radians, __pyx_k__radians, sizeof(__pyx_k__radians), 0, 0, 1, 1}, + {&__pyx_n_s__sphere, __pyx_k__sphere, sizeof(__pyx_k__sphere), 0, 0, 1, 1}, + {&__pyx_n_s__v, __pyx_k__v, sizeof(__pyx_k__v), 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0} }; static int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_AttributeError = __Pyx_GetName(__pyx_b, __pyx_n_s__AttributeError); if (!__pyx_builtin_AttributeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} return 0; __pyx_L1_error:; return -1; @@ -3098,61 +2669,33 @@ static int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants"); - /* "_geod.pyx":51 + /* "_geod.pyx":75 * # process data in buffer * if not buflenlons == buflenlats == buflenaz == buflend: * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< * ndim = buflenlons//_doublesize * lonsdata = londata */ - __pyx_k_tuple_3 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_3)); - __Pyx_INCREF(((PyObject *)__pyx_kp_s_2)); - PyTuple_SET_ITEM(__pyx_k_tuple_3, 0, ((PyObject *)__pyx_kp_s_2)); - __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_2)); - __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_3)); + __pyx_k_tuple_4 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_4)); + __Pyx_INCREF(((PyObject *)__pyx_kp_s_3)); + PyTuple_SET_ITEM(__pyx_k_tuple_4, 0, ((PyObject *)__pyx_kp_s_3)); + __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_3)); + __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_4)); - /* "_geod.pyx":78 - * # check for NaN. - * if self.geodesic_t.ALPHA21 != self.geodesic_t.ALPHA21: - * raise ValueError('undefined inverse geodesic (may be an antipodal point)') # <<<<<<<<<<<<<< - * if radians: - * lonsdata[i] = self.geodesic_t.p2.v - */ - __pyx_k_tuple_5 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_5)); - __Pyx_INCREF(((PyObject *)__pyx_kp_s_4)); - PyTuple_SET_ITEM(__pyx_k_tuple_5, 0, ((PyObject *)__pyx_kp_s_4)); - __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_4)); - __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_5)); - - /* "_geod.pyx":109 + /* "_geod.pyx":137 * # process data in buffer * if not buflenlons == buflenlats == buflenaz == buflend: * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< * ndim = buflenlons//_doublesize * lonsdata = londata */ - __pyx_k_tuple_7 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_7)); - __Pyx_INCREF(((PyObject *)__pyx_kp_s_2)); - PyTuple_SET_ITEM(__pyx_k_tuple_7, 0, ((PyObject *)__pyx_kp_s_2)); - __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_2)); - __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_7)); - - /* "_geod.pyx":129 - * geod_inv(&self.geodesic_t) - * if self.geodesic_t.DIST != self.geodesic_t.DIST: # check for NaN - * raise ValueError('undefined inverse geodesic (may be an antipodal point)') # <<<<<<<<<<<<<< - * err = pj_ctx_get_errno(pj_get_default_ctx()) - * if err != 0: - */ - __pyx_k_tuple_8 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_8)); - __Pyx_INCREF(((PyObject *)__pyx_kp_s_4)); - PyTuple_SET_ITEM(__pyx_k_tuple_8, 0, ((PyObject *)__pyx_kp_s_4)); - __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_4)); - __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_8)); + __pyx_k_tuple_6 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_6)); + __Pyx_INCREF(((PyObject *)__pyx_kp_s_3)); + PyTuple_SET_ITEM(__pyx_k_tuple_6, 0, ((PyObject *)__pyx_kp_s_3)); + __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_3)); + __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_6)); __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; @@ -3178,6 +2721,7 @@ PyMODINIT_FUNC PyInit__geod(void) PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; + double __pyx_t_4; __Pyx_RefNannyDeclarations #if CYTHON_REFNANNY __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); @@ -3228,140 +2772,133 @@ PyMODINIT_FUNC PyInit__geod(void) /*--- Variable export code ---*/ /*--- Function export code ---*/ /*--- Type init code ---*/ - if (PyType_Ready(&__pyx_type_5_geod_Geod) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__Pyx_SetAttrString(__pyx_m, "Geod", (PyObject *)&__pyx_type_5_geod_Geod) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyType_Ready(&__pyx_type_5_geod_Geod) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__Pyx_SetAttrString(__pyx_m, "Geod", (PyObject *)&__pyx_type_5_geod_Geod) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_5_geod_Geod = &__pyx_type_5_geod_Geod; /*--- Type import code ---*/ /*--- Variable import code ---*/ /*--- Function import code ---*/ /*--- Execution code ---*/ - /* "/Volumes/User/jwhitaker/python/basemap.jswhit.git/src/_pyproj.pxi":1 + /* "_geod.pyx":1 * import math # <<<<<<<<<<<<<< * - * _dg2rad = math.radians(1.) + * cdef double _dg2rad, _rad2dg */ - __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__math), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__math), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetAttr(__pyx_m, __pyx_n_s__math, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_s__math, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Volumes/User/jwhitaker/python/basemap.jswhit.git/src/_pyproj.pxi":3 - * import math + /* "_geod.pyx":5 + * cdef double _dg2rad, _rad2dg * * _dg2rad = math.radians(1.) # <<<<<<<<<<<<<< * _rad2dg = math.degrees(1.) * _doublesize = sizeof(double) */ - __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__math); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__math); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__radians); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__radians); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyFloat_FromDouble(1.); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyFloat_FromDouble(1.); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_s___dg2rad, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_5_geod__dg2rad = __pyx_t_4; - /* "/Volumes/User/jwhitaker/python/basemap.jswhit.git/src/_pyproj.pxi":4 + /* "_geod.pyx":6 * * _dg2rad = math.radians(1.) * _rad2dg = math.degrees(1.) # <<<<<<<<<<<<<< * _doublesize = sizeof(double) - * __version__ = "1.9.0" + * */ - __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__math); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__math); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__degrees); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__degrees); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyFloat_FromDouble(1.); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyFloat_FromDouble(1.); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_s___rad2dg, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_5_geod__rad2dg = __pyx_t_4; - /* "/Volumes/User/jwhitaker/python/basemap.jswhit.git/src/_pyproj.pxi":5 + /* "_geod.pyx":7 * _dg2rad = math.radians(1.) * _rad2dg = math.degrees(1.) * _doublesize = sizeof(double) # <<<<<<<<<<<<<< - * __version__ = "1.9.0" * + * cdef extern from "Python.h": */ - __pyx_t_1 = __Pyx_PyInt_FromSize_t((sizeof(double))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_FromSize_t((sizeof(double))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetAttr(__pyx_m, __pyx_n_s___doublesize, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_s___doublesize, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Volumes/User/jwhitaker/python/basemap.jswhit.git/src/_pyproj.pxi":6 - * _rad2dg = math.degrees(1.) - * _doublesize = sizeof(double) - * __version__ = "1.9.0" # <<<<<<<<<<<<<< - * - * cdef extern from "stdlib.h": - */ - if (PyObject_SetAttr(__pyx_m, __pyx_n_s____version__, ((PyObject *)__pyx_kp_s_10)) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "_geod.pyx":29 - * return (self.__class__,(self.geodstring,)) + /* "_geod.pyx":59 + * return (self.__class__,(initstring,)) * - * def _fwd(self, object lons, object lats, object az, object dist, radians=False): # <<<<<<<<<<<<<< - * """ - * forward transformation - determine longitude, latitude and back azimuth + * def _fwd(self, lons, lats, az, dist, radians=False): # <<<<<<<<<<<<<< + * cdef Py_ssize_t buflenlons, buflenlats, buflenaz, buflend, ndim, i + * cdef double *lonsdata, *latsdata, *azdata, *distdata */ - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __pyx_k_1 = __pyx_t_1; + __pyx_k_2 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_geod.pyx":88 - * azdata[i] = _rad2dg*self.geodesic_t.ALPHA21 + /* "_geod.pyx":116 + * azdata[i] = _rad2dg*self.arc.az21 * * def _inv(self, object lons1, object lats1, object lons2, object lats2, radians=False): # <<<<<<<<<<<<<< * """ * inverse transformation - return forward and back azimuths, plus distance */ - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __pyx_k_6 = __pyx_t_1; + __pyx_k_5 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_geod.pyx":141 - * azdata[i] = self.geodesic_t.DIST + /* "_geod.pyx":175 + * azdata[i] = self.arc.S * * def _npts(self, double lon1, double lat1, double lon2, double lat2, int npts, radians=False): # <<<<<<<<<<<<<< * """ * given initial and terminus lat/lon, find npts intermediate points.""" */ - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __pyx_k_9 = __pyx_t_1; + __pyx_k_8 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; /* "_geod.pyx":1 - * # Make changes to this file, not the c-wrappers that Pyrex generates. # <<<<<<<<<<<<<< + * import math # <<<<<<<<<<<<<< * - * include "_pyproj.pxi" + * cdef double _dg2rad, _rad2dg */ __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); @@ -3420,6 +2957,32 @@ static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) { return result; } +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%s() takes %s %"PY_FORMAT_SIZE_T"d positional argument%s (%"PY_FORMAT_SIZE_T"d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + static void __Pyx_RaiseDoubleKeywordsError( const char* func_name, PyObject* kw_name) @@ -3512,32 +3075,6 @@ static int __Pyx_ParseOptionalKeywords( return -1; } -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%s() takes %s %"PY_FORMAT_SIZE_T"d positional argument%s (%"PY_FORMAT_SIZE_T"d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); -} - static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { PyObject *tmp_type, *tmp_value, *tmp_tb; PyThreadState *tstate = PyThreadState_GET(); @@ -3699,76 +3236,6 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject } #endif -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) { - PyObject *local_type, *local_value, *local_tb; - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - local_type = tstate->curexc_type; - local_value = tstate->curexc_value; - local_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; - PyErr_NormalizeException(&local_type, &local_value, &local_tb); - if (unlikely(tstate->curexc_type)) - goto bad; - #if PY_MAJOR_VERSION >= 3 - if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) - goto bad; - #endif - *type = local_type; - *value = local_value; - *tb = local_tb; - Py_INCREF(local_type); - Py_INCREF(local_value); - Py_INCREF(local_tb); - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = local_type; - tstate->exc_value = local_value; - tstate->exc_traceback = local_tb; - /* Make sure tstate is in a consistent state when we XDECREF - these objects (XDECREF may run arbitrary code). */ - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); - return 0; -bad: - *type = 0; - *value = 0; - *tb = 0; - Py_XDECREF(local_type); - Py_XDECREF(local_value); - Py_XDECREF(local_tb); - return -1; -} - - -static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) { - PyThreadState *tstate = PyThreadState_GET(); - *type = tstate->exc_type; - *value = tstate->exc_value; - *tb = tstate->exc_traceback; - Py_XINCREF(*type); - Py_XINCREF(*value); - Py_XINCREF(*tb); -} - -static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = type; - tstate->exc_value = value; - tstate->exc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -} - static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level) { PyObject *py_import = 0; PyObject *empty_list = 0; diff --git a/src/_geod.pyx b/src/_geod.pyx index bc1f07854..e703a2064 100644 --- a/src/_geod.pyx +++ b/src/_geod.pyx @@ -1,38 +1,62 @@ -# Make changes to this file, not the c-wrappers that Pyrex generates. +import math -include "_pyproj.pxi" +cdef double _dg2rad, _rad2dg + +_dg2rad = math.radians(1.) +_rad2dg = math.degrees(1.) +_doublesize = sizeof(double) + +cdef extern from "Python.h": + int PyObject_AsWriteBuffer(object, void **rbuf, Py_ssize_t *len) + +cdef extern from "project.h": + # Earth's elliptical constants. + # Element a units, typically meters, defines the units for + # all other length elements. + ctypedef struct PROJ_ELLIPS: + double a # semi-major axis or sphere radius + double f # ellpsoid flattening, if == 0 then sphere + double es # eccentricity squared, if == 0 then sphere + double one_es # 1-es + # 3D Geographic coordinate + ctypedef struct PROJ_PT_LPH: + double lam # longitude in radians + double phi # latitude in radians + double h # height above the ellpsoid + # Geodesic line structure + # Azimuths in radians clockwise from North. Distance units the + # same as element a in structure ellps. + ctypedef struct PROJ_LINE: + PROJ_PT_LPH *pt1 # pointer to geographic coord of first location + double az12 # azimuth from pt1 to pt2 (forward) + PROJ_PT_LPH *pt2 # pointer to geographic coord of second location + double az21 # azimuth from pt2 to pt1 (back) + double S # geodetic distance between points + PROJ_ELLIPS *E # pointer to ellpsoid constants + void proj_sp_inv(PROJ_LINE * A) + void proj_sp_fwd(PROJ_LINE * A) + void proj_in_fwd(PROJ_LINE * A) + void proj_in_inv(PROJ_LINE * A) cdef class Geod: - cdef GEODESIC_T geodesic_t - cdef public object geodstring - cdef public object proj_version - cdef char *geodinitstring + cdef PROJ_LINE arc + cdef PROJ_ELLIPS ellps + cdef PROJ_PT_LPH pt1, pt2 - def __cinit__(self, geodstring): - cdef GEODESIC_T GEOD_T - cdef int err - # setup geod initialization string. - self.geodstring = geodstring - bytestr = _strencode(geodstring) - self.geodinitstring = bytestr - # initialize projection - self.geodesic_t = GEOD_init_plus(self.geodinitstring, &GEOD_T)[0] - err = pj_ctx_get_errno(pj_get_default_ctx()) - if err != 0: - raise RuntimeError(pj_strerrno(err)) - self.proj_version = PJ_VERSION/100. + def __cinit__(self, object a, object f, object es, object sphere): + self.sphere = sphere + self.ellps.a = a + self.ellps.f = f + self.ellps.es = es + self.ellps.one_es = 1.-es + self.arc.E = &self.ellps def __reduce__(self): """special method that allows pyproj.Geod instance to be pickled""" - return (self.__class__,(self.geodstring,)) + initstring = '+a=%s +f=%s +es=%s' % (self.a, self.f, self.es) + return (self.__class__,(initstring,)) - def _fwd(self, object lons, object lats, object az, object dist, radians=False): - """ - forward transformation - determine longitude, latitude and back azimuth - of a terminus point given an initial point longitude and latitude, plus - forward azimuth and distance. - if radians=True, lons/lats are radians instead of degrees. - """ + def _fwd(self, lons, lats, az, dist, radians=False): cdef Py_ssize_t buflenlons, buflenlats, buflenaz, buflend, ndim, i cdef double *lonsdata, *latsdata, *azdata, *distdata cdef void *londata, *latdata, *azdat, *distdat @@ -56,34 +80,38 @@ cdef class Geod: distdata = distdat for i from 0 <= i < ndim: if radians: - self.geodesic_t.p1.v = lonsdata[i] - self.geodesic_t.p1.u = latsdata[i] - self.geodesic_t.ALPHA12 = azdata[i] - self.geodesic_t.DIST = distdata[i] + self.pt1.lam = lonsdata[i] + self.pt1.phi = latsdata[i] + self.pt1.h = 0. + self.arc.pt1 = &self.pt1 + self.arc.az12 = azdata[i] + self.arc.S = distdata[i] + else: + self.pt1.lam = _dg2rad*lonsdata[i] + self.pt1.phi = _dg2rad*latsdata[i] + self.pt1.h = 0. + self.arc.pt1 = &self.pt1 + self.arc.az12 = _dg2rad*azdata[i] + self.arc.S = distdata[i] +# Computes the location of the second point in the structure +# based on the first point's location and the distance and +# forward azumuth + if self.sphere: + proj_sp_fwd(&self.arc) else: - self.geodesic_t.p1.v = _dg2rad*lonsdata[i] - self.geodesic_t.p1.u = _dg2rad*latsdata[i] - self.geodesic_t.ALPHA12 = _dg2rad*azdata[i] - self.geodesic_t.DIST = distdata[i] - geod_pre(&self.geodesic_t) - err = pj_ctx_get_errno(pj_get_default_ctx()) - if err != 0: - raise RuntimeError(pj_strerrno(err)) - geod_for(&self.geodesic_t) - err = pj_ctx_get_errno(pj_get_default_ctx()) - if err != 0: - raise RuntimeError(pj_strerrno(err)) - # check for NaN. - if self.geodesic_t.ALPHA21 != self.geodesic_t.ALPHA21: - raise ValueError('undefined inverse geodesic (may be an antipodal point)') + proj_in_fwd(&self.arc) if radians: - lonsdata[i] = self.geodesic_t.p2.v - latsdata[i] = self.geodesic_t.p2.u - azdata[i] = self.geodesic_t.ALPHA21 + self.pt2.lam = self.arc.pt2.lam + self.pt2.phi = self.arc.pt2.phi + lonsdata[i] = self.pt2.lam + latsdata[i] = self.pt2.phi + azdata[i] = self.arc.az21 else: - lonsdata[i] = _rad2dg*self.geodesic_t.p2.v - latsdata[i] = _rad2dg*self.geodesic_t.p2.u - azdata[i] = _rad2dg*self.geodesic_t.ALPHA21 + self.pt2.lam = _rad2dg*self.arc.pt2.lam + self.pt2.phi = _rad2dg*self.arc.pt2.phi + lonsdata[i] = self.pt2.lam + latsdata[i] = self.pt2.phi + azdata[i] = _rad2dg*self.arc.az21 def _inv(self, object lons1, object lats1, object lons2, object lats2, radians=False): """ @@ -115,28 +143,34 @@ cdef class Geod: errmsg = 'undefined inverse geodesic (may be an antipodal point)' for i from 0 <= i < ndim: if radians: - self.geodesic_t.p1.v = lonsdata[i] - self.geodesic_t.p1.u = latsdata[i] - self.geodesic_t.p2.v = azdata[i] - self.geodesic_t.p2.u = distdata[i] + self.pt1.lam = lonsdata[i] + self.pt1.phi = latsdata[i] + self.pt1.h = 0. + self.pt2.lam = azdata[i] + self.pt2.phi = distdata[i] + self.arc.pt1 = &self.pt1 + self.arc.pt2 = &self.pt2 + else: + self.pt1.lam = _dg2rad*lonsdata[i] + self.pt1.phi = _dg2rad*latsdata[i] + self.pt1.h = 0. + self.pt2.lam = _dg2rad*azdata[i] + self.pt2.phi = _dg2rad*distdata[i] + self.arc.pt1 = &self.pt1 + self.arc.pt2 = &self.pt2 +# Computes distance, forward and back azimuths in structure +# for the two end points of the geodesic line + if self.sphere: + proj_sp_inv(&self.arc) else: - self.geodesic_t.p1.v = _dg2rad*lonsdata[i] - self.geodesic_t.p1.u = _dg2rad*latsdata[i] - self.geodesic_t.p2.v = _dg2rad*azdata[i] - self.geodesic_t.p2.u = _dg2rad*distdata[i] - geod_inv(&self.geodesic_t) - if self.geodesic_t.DIST != self.geodesic_t.DIST: # check for NaN - raise ValueError('undefined inverse geodesic (may be an antipodal point)') - err = pj_ctx_get_errno(pj_get_default_ctx()) - if err != 0: - raise RuntimeError(pj_strerrno(err)) + proj_in_inv(&self.arc) if radians: - lonsdata[i] = self.geodesic_t.ALPHA12 - latsdata[i] = self.geodesic_t.ALPHA21 + lonsdata[i] = self.arc.az12 + latsdata[i] = self.arc.az21 else: - lonsdata[i] = _rad2dg*self.geodesic_t.ALPHA12 - latsdata[i] = _rad2dg*self.geodesic_t.ALPHA21 - azdata[i] = self.geodesic_t.DIST + lonsdata[i] = _rad2dg*self.arc.az12 + latsdata[i] = _rad2dg*self.arc.az21 + azdata[i] = self.arc.S def _npts(self, double lon1, double lat1, double lon2, double lat2, int npts, radians=False): """ @@ -144,39 +178,41 @@ cdef class Geod: cdef int i cdef double del_s if radians: - self.geodesic_t.p1.v = lon1 - self.geodesic_t.p1.u = lat1 - self.geodesic_t.p2.v = lon2 - self.geodesic_t.p2.u = lat2 + self.pt1.lam = lon1 + self.pt1.phi = lat1 + self.pt1.h = 0. + self.pt2.lam = lon2 + self.pt2.phi = lat2 + self.arc.pt1 = &self.pt1 + self.arc.pt2 = &self.pt2 else: - self.geodesic_t.p1.v = _dg2rad*lon1 - self.geodesic_t.p1.u = _dg2rad*lat1 - self.geodesic_t.p2.v = _dg2rad*lon2 - self.geodesic_t.p2.u = _dg2rad*lat2 - # do inverse computation to set azimuths, distance. - geod_inv(&self.geodesic_t) - # set up some constants needed for forward computation. - geod_pre(&self.geodesic_t) + self.pt1.lam = _dg2rad*lon1 + self.pt1.phi = _dg2rad*lat1 + self.pt1.h = 0. + self.pt2.lam = _dg2rad*lon2 + self.pt2.phi = _dg2rad*lat2 + self.arc.pt1 = &self.pt1 + self.arc.pt2 = &self.pt2 + if self.sphere: + proj_sp_inv(&self.arc) + else: + proj_in_inv(&self.arc) # distance increment. - del_s = self.geodesic_t.DIST/(npts+1) + del_s = self.arc.S/(npts+1) # initialize output tuples. lats = () lons = () # loop over intermediate points, compute lat/lons. for i from 1 <= i < npts+1: - self.geodesic_t.DIST = i*del_s - geod_for(&self.geodesic_t) + self.arc.S = i*del_s + if self.sphere: + proj_sp_fwd(&self.arc) + else: + proj_in_fwd(&self.arc) if radians: - lats = lats + (self.geodesic_t.p2.u,) - lons = lons + (self.geodesic_t.p2.v,) + lats = lats + (self.pt2.phi,) + lons = lons + (self.pt2.lam.v,) else: - lats = lats + (_rad2dg*self.geodesic_t.p2.u,) - lons = lons + (_rad2dg*self.geodesic_t.p2.v,) + lats = lats + (_rad2dg*self.pt2.phi,) + lons = lons + (_rad2dg*self.pt2.lam,) return lons, lats - -cdef _strencode(pystr,encoding='ascii'): - # encode a string into bytes. If already bytes, do nothing. - try: - return pystr.encode(encoding) - except AttributeError: - return pystr # already bytes? diff --git a/src/_proj.c b/src/_proj.c index 75ffbab17..b9cc28743 100644 --- a/src/_proj.c +++ b/src/_proj.c @@ -1,4 +1,4 @@ -/* Generated by Cython 0.15.1 on Fri Dec 16 10:22:33 2011 */ +/* Generated by Cython 0.15.1 on Fri Dec 16 10:36:42 2011 */ #define PY_SSIZE_T_CLEAN #include "Python.h" @@ -326,7 +326,7 @@ static const char *__pyx_f[] = { struct __pyx_obj_5_proj_Proj; struct __pyx_opt_args_5_proj__strencode; -/* "_proj.pyx":294 +/* "_proj.pyx":297 * yy[i] = yy[i]*_rad2dg * * cdef _strencode(pystr,encoding='ascii'): # <<<<<<<<<<<<<< @@ -343,11 +343,12 @@ struct __pyx_opt_args_5_proj__strencode { * * cdef class Proj: # <<<<<<<<<<<<<< * cdef projPJ projpj - * cdef public object proj_version + * cdef projCtx projctx */ struct __pyx_obj_5_proj_Proj { PyObject_HEAD projPJ projpj; + projCtx projctx; PyObject *proj_version; char *pjinitstring; PyObject *srs; @@ -616,7 +617,7 @@ static PyObject *__pyx_pf_5_proj_set_datapath(PyObject *__pyx_self, PyObject *__ return __pyx_r; } -/* "_proj.pyx":19 +/* "_proj.pyx":20 * cdef public object srs * * def __cinit__(self, projstring): # <<<<<<<<<<<<<< @@ -657,7 +658,7 @@ static int __pyx_pf_5_proj_4Proj___cinit__(PyObject *__pyx_v_self, PyObject *__p else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { goto __pyx_L5_argtuple_error; @@ -668,14 +669,14 @@ static int __pyx_pf_5_proj_4Proj___cinit__(PyObject *__pyx_v_self, PyObject *__p } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("_proj.Proj.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; - /* "_proj.pyx":22 + /* "_proj.pyx":23 * # setup proj initialization string. * cdef int err * self.srs = projstring # <<<<<<<<<<<<<< @@ -688,49 +689,58 @@ static int __pyx_pf_5_proj_4Proj___cinit__(PyObject *__pyx_v_self, PyObject *__p __Pyx_DECREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs); ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs = __pyx_v_projstring; - /* "_proj.pyx":23 + /* "_proj.pyx":24 * cdef int err * self.srs = projstring * bytestr = _strencode(projstring) # <<<<<<<<<<<<<< * self.pjinitstring = bytestr * # initialize projection */ - __pyx_t_1 = __pyx_f_5_proj__strencode(__pyx_v_projstring, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __pyx_f_5_proj__strencode(__pyx_v_projstring, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_bytestr = __pyx_t_1; __pyx_t_1 = 0; - /* "_proj.pyx":24 + /* "_proj.pyx":25 * self.srs = projstring * bytestr = _strencode(projstring) * self.pjinitstring = bytestr # <<<<<<<<<<<<<< * # initialize projection - * self.projpj = pj_init_plus(self.pjinitstring) + * self.projctx = pj_ctx_alloc() */ - __pyx_t_2 = PyBytes_AsString(__pyx_v_bytestr); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyBytes_AsString(__pyx_v_bytestr); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;} ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->pjinitstring = __pyx_t_2; - /* "_proj.pyx":26 + /* "_proj.pyx":27 * self.pjinitstring = bytestr * # initialize projection - * self.projpj = pj_init_plus(self.pjinitstring) # <<<<<<<<<<<<<< - * err = pj_ctx_get_errno(pj_get_default_ctx()) - * if err != 0: + * self.projctx = pj_ctx_alloc() # <<<<<<<<<<<<<< + * self.projpj = pj_init_plus_ctx(self.projctx, self.pjinitstring) + * err = pj_ctx_get_errno(self.projctx) */ - ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projpj = pj_init_plus(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->pjinitstring); + ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projctx = pj_ctx_alloc(); - /* "_proj.pyx":27 + /* "_proj.pyx":28 * # initialize projection - * self.projpj = pj_init_plus(self.pjinitstring) - * err = pj_ctx_get_errno(pj_get_default_ctx()) # <<<<<<<<<<<<<< + * self.projctx = pj_ctx_alloc() + * self.projpj = pj_init_plus_ctx(self.projctx, self.pjinitstring) # <<<<<<<<<<<<<< + * err = pj_ctx_get_errno(self.projctx) + * if err != 0: + */ + ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projpj = pj_init_plus_ctx(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projctx, ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->pjinitstring); + + /* "_proj.pyx":29 + * self.projctx = pj_ctx_alloc() + * self.projpj = pj_init_plus_ctx(self.projctx, self.pjinitstring) + * err = pj_ctx_get_errno(self.projctx) # <<<<<<<<<<<<<< * if err != 0: * raise RuntimeError(pj_strerrno(err)) */ - __pyx_v_err = pj_ctx_get_errno(pj_get_default_ctx()); + __pyx_v_err = pj_ctx_get_errno(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projctx); - /* "_proj.pyx":28 - * self.projpj = pj_init_plus(self.pjinitstring) - * err = pj_ctx_get_errno(pj_get_default_ctx()) + /* "_proj.pyx":30 + * self.projpj = pj_init_plus_ctx(self.projctx, self.pjinitstring) + * err = pj_ctx_get_errno(self.projctx) * if err != 0: # <<<<<<<<<<<<<< * raise RuntimeError(pj_strerrno(err)) * self.proj_version = PJ_VERSION/100. @@ -738,38 +748,38 @@ static int __pyx_pf_5_proj_4Proj___cinit__(PyObject *__pyx_v_self, PyObject *__p __pyx_t_3 = (__pyx_v_err != 0); if (__pyx_t_3) { - /* "_proj.pyx":29 - * err = pj_ctx_get_errno(pj_get_default_ctx()) + /* "_proj.pyx":31 + * err = pj_ctx_get_errno(self.projctx) * if err != 0: * raise RuntimeError(pj_strerrno(err)) # <<<<<<<<<<<<<< * self.proj_version = PJ_VERSION/100. * */ - __pyx_t_1 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_1)); __Pyx_GIVEREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; - __pyx_t_1 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; - /* "_proj.pyx":30 + /* "_proj.pyx":32 * if err != 0: * raise RuntimeError(pj_strerrno(err)) * self.proj_version = PJ_VERSION/100. # <<<<<<<<<<<<<< * * def __dealloc__(self): */ - __pyx_t_1 = PyFloat_FromDouble((PJ_VERSION / 100.)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyFloat_FromDouble((PJ_VERSION / 100.)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->proj_version); @@ -790,7 +800,7 @@ static int __pyx_pf_5_proj_4Proj___cinit__(PyObject *__pyx_v_self, PyObject *__p return __pyx_r; } -/* "_proj.pyx":32 +/* "_proj.pyx":34 * self.proj_version = PJ_VERSION/100. * * def __dealloc__(self): # <<<<<<<<<<<<<< @@ -803,20 +813,29 @@ static void __pyx_pf_5_proj_4Proj_1__dealloc__(PyObject *__pyx_v_self) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__dealloc__"); - /* "_proj.pyx":34 + /* "_proj.pyx":36 * def __dealloc__(self): * """destroy projection definition""" * pj_free(self.projpj) # <<<<<<<<<<<<<< + * pj_ctx_free(self.projctx) * - * def __reduce__(self): */ pj_free(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projpj); + /* "_proj.pyx":37 + * """destroy projection definition""" + * pj_free(self.projpj) + * pj_ctx_free(self.projctx) # <<<<<<<<<<<<<< + * + * def __reduce__(self): + */ + pj_ctx_free(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projctx); + __Pyx_RefNannyFinishContext(); } -/* "_proj.pyx":36 - * pj_free(self.projpj) +/* "_proj.pyx":39 + * pj_ctx_free(self.projctx) * * def __reduce__(self): # <<<<<<<<<<<<<< * """special method that allows pyproj.Proj instance to be pickled""" @@ -836,7 +855,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_2__reduce__(PyObject *__pyx_v_self, CYTHO int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__reduce__"); - /* "_proj.pyx":38 + /* "_proj.pyx":41 * def __reduce__(self): * """special method that allows pyproj.Proj instance to be pickled""" * return (self.__class__,(self.srs,)) # <<<<<<<<<<<<<< @@ -844,14 +863,14 @@ static PyObject *__pyx_pf_5_proj_4Proj_2__reduce__(PyObject *__pyx_v_self, CYTHO * def _fwd(self, object lons, object lats, radians=False, errcheck=False): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_INCREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs); PyTuple_SET_ITEM(__pyx_t_2, 0, ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs); __Pyx_GIVEREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs); - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); @@ -877,7 +896,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_2__reduce__(PyObject *__pyx_v_self, CYTHO return __pyx_r; } -/* "_proj.pyx":40 +/* "_proj.pyx":43 * return (self.__class__,(self.srs,)) * * def _fwd(self, object lons, object lats, radians=False, errcheck=False): # <<<<<<<<<<<<<< @@ -942,7 +961,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lats); if (likely(values[1])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_fwd", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_fwd", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { @@ -956,7 +975,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_fwd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_fwd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { @@ -975,14 +994,14 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_fwd", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_fwd", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("_proj.Proj._fwd", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - /* "_proj.pyx":55 + /* "_proj.pyx":58 * cdef int err * # if buffer api is supported, get pointer to data buffers. * if PyObject_AsWriteBuffer(lons, &londata, &buflenx) <> 0: # <<<<<<<<<<<<<< @@ -992,7 +1011,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lons, (&__pyx_v_londata), (&__pyx_v_buflenx)) != 0); if (__pyx_t_1) { - /* "_proj.pyx":56 + /* "_proj.pyx":59 * # if buffer api is supported, get pointer to data buffers. * if PyObject_AsWriteBuffer(lons, &londata, &buflenx) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -1000,12 +1019,12 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ * raise RuntimeError */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; - /* "_proj.pyx":57 + /* "_proj.pyx":60 * if PyObject_AsWriteBuffer(lons, &londata, &buflenx) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(lats, &latdata, &bufleny) <> 0: # <<<<<<<<<<<<<< @@ -1015,7 +1034,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lats, (&__pyx_v_latdata), (&__pyx_v_bufleny)) != 0); if (__pyx_t_1) { - /* "_proj.pyx":58 + /* "_proj.pyx":61 * raise RuntimeError * if PyObject_AsWriteBuffer(lats, &latdata, &bufleny) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -1023,12 +1042,12 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ * if buflenx != bufleny: */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L7; } __pyx_L7:; - /* "_proj.pyx":60 + /* "_proj.pyx":63 * raise RuntimeError * # process data in buffer * if buflenx != bufleny: # <<<<<<<<<<<<<< @@ -1038,42 +1057,42 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (__pyx_v_buflenx != __pyx_v_bufleny); if (__pyx_t_1) { - /* "_proj.pyx":61 + /* "_proj.pyx":64 * # process data in buffer * if buflenx != bufleny: * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< * ndim = buflenx//_doublesize * lonsdata = londata */ - __pyx_t_2 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L8; } __pyx_L8:; - /* "_proj.pyx":62 + /* "_proj.pyx":65 * if buflenx != bufleny: * raise RuntimeError("Buffer lengths not the same") * ndim = buflenx//_doublesize # <<<<<<<<<<<<<< * lonsdata = londata * latsdata = latdata */ - __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_buflenx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_buflenx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_FloorDivide(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyNumber_FloorDivide(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_ndim = __pyx_t_5; - /* "_proj.pyx":63 + /* "_proj.pyx":66 * raise RuntimeError("Buffer lengths not the same") * ndim = buflenx//_doublesize * lonsdata = londata # <<<<<<<<<<<<<< @@ -1082,7 +1101,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_lonsdata = ((double *)__pyx_v_londata); - /* "_proj.pyx":64 + /* "_proj.pyx":67 * ndim = buflenx//_doublesize * lonsdata = londata * latsdata = latdata # <<<<<<<<<<<<<< @@ -1091,7 +1110,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_latsdata = ((double *)__pyx_v_latdata); - /* "_proj.pyx":65 + /* "_proj.pyx":68 * lonsdata = londata * latsdata = latdata * for i from 0 <= i < ndim: # <<<<<<<<<<<<<< @@ -1101,7 +1120,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_5 = __pyx_v_ndim; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_5; __pyx_v_i++) { - /* "_proj.pyx":67 + /* "_proj.pyx":70 * for i from 0 <= i < ndim: * # if inputs are nan's, return big number. * if lonsdata[i] != lonsdata[i] or latsdata[i] != latsdata[i]: # <<<<<<<<<<<<<< @@ -1117,7 +1136,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } if (__pyx_t_7) { - /* "_proj.pyx":68 + /* "_proj.pyx":71 * # if inputs are nan's, return big number. * if lonsdata[i] != lonsdata[i] or latsdata[i] != latsdata[i]: * lonsdata[i]=1.e30; latsdata[i]=1.e30 # <<<<<<<<<<<<<< @@ -1127,33 +1146,33 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ (__pyx_v_lonsdata[__pyx_v_i]) = 1.e30; (__pyx_v_latsdata[__pyx_v_i]) = 1.e30; - /* "_proj.pyx":69 + /* "_proj.pyx":72 * if lonsdata[i] != lonsdata[i] or latsdata[i] != latsdata[i]: * lonsdata[i]=1.e30; latsdata[i]=1.e30 * if errcheck: # <<<<<<<<<<<<<< * raise RuntimeError('projection undefined') * continue */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_7) { - /* "_proj.pyx":70 + /* "_proj.pyx":73 * lonsdata[i]=1.e30; latsdata[i]=1.e30 * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * continue * if radians: */ - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_6), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_6), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L12; } __pyx_L12:; - /* "_proj.pyx":71 + /* "_proj.pyx":74 * if errcheck: * raise RuntimeError('projection undefined') * continue # <<<<<<<<<<<<<< @@ -1165,17 +1184,17 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } __pyx_L11:; - /* "_proj.pyx":72 + /* "_proj.pyx":75 * raise RuntimeError('projection undefined') * continue * if radians: # <<<<<<<<<<<<<< * projlonlatin.u = lonsdata[i] * projlonlatin.v = latsdata[i] */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_7) { - /* "_proj.pyx":73 + /* "_proj.pyx":76 * continue * if radians: * projlonlatin.u = lonsdata[i] # <<<<<<<<<<<<<< @@ -1184,7 +1203,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_projlonlatin.u = (__pyx_v_lonsdata[__pyx_v_i]); - /* "_proj.pyx":74 + /* "_proj.pyx":77 * if radians: * projlonlatin.u = lonsdata[i] * projlonlatin.v = latsdata[i] # <<<<<<<<<<<<<< @@ -1196,77 +1215,77 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } /*else*/ { - /* "_proj.pyx":76 + /* "_proj.pyx":79 * projlonlatin.v = latsdata[i] * else: * projlonlatin.u = _dg2rad*lonsdata[i] # <<<<<<<<<<<<<< * projlonlatin.v = _dg2rad*latsdata[i] * projxyout = pj_fwd(projlonlatin,self.projpj) */ - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyFloat_FromDouble((__pyx_v_lonsdata[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyFloat_FromDouble((__pyx_v_lonsdata[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_projlonlatin.u = __pyx_t_8; - /* "_proj.pyx":77 + /* "_proj.pyx":80 * else: * projlonlatin.u = _dg2rad*lonsdata[i] * projlonlatin.v = _dg2rad*latsdata[i] # <<<<<<<<<<<<<< * projxyout = pj_fwd(projlonlatin,self.projpj) * if errcheck: */ - __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyFloat_FromDouble((__pyx_v_latsdata[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyFloat_FromDouble((__pyx_v_latsdata[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_projlonlatin.v = __pyx_t_8; } __pyx_L13:; - /* "_proj.pyx":78 + /* "_proj.pyx":81 * projlonlatin.u = _dg2rad*lonsdata[i] * projlonlatin.v = _dg2rad*latsdata[i] * projxyout = pj_fwd(projlonlatin,self.projpj) # <<<<<<<<<<<<<< * if errcheck: - * err = pj_ctx_get_errno(pj_get_default_ctx()) + * err = pj_ctx_get_errno(self.projctx) */ __pyx_v_projxyout = pj_fwd(__pyx_v_projlonlatin, ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projpj); - /* "_proj.pyx":79 + /* "_proj.pyx":82 * projlonlatin.v = _dg2rad*latsdata[i] * projxyout = pj_fwd(projlonlatin,self.projpj) * if errcheck: # <<<<<<<<<<<<<< - * err = pj_ctx_get_errno(pj_get_default_ctx()) + * err = pj_ctx_get_errno(self.projctx) * if err != 0: */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_7) { - /* "_proj.pyx":80 + /* "_proj.pyx":83 * projxyout = pj_fwd(projlonlatin,self.projpj) * if errcheck: - * err = pj_ctx_get_errno(pj_get_default_ctx()) # <<<<<<<<<<<<<< + * err = pj_ctx_get_errno(self.projctx) # <<<<<<<<<<<<<< * if err != 0: * raise RuntimeError(pj_strerrno(err)) */ - __pyx_v_err = pj_ctx_get_errno(pj_get_default_ctx()); + __pyx_v_err = pj_ctx_get_errno(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projctx); - /* "_proj.pyx":81 + /* "_proj.pyx":84 * if errcheck: - * err = pj_ctx_get_errno(pj_get_default_ctx()) + * err = pj_ctx_get_errno(self.projctx) * if err != 0: # <<<<<<<<<<<<<< * raise RuntimeError(pj_strerrno(err)) * # since HUGE_VAL can be 'inf', @@ -1274,26 +1293,26 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_7 = (__pyx_v_err != 0); if (__pyx_t_7) { - /* "_proj.pyx":82 - * err = pj_ctx_get_errno(pj_get_default_ctx()) + /* "_proj.pyx":85 + * err = pj_ctx_get_errno(self.projctx) * if err != 0: * raise RuntimeError(pj_strerrno(err)) # <<<<<<<<<<<<<< * # since HUGE_VAL can be 'inf', * # change it to a real (but very large) number. */ - __pyx_t_4 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_4)); __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L15; } __pyx_L15:; @@ -1301,7 +1320,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } __pyx_L14:; - /* "_proj.pyx":86 + /* "_proj.pyx":89 * # change it to a real (but very large) number. * # also check for NaNs. * if projxyout.u == HUGE_VAL or\ # <<<<<<<<<<<<<< @@ -1311,7 +1330,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_7 = (__pyx_v_projxyout.u == HUGE_VAL); if (!__pyx_t_7) { - /* "_proj.pyx":87 + /* "_proj.pyx":90 * # also check for NaNs. * if projxyout.u == HUGE_VAL or\ * projxyout.u != projxyout.u: # <<<<<<<<<<<<<< @@ -1325,33 +1344,33 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } if (__pyx_t_6) { - /* "_proj.pyx":88 + /* "_proj.pyx":91 * if projxyout.u == HUGE_VAL or\ * projxyout.u != projxyout.u: * if errcheck: # <<<<<<<<<<<<<< * raise RuntimeError('projection undefined') * lonsdata[i] = 1.e30 */ - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_6) { - /* "_proj.pyx":89 + /* "_proj.pyx":92 * projxyout.u != projxyout.u: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * lonsdata[i] = 1.e30 * else: */ - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_7), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_7), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L17; } __pyx_L17:; - /* "_proj.pyx":90 + /* "_proj.pyx":93 * if errcheck: * raise RuntimeError('projection undefined') * lonsdata[i] = 1.e30 # <<<<<<<<<<<<<< @@ -1363,7 +1382,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } /*else*/ { - /* "_proj.pyx":92 + /* "_proj.pyx":95 * lonsdata[i] = 1.e30 * else: * lonsdata[i] = projxyout.u # <<<<<<<<<<<<<< @@ -1374,7 +1393,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } __pyx_L16:; - /* "_proj.pyx":93 + /* "_proj.pyx":96 * else: * lonsdata[i] = projxyout.u * if projxyout.v == HUGE_VAL or\ # <<<<<<<<<<<<<< @@ -1384,7 +1403,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_6 = (__pyx_v_projxyout.v == HUGE_VAL); if (!__pyx_t_6) { - /* "_proj.pyx":94 + /* "_proj.pyx":97 * lonsdata[i] = projxyout.u * if projxyout.v == HUGE_VAL or\ * projxyout.u != projxyout.u: # <<<<<<<<<<<<<< @@ -1398,33 +1417,33 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } if (__pyx_t_1) { - /* "_proj.pyx":95 + /* "_proj.pyx":98 * if projxyout.v == HUGE_VAL or\ * projxyout.u != projxyout.u: * if errcheck: # <<<<<<<<<<<<<< * raise RuntimeError('projection undefined') * latsdata[i] = 1.e30 */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_1) { - /* "_proj.pyx":96 + /* "_proj.pyx":99 * projxyout.u != projxyout.u: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * latsdata[i] = 1.e30 * else: */ - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_8), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_8), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L19; } __pyx_L19:; - /* "_proj.pyx":97 + /* "_proj.pyx":100 * if errcheck: * raise RuntimeError('projection undefined') * latsdata[i] = 1.e30 # <<<<<<<<<<<<<< @@ -1436,7 +1455,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } /*else*/ { - /* "_proj.pyx":99 + /* "_proj.pyx":102 * latsdata[i] = 1.e30 * else: * latsdata[i] = projxyout.v # <<<<<<<<<<<<<< @@ -1463,7 +1482,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ return __pyx_r; } -/* "_proj.pyx":101 +/* "_proj.pyx":104 * latsdata[i] = projxyout.v * * def _inv(self, object x, object y, radians=False, errcheck=False): # <<<<<<<<<<<<<< @@ -1528,7 +1547,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y); if (likely(values[1])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_inv", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_inv", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { @@ -1542,7 +1561,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_inv") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_inv") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { @@ -1561,14 +1580,14 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_inv", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_inv", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("_proj.Proj._inv", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - /* "_proj.pyx":115 + /* "_proj.pyx":118 * cdef double *xdatab, *ydatab * # if buffer api is supported, get pointer to data buffers. * if PyObject_AsWriteBuffer(x, &xdata, &buflenx) <> 0: # <<<<<<<<<<<<<< @@ -1578,7 +1597,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_x, (&__pyx_v_xdata), (&__pyx_v_buflenx)) != 0); if (__pyx_t_1) { - /* "_proj.pyx":116 + /* "_proj.pyx":119 * # if buffer api is supported, get pointer to data buffers. * if PyObject_AsWriteBuffer(x, &xdata, &buflenx) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -1586,12 +1605,12 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ * raise RuntimeError */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; - /* "_proj.pyx":117 + /* "_proj.pyx":120 * if PyObject_AsWriteBuffer(x, &xdata, &buflenx) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(y, &ydata, &bufleny) <> 0: # <<<<<<<<<<<<<< @@ -1601,7 +1620,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_y, (&__pyx_v_ydata), (&__pyx_v_bufleny)) != 0); if (__pyx_t_1) { - /* "_proj.pyx":118 + /* "_proj.pyx":121 * raise RuntimeError * if PyObject_AsWriteBuffer(y, &ydata, &bufleny) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -1609,12 +1628,12 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ * # (for numpy/regular python arrays). */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L7; } __pyx_L7:; - /* "_proj.pyx":121 + /* "_proj.pyx":124 * # process data in buffer * # (for numpy/regular python arrays). * if buflenx != bufleny: # <<<<<<<<<<<<<< @@ -1624,42 +1643,42 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (__pyx_v_buflenx != __pyx_v_bufleny); if (__pyx_t_1) { - /* "_proj.pyx":122 + /* "_proj.pyx":125 * # (for numpy/regular python arrays). * if buflenx != bufleny: * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< * ndim = buflenx//_doublesize * xdatab = xdata */ - __pyx_t_2 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_11), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_11), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L8; } __pyx_L8:; - /* "_proj.pyx":123 + /* "_proj.pyx":126 * if buflenx != bufleny: * raise RuntimeError("Buffer lengths not the same") * ndim = buflenx//_doublesize # <<<<<<<<<<<<<< * xdatab = xdata * ydatab = ydata */ - __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_buflenx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_buflenx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_FloorDivide(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyNumber_FloorDivide(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_ndim = __pyx_t_5; - /* "_proj.pyx":124 + /* "_proj.pyx":127 * raise RuntimeError("Buffer lengths not the same") * ndim = buflenx//_doublesize * xdatab = xdata # <<<<<<<<<<<<<< @@ -1668,7 +1687,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_xdatab = ((double *)__pyx_v_xdata); - /* "_proj.pyx":125 + /* "_proj.pyx":128 * ndim = buflenx//_doublesize * xdatab = xdata * ydatab = ydata # <<<<<<<<<<<<<< @@ -1677,7 +1696,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_ydatab = ((double *)__pyx_v_ydata); - /* "_proj.pyx":126 + /* "_proj.pyx":129 * xdatab = xdata * ydatab = ydata * for i from 0 <= i < ndim: # <<<<<<<<<<<<<< @@ -1687,7 +1706,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_5 = __pyx_v_ndim; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_5; __pyx_v_i++) { - /* "_proj.pyx":128 + /* "_proj.pyx":131 * for i from 0 <= i < ndim: * # if inputs are nan's, return big number. * if xdatab[i] != xdatab[i] or ydatab[i] != ydatab[i]: # <<<<<<<<<<<<<< @@ -1703,7 +1722,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ } if (__pyx_t_7) { - /* "_proj.pyx":129 + /* "_proj.pyx":132 * # if inputs are nan's, return big number. * if xdatab[i] != xdatab[i] or ydatab[i] != ydatab[i]: * xdatab[i]=1.e30; ydatab[i]=1.e30 # <<<<<<<<<<<<<< @@ -1713,33 +1732,33 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ (__pyx_v_xdatab[__pyx_v_i]) = 1.e30; (__pyx_v_ydatab[__pyx_v_i]) = 1.e30; - /* "_proj.pyx":130 + /* "_proj.pyx":133 * if xdatab[i] != xdatab[i] or ydatab[i] != ydatab[i]: * xdatab[i]=1.e30; ydatab[i]=1.e30 * if errcheck: # <<<<<<<<<<<<<< * raise RuntimeError('projection undefined') * continue */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_7) { - /* "_proj.pyx":131 + /* "_proj.pyx":134 * xdatab[i]=1.e30; ydatab[i]=1.e30 * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * continue * projxyin.u = xdatab[i] */ - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_12), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_12), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L12; } __pyx_L12:; - /* "_proj.pyx":132 + /* "_proj.pyx":135 * if errcheck: * raise RuntimeError('projection undefined') * continue # <<<<<<<<<<<<<< @@ -1751,7 +1770,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ } __pyx_L11:; - /* "_proj.pyx":133 + /* "_proj.pyx":136 * raise RuntimeError('projection undefined') * continue * projxyin.u = xdatab[i] # <<<<<<<<<<<<<< @@ -1760,7 +1779,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_projxyin.u = (__pyx_v_xdatab[__pyx_v_i]); - /* "_proj.pyx":134 + /* "_proj.pyx":137 * continue * projxyin.u = xdatab[i] * projxyin.v = ydatab[i] # <<<<<<<<<<<<<< @@ -1769,37 +1788,37 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_projxyin.v = (__pyx_v_ydatab[__pyx_v_i]); - /* "_proj.pyx":135 + /* "_proj.pyx":138 * projxyin.u = xdatab[i] * projxyin.v = ydatab[i] * projlonlatout = pj_inv(projxyin,self.projpj) # <<<<<<<<<<<<<< * if errcheck: - * err = pj_ctx_get_errno(pj_get_default_ctx()) + * err = pj_ctx_get_errno(self.projctx) */ __pyx_v_projlonlatout = pj_inv(__pyx_v_projxyin, ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projpj); - /* "_proj.pyx":136 + /* "_proj.pyx":139 * projxyin.v = ydatab[i] * projlonlatout = pj_inv(projxyin,self.projpj) * if errcheck: # <<<<<<<<<<<<<< - * err = pj_ctx_get_errno(pj_get_default_ctx()) + * err = pj_ctx_get_errno(self.projctx) * if err != 0: */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_7) { - /* "_proj.pyx":137 + /* "_proj.pyx":140 * projlonlatout = pj_inv(projxyin,self.projpj) * if errcheck: - * err = pj_ctx_get_errno(pj_get_default_ctx()) # <<<<<<<<<<<<<< + * err = pj_ctx_get_errno(self.projctx) # <<<<<<<<<<<<<< * if err != 0: * raise RuntimeError(pj_strerrno(err)) */ - __pyx_v_err = pj_ctx_get_errno(pj_get_default_ctx()); + __pyx_v_err = pj_ctx_get_errno(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projctx); - /* "_proj.pyx":138 + /* "_proj.pyx":141 * if errcheck: - * err = pj_ctx_get_errno(pj_get_default_ctx()) + * err = pj_ctx_get_errno(self.projctx) * if err != 0: # <<<<<<<<<<<<<< * raise RuntimeError(pj_strerrno(err)) * # since HUGE_VAL can be 'inf', @@ -1807,26 +1826,26 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_7 = (__pyx_v_err != 0); if (__pyx_t_7) { - /* "_proj.pyx":139 - * err = pj_ctx_get_errno(pj_get_default_ctx()) + /* "_proj.pyx":142 + * err = pj_ctx_get_errno(self.projctx) * if err != 0: * raise RuntimeError(pj_strerrno(err)) # <<<<<<<<<<<<<< * # since HUGE_VAL can be 'inf', * # change it to a real (but very large) number. */ - __pyx_t_4 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_4)); __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L14; } __pyx_L14:; @@ -1834,7 +1853,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ } __pyx_L13:; - /* "_proj.pyx":143 + /* "_proj.pyx":146 * # change it to a real (but very large) number. * # also check for NaNs. * if projlonlatout.u == HUGE_VAL or \ # <<<<<<<<<<<<<< @@ -1844,7 +1863,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_7 = (__pyx_v_projlonlatout.u == HUGE_VAL); if (!__pyx_t_7) { - /* "_proj.pyx":144 + /* "_proj.pyx":147 * # also check for NaNs. * if projlonlatout.u == HUGE_VAL or \ * projlonlatout.u != projlonlatout.u: # <<<<<<<<<<<<<< @@ -1858,33 +1877,33 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ } if (__pyx_t_6) { - /* "_proj.pyx":145 + /* "_proj.pyx":148 * if projlonlatout.u == HUGE_VAL or \ * projlonlatout.u != projlonlatout.u: * if errcheck: # <<<<<<<<<<<<<< * raise RuntimeError('projection undefined') * xdatab[i] = 1.e30 */ - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_6) { - /* "_proj.pyx":146 + /* "_proj.pyx":149 * projlonlatout.u != projlonlatout.u: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * xdatab[i] = 1.e30 * elif radians: */ - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_13), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_13), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L16; } __pyx_L16:; - /* "_proj.pyx":147 + /* "_proj.pyx":150 * if errcheck: * raise RuntimeError('projection undefined') * xdatab[i] = 1.e30 # <<<<<<<<<<<<<< @@ -1895,17 +1914,17 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ goto __pyx_L15; } - /* "_proj.pyx":148 + /* "_proj.pyx":151 * raise RuntimeError('projection undefined') * xdatab[i] = 1.e30 * elif radians: # <<<<<<<<<<<<<< * xdatab[i] = projlonlatout.u * else: */ - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_6) { - /* "_proj.pyx":149 + /* "_proj.pyx":152 * xdatab[i] = 1.e30 * elif radians: * xdatab[i] = projlonlatout.u # <<<<<<<<<<<<<< @@ -1917,28 +1936,28 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ } /*else*/ { - /* "_proj.pyx":151 + /* "_proj.pyx":154 * xdatab[i] = projlonlatout.u * else: * xdatab[i] = _rad2dg*projlonlatout.u # <<<<<<<<<<<<<< * if projlonlatout.v == HUGE_VAL or \ * projlonlatout.v != projlonlatout.v: */ - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyFloat_FromDouble(__pyx_v_projlonlatout.u); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyFloat_FromDouble(__pyx_v_projlonlatout.u); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; (__pyx_v_xdatab[__pyx_v_i]) = __pyx_t_8; } __pyx_L15:; - /* "_proj.pyx":152 + /* "_proj.pyx":155 * else: * xdatab[i] = _rad2dg*projlonlatout.u * if projlonlatout.v == HUGE_VAL or \ # <<<<<<<<<<<<<< @@ -1948,7 +1967,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_6 = (__pyx_v_projlonlatout.v == HUGE_VAL); if (!__pyx_t_6) { - /* "_proj.pyx":153 + /* "_proj.pyx":156 * xdatab[i] = _rad2dg*projlonlatout.u * if projlonlatout.v == HUGE_VAL or \ * projlonlatout.v != projlonlatout.v: # <<<<<<<<<<<<<< @@ -1962,33 +1981,33 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ } if (__pyx_t_1) { - /* "_proj.pyx":154 + /* "_proj.pyx":157 * if projlonlatout.v == HUGE_VAL or \ * projlonlatout.v != projlonlatout.v: * if errcheck: # <<<<<<<<<<<<<< * raise RuntimeError('projection undefined') * ydatab[i] = 1.e30 */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_1) { - /* "_proj.pyx":155 + /* "_proj.pyx":158 * projlonlatout.v != projlonlatout.v: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * ydatab[i] = 1.e30 * elif radians: */ - __pyx_t_2 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_14), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_14), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L18; } __pyx_L18:; - /* "_proj.pyx":156 + /* "_proj.pyx":159 * if errcheck: * raise RuntimeError('projection undefined') * ydatab[i] = 1.e30 # <<<<<<<<<<<<<< @@ -1999,17 +2018,17 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ goto __pyx_L17; } - /* "_proj.pyx":157 + /* "_proj.pyx":160 * raise RuntimeError('projection undefined') * ydatab[i] = 1.e30 * elif radians: # <<<<<<<<<<<<<< * ydatab[i] = projlonlatout.v * else: */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_1) { - /* "_proj.pyx":158 + /* "_proj.pyx":161 * ydatab[i] = 1.e30 * elif radians: * ydatab[i] = projlonlatout.v # <<<<<<<<<<<<<< @@ -2021,22 +2040,22 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ } /*else*/ { - /* "_proj.pyx":160 + /* "_proj.pyx":163 * ydatab[i] = projlonlatout.v * else: * ydatab[i] = _rad2dg*projlonlatout.v # <<<<<<<<<<<<<< * * # def _fwdn(self, c_numpy.ndarray lonlat, radians=False, errcheck=False): */ - __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyFloat_FromDouble(__pyx_v_projlonlatout.v); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyFloat_FromDouble(__pyx_v_projlonlatout.v); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; (__pyx_v_ydatab[__pyx_v_i]) = __pyx_t_8; } @@ -2058,7 +2077,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ return __pyx_r; } -/* "_proj.pyx":239 +/* "_proj.pyx":242 * # llptr[i].v = _rad2dg*projlonlatout.v * * def is_latlong(self): # <<<<<<<<<<<<<< @@ -2077,7 +2096,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO int __pyx_clineno = 0; __Pyx_RefNannySetupContext("is_latlong"); - /* "_proj.pyx":242 + /* "_proj.pyx":245 * # returns True if projection in geographic (lon/lat) coordinates * cdef int i * i = pj_is_latlong(self.projpj) # <<<<<<<<<<<<<< @@ -2086,7 +2105,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO */ __pyx_v_i = pj_is_latlong(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projpj); - /* "_proj.pyx":243 + /* "_proj.pyx":246 * cdef int i * i = pj_is_latlong(self.projpj) * if i: # <<<<<<<<<<<<<< @@ -2095,7 +2114,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO */ if (__pyx_v_i) { - /* "_proj.pyx":244 + /* "_proj.pyx":247 * i = pj_is_latlong(self.projpj) * if i: * return True # <<<<<<<<<<<<<< @@ -2103,7 +2122,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO * return False */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; @@ -2112,7 +2131,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO } /*else*/ { - /* "_proj.pyx":246 + /* "_proj.pyx":249 * return True * else: * return False # <<<<<<<<<<<<<< @@ -2120,7 +2139,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO * def is_geocent(self): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; @@ -2140,7 +2159,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO return __pyx_r; } -/* "_proj.pyx":248 +/* "_proj.pyx":251 * return False * * def is_geocent(self): # <<<<<<<<<<<<<< @@ -2159,7 +2178,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHO int __pyx_clineno = 0; __Pyx_RefNannySetupContext("is_geocent"); - /* "_proj.pyx":251 + /* "_proj.pyx":254 * # returns True if projection in geocentric (x/y) coordinates * cdef int i * i = pj_is_geocent(self.projpj) # <<<<<<<<<<<<<< @@ -2168,7 +2187,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHO */ __pyx_v_i = pj_is_geocent(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projpj); - /* "_proj.pyx":252 + /* "_proj.pyx":255 * cdef int i * i = pj_is_geocent(self.projpj) * if i: # <<<<<<<<<<<<<< @@ -2177,7 +2196,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHO */ if (__pyx_v_i) { - /* "_proj.pyx":253 + /* "_proj.pyx":256 * i = pj_is_geocent(self.projpj) * if i: * return True # <<<<<<<<<<<<<< @@ -2185,7 +2204,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHO * return False */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; @@ -2194,7 +2213,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHO } /*else*/ { - /* "_proj.pyx":255 + /* "_proj.pyx":258 * return True * else: * return False # <<<<<<<<<<<<<< @@ -2202,7 +2221,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHO * def _transform(Proj p1, Proj p2, inx, iny, inz, radians): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; @@ -2222,9 +2241,9 @@ static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHO return __pyx_r; } -/* "_proj.pyx":15 - * cdef class Proj: +/* "_proj.pyx":16 * cdef projPJ projpj + * cdef projCtx projctx * cdef public object proj_version # <<<<<<<<<<<<<< * cdef char *pjinitstring * cdef public object srs @@ -2279,7 +2298,7 @@ static int __pyx_pf_5_proj_4Proj_12proj_version_2__del__(PyObject *__pyx_v_self) return __pyx_r; } -/* "_proj.pyx":17 +/* "_proj.pyx":18 * cdef public object proj_version * cdef char *pjinitstring * cdef public object srs # <<<<<<<<<<<<<< @@ -2336,7 +2355,7 @@ static int __pyx_pf_5_proj_4Proj_3srs_2__del__(PyObject *__pyx_v_self) { return __pyx_r; } -/* "_proj.pyx":257 +/* "_proj.pyx":260 * return False * * def _transform(Proj p1, Proj p2, inx, iny, inz, radians): # <<<<<<<<<<<<<< @@ -2405,35 +2424,35 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p2); if (likely(values[1])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__inx); if (likely(values[2])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__iny); if (likely(values[3])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 4: values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__inz); if (likely(values[4])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 5: values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__radians); if (likely(values[5])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_transform") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_transform") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 6) { goto __pyx_L5_argtuple_error; @@ -2454,16 +2473,16 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("_proj._transform", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_p1), __pyx_ptype_5_proj_Proj, 1, "p1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_p2), __pyx_ptype_5_proj_Proj, 1, "p2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_p1), __pyx_ptype_5_proj_Proj, 1, "p1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_p2), __pyx_ptype_5_proj_Proj, 1, "p2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /* "_proj.pyx":263 + /* "_proj.pyx":266 * cdef Py_ssize_t buflenx, bufleny, buflenz, npts, i * cdef int err * if PyObject_AsWriteBuffer(inx, &xdata, &buflenx) <> 0: # <<<<<<<<<<<<<< @@ -2473,7 +2492,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_inx, (&__pyx_v_xdata), (&__pyx_v_buflenx)) != 0); if (__pyx_t_1) { - /* "_proj.pyx":264 + /* "_proj.pyx":267 * cdef int err * if PyObject_AsWriteBuffer(inx, &xdata, &buflenx) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -2481,12 +2500,12 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p * raise RuntimeError */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; - /* "_proj.pyx":265 + /* "_proj.pyx":268 * if PyObject_AsWriteBuffer(inx, &xdata, &buflenx) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(iny, &ydata, &bufleny) <> 0: # <<<<<<<<<<<<<< @@ -2496,7 +2515,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_iny, (&__pyx_v_ydata), (&__pyx_v_bufleny)) != 0); if (__pyx_t_1) { - /* "_proj.pyx":266 + /* "_proj.pyx":269 * raise RuntimeError * if PyObject_AsWriteBuffer(iny, &ydata, &bufleny) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -2504,12 +2523,12 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p * if PyObject_AsWriteBuffer(inz, &zdata, &buflenz) <> 0: */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L7; } __pyx_L7:; - /* "_proj.pyx":267 + /* "_proj.pyx":270 * if PyObject_AsWriteBuffer(iny, &ydata, &bufleny) <> 0: * raise RuntimeError * if inz is not None: # <<<<<<<<<<<<<< @@ -2519,7 +2538,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_1 = (__pyx_v_inz != Py_None); if (__pyx_t_1) { - /* "_proj.pyx":268 + /* "_proj.pyx":271 * raise RuntimeError * if inz is not None: * if PyObject_AsWriteBuffer(inz, &zdata, &buflenz) <> 0: # <<<<<<<<<<<<<< @@ -2529,7 +2548,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_inz, (&__pyx_v_zdata), (&__pyx_v_buflenz)) != 0); if (__pyx_t_1) { - /* "_proj.pyx":269 + /* "_proj.pyx":272 * if inz is not None: * if PyObject_AsWriteBuffer(inz, &zdata, &buflenz) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -2537,7 +2556,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p * buflenz = bufleny */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L9; } __pyx_L9:; @@ -2545,7 +2564,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } /*else*/ { - /* "_proj.pyx":271 + /* "_proj.pyx":274 * raise RuntimeError * else: * buflenz = bufleny # <<<<<<<<<<<<<< @@ -2556,7 +2575,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } __pyx_L8:; - /* "_proj.pyx":272 + /* "_proj.pyx":275 * else: * buflenz = bufleny * if not (buflenx == bufleny == buflenz): # <<<<<<<<<<<<<< @@ -2570,23 +2589,23 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { - /* "_proj.pyx":273 + /* "_proj.pyx":276 * buflenz = bufleny * if not (buflenx == bufleny == buflenz): * raise RuntimeError('x,y and z must be same size') # <<<<<<<<<<<<<< * xx = xdata * yy = ydata */ - __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_16), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_16), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L10; } __pyx_L10:; - /* "_proj.pyx":274 + /* "_proj.pyx":277 * if not (buflenx == bufleny == buflenz): * raise RuntimeError('x,y and z must be same size') * xx = xdata # <<<<<<<<<<<<<< @@ -2595,7 +2614,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p */ __pyx_v_xx = ((double *)__pyx_v_xdata); - /* "_proj.pyx":275 + /* "_proj.pyx":278 * raise RuntimeError('x,y and z must be same size') * xx = xdata * yy = ydata # <<<<<<<<<<<<<< @@ -2604,7 +2623,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p */ __pyx_v_yy = ((double *)__pyx_v_ydata); - /* "_proj.pyx":276 + /* "_proj.pyx":279 * xx = xdata * yy = ydata * if inz is not None: # <<<<<<<<<<<<<< @@ -2614,7 +2633,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_2 = (__pyx_v_inz != Py_None); if (__pyx_t_2) { - /* "_proj.pyx":277 + /* "_proj.pyx":280 * yy = ydata * if inz is not None: * zz = zdata # <<<<<<<<<<<<<< @@ -2626,7 +2645,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } __pyx_L11:; - /* "_proj.pyx":278 + /* "_proj.pyx":281 * if inz is not None: * zz = zdata * npts = buflenx/8 # <<<<<<<<<<<<<< @@ -2635,22 +2654,22 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p */ __pyx_v_npts = __Pyx_div_Py_ssize_t(__pyx_v_buflenx, 8); - /* "_proj.pyx":279 + /* "_proj.pyx":282 * zz = zdata * npts = buflenx/8 * if not radians and p1.is_latlong(): # <<<<<<<<<<<<<< * for i from 0 <= i < npts: * xx[i] = xx[i]*_dg2rad */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = (!__pyx_t_2); if (__pyx_t_1) { - __pyx_t_3 = PyObject_GetAttr(((PyObject *)__pyx_v_p1), __pyx_n_s__is_latlong); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyObject_GetAttr(((PyObject *)__pyx_v_p1), __pyx_n_s__is_latlong); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = __pyx_t_2; } else { @@ -2658,7 +2677,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } if (__pyx_t_5) { - /* "_proj.pyx":280 + /* "_proj.pyx":283 * npts = buflenx/8 * if not radians and p1.is_latlong(): * for i from 0 <= i < npts: # <<<<<<<<<<<<<< @@ -2668,41 +2687,41 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_6 = __pyx_v_npts; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) { - /* "_proj.pyx":281 + /* "_proj.pyx":284 * if not radians and p1.is_latlong(): * for i from 0 <= i < npts: * xx[i] = xx[i]*_dg2rad # <<<<<<<<<<<<<< * yy[i] = yy[i]*_dg2rad * if inz is not None: */ - __pyx_t_4 = PyFloat_FromDouble((__pyx_v_xx[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyFloat_FromDouble((__pyx_v_xx[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_7 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; (__pyx_v_xx[__pyx_v_i]) = __pyx_t_8; - /* "_proj.pyx":282 + /* "_proj.pyx":285 * for i from 0 <= i < npts: * xx[i] = xx[i]*_dg2rad * yy[i] = yy[i]*_dg2rad # <<<<<<<<<<<<<< * if inz is not None: * err = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, zz) */ - __pyx_t_7 = PyFloat_FromDouble((__pyx_v_yy[__pyx_v_i])); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = PyFloat_FromDouble((__pyx_v_yy[__pyx_v_i])); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_Multiply(__pyx_t_7, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyNumber_Multiply(__pyx_t_7, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; (__pyx_v_yy[__pyx_v_i]) = __pyx_t_8; } @@ -2710,7 +2729,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } __pyx_L12:; - /* "_proj.pyx":283 + /* "_proj.pyx":286 * xx[i] = xx[i]*_dg2rad * yy[i] = yy[i]*_dg2rad * if inz is not None: # <<<<<<<<<<<<<< @@ -2720,7 +2739,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_5 = (__pyx_v_inz != Py_None); if (__pyx_t_5) { - /* "_proj.pyx":284 + /* "_proj.pyx":287 * yy[i] = yy[i]*_dg2rad * if inz is not None: * err = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, zz) # <<<<<<<<<<<<<< @@ -2732,7 +2751,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } /*else*/ { - /* "_proj.pyx":286 + /* "_proj.pyx":289 * err = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, zz) * else: * err = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, NULL) # <<<<<<<<<<<<<< @@ -2743,7 +2762,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } __pyx_L15:; - /* "_proj.pyx":287 + /* "_proj.pyx":290 * else: * err = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, NULL) * if err != 0: # <<<<<<<<<<<<<< @@ -2753,46 +2772,46 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_5 = (__pyx_v_err != 0); if (__pyx_t_5) { - /* "_proj.pyx":288 + /* "_proj.pyx":291 * err = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, NULL) * if err != 0: * raise RuntimeError(pj_strerrno(err)) # <<<<<<<<<<<<<< * if not radians and p2.is_latlong(): * for i from 0 <= i < npts: */ - __pyx_t_4 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_4)); __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L16; } __pyx_L16:; - /* "_proj.pyx":289 + /* "_proj.pyx":292 * if err != 0: * raise RuntimeError(pj_strerrno(err)) * if not radians and p2.is_latlong(): # <<<<<<<<<<<<<< * for i from 0 <= i < npts: * xx[i] = xx[i]*_rad2dg */ - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = (!__pyx_t_5); if (__pyx_t_1) { - __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_p2), __pyx_n_s__is_latlong); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_p2), __pyx_n_s__is_latlong); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_2 = __pyx_t_5; } else { @@ -2800,7 +2819,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } if (__pyx_t_2) { - /* "_proj.pyx":290 + /* "_proj.pyx":293 * raise RuntimeError(pj_strerrno(err)) * if not radians and p2.is_latlong(): * for i from 0 <= i < npts: # <<<<<<<<<<<<<< @@ -2810,41 +2829,41 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_6 = __pyx_v_npts; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) { - /* "_proj.pyx":291 + /* "_proj.pyx":294 * if not radians and p2.is_latlong(): * for i from 0 <= i < npts: * xx[i] = xx[i]*_rad2dg # <<<<<<<<<<<<<< * yy[i] = yy[i]*_rad2dg * */ - __pyx_t_3 = PyFloat_FromDouble((__pyx_v_xx[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyFloat_FromDouble((__pyx_v_xx[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; (__pyx_v_xx[__pyx_v_i]) = __pyx_t_8; - /* "_proj.pyx":292 + /* "_proj.pyx":295 * for i from 0 <= i < npts: * xx[i] = xx[i]*_rad2dg * yy[i] = yy[i]*_rad2dg # <<<<<<<<<<<<<< * * cdef _strencode(pystr,encoding='ascii'): */ - __pyx_t_7 = PyFloat_FromDouble((__pyx_v_yy[__pyx_v_i])); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = PyFloat_FromDouble((__pyx_v_yy[__pyx_v_i])); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyNumber_Multiply(__pyx_t_7, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyNumber_Multiply(__pyx_t_7, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; (__pyx_v_yy[__pyx_v_i]) = __pyx_t_8; } @@ -2866,7 +2885,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p return __pyx_r; } -/* "_proj.pyx":294 +/* "_proj.pyx":297 * yy[i] = yy[i]*_rad2dg * * cdef _strencode(pystr,encoding='ascii'): # <<<<<<<<<<<<<< @@ -2895,7 +2914,7 @@ static PyObject *__pyx_f_5_proj__strencode(PyObject *__pyx_v_pystr, struct __pyx } } - /* "_proj.pyx":296 + /* "_proj.pyx":299 * cdef _strencode(pystr,encoding='ascii'): * # encode a string into bytes. If already bytes, do nothing. * try: # <<<<<<<<<<<<<< @@ -2909,7 +2928,7 @@ static PyObject *__pyx_f_5_proj__strencode(PyObject *__pyx_v_pystr, struct __pyx __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "_proj.pyx":297 + /* "_proj.pyx":300 * # encode a string into bytes. If already bytes, do nothing. * try: * return pystr.encode(encoding) # <<<<<<<<<<<<<< @@ -2917,14 +2936,14 @@ static PyObject *__pyx_f_5_proj__strencode(PyObject *__pyx_v_pystr, struct __pyx * return pystr # already bytes? */ __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = PyObject_GetAttr(__pyx_v_pystr, __pyx_n_s__encode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_t_4 = PyObject_GetAttr(__pyx_v_pystr, __pyx_n_s__encode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); __Pyx_INCREF(__pyx_v_encoding); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_encoding); __Pyx_GIVEREF(__pyx_v_encoding); - __pyx_t_6 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_t_6 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; @@ -2947,7 +2966,7 @@ static PyObject *__pyx_f_5_proj__strencode(PyObject *__pyx_v_pystr, struct __pyx __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "_proj.pyx":298 + /* "_proj.pyx":301 * try: * return pystr.encode(encoding) * except AttributeError: # <<<<<<<<<<<<<< @@ -2956,12 +2975,12 @@ static PyObject *__pyx_f_5_proj__strencode(PyObject *__pyx_v_pystr, struct __pyx __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError); if (__pyx_t_7) { __Pyx_AddTraceback("_proj._strencode", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} + if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_GOTREF(__pyx_t_5); __Pyx_GOTREF(__pyx_t_4); - /* "_proj.pyx":299 + /* "_proj.pyx":302 * return pystr.encode(encoding) * except AttributeError: * return pystr # already bytes? # <<<<<<<<<<<<<< @@ -3315,8 +3334,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {0, 0, 0, 0, 0, 0, 0} }; static int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_AttributeError = __Pyx_GetName(__pyx_b, __pyx_n_s__AttributeError); if (!__pyx_builtin_AttributeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_builtin_AttributeError = __Pyx_GetName(__pyx_b, __pyx_n_s__AttributeError); if (!__pyx_builtin_AttributeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} return 0; __pyx_L1_error:; return -1; @@ -3326,126 +3345,126 @@ static int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants"); - /* "_proj.pyx":61 + /* "_proj.pyx":64 * # process data in buffer * if buflenx != bufleny: * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< * ndim = buflenx//_doublesize * lonsdata = londata */ - __pyx_k_tuple_4 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_4 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_4)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_3)); PyTuple_SET_ITEM(__pyx_k_tuple_4, 0, ((PyObject *)__pyx_kp_s_3)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_3)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_4)); - /* "_proj.pyx":70 + /* "_proj.pyx":73 * lonsdata[i]=1.e30; latsdata[i]=1.e30 * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * continue * if radians: */ - __pyx_k_tuple_6 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_6 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_6)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_5)); PyTuple_SET_ITEM(__pyx_k_tuple_6, 0, ((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_6)); - /* "_proj.pyx":89 + /* "_proj.pyx":92 * projxyout.u != projxyout.u: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * lonsdata[i] = 1.e30 * else: */ - __pyx_k_tuple_7 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_7 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_7)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_5)); PyTuple_SET_ITEM(__pyx_k_tuple_7, 0, ((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_7)); - /* "_proj.pyx":96 + /* "_proj.pyx":99 * projxyout.u != projxyout.u: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * latsdata[i] = 1.e30 * else: */ - __pyx_k_tuple_8 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_8 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_8)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_5)); PyTuple_SET_ITEM(__pyx_k_tuple_8, 0, ((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_8)); - /* "_proj.pyx":122 + /* "_proj.pyx":125 * # (for numpy/regular python arrays). * if buflenx != bufleny: * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< * ndim = buflenx//_doublesize * xdatab = xdata */ - __pyx_k_tuple_11 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_11 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_11)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_3)); PyTuple_SET_ITEM(__pyx_k_tuple_11, 0, ((PyObject *)__pyx_kp_s_3)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_3)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_11)); - /* "_proj.pyx":131 + /* "_proj.pyx":134 * xdatab[i]=1.e30; ydatab[i]=1.e30 * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * continue * projxyin.u = xdatab[i] */ - __pyx_k_tuple_12 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_12 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_12)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_5)); PyTuple_SET_ITEM(__pyx_k_tuple_12, 0, ((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_12)); - /* "_proj.pyx":146 + /* "_proj.pyx":149 * projlonlatout.u != projlonlatout.u: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * xdatab[i] = 1.e30 * elif radians: */ - __pyx_k_tuple_13 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_13 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_13)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_5)); PyTuple_SET_ITEM(__pyx_k_tuple_13, 0, ((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_13)); - /* "_proj.pyx":155 + /* "_proj.pyx":158 * projlonlatout.v != projlonlatout.v: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * ydatab[i] = 1.e30 * elif radians: */ - __pyx_k_tuple_14 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_14 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_14)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_5)); PyTuple_SET_ITEM(__pyx_k_tuple_14, 0, ((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_14)); - /* "_proj.pyx":273 + /* "_proj.pyx":276 * buflenz = bufleny * if not (buflenx == bufleny == buflenz): * raise RuntimeError('x,y and z must be same size') # <<<<<<<<<<<<<< * xx = xdata * yy = ydata */ - __pyx_k_tuple_16 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_16 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_16)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_15)); PyTuple_SET_ITEM(__pyx_k_tuple_16, 0, ((PyObject *)__pyx_kp_s_15)); @@ -3534,7 +3553,7 @@ PyMODINIT_FUNC PyInit__proj(void) /*--- Function import code ---*/ /*--- Execution code ---*/ - /* "/Volumes/User/jwhitaker/python/basemap.jswhit.git/src/_pyproj.pxi":1 + /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":1 * import math # <<<<<<<<<<<<<< * * _dg2rad = math.radians(1.) @@ -3544,7 +3563,7 @@ PyMODINIT_FUNC PyInit__proj(void) if (PyObject_SetAttr(__pyx_m, __pyx_n_s__math, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Volumes/User/jwhitaker/python/basemap.jswhit.git/src/_pyproj.pxi":3 + /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":3 * import math * * _dg2rad = math.radians(1.) # <<<<<<<<<<<<<< @@ -3570,7 +3589,7 @@ PyMODINIT_FUNC PyInit__proj(void) if (PyObject_SetAttr(__pyx_m, __pyx_n_s___dg2rad, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Volumes/User/jwhitaker/python/basemap.jswhit.git/src/_pyproj.pxi":4 + /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":4 * * _dg2rad = math.radians(1.) * _rad2dg = math.degrees(1.) # <<<<<<<<<<<<<< @@ -3596,7 +3615,7 @@ PyMODINIT_FUNC PyInit__proj(void) if (PyObject_SetAttr(__pyx_m, __pyx_n_s___rad2dg, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Volumes/User/jwhitaker/python/basemap.jswhit.git/src/_pyproj.pxi":5 + /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":5 * _dg2rad = math.radians(1.) * _rad2dg = math.degrees(1.) * _doublesize = sizeof(double) # <<<<<<<<<<<<<< @@ -3608,7 +3627,7 @@ PyMODINIT_FUNC PyInit__proj(void) if (PyObject_SetAttr(__pyx_m, __pyx_n_s___doublesize, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Volumes/User/jwhitaker/python/basemap.jswhit.git/src/_pyproj.pxi":6 + /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":6 * _rad2dg = math.degrees(1.) * _doublesize = sizeof(double) * __version__ = "1.9.0" # <<<<<<<<<<<<<< @@ -3629,52 +3648,52 @@ PyMODINIT_FUNC PyInit__proj(void) if (PyObject_SetAttr(__pyx_m, __pyx_n_s__set_datapath, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_proj.pyx":40 + /* "_proj.pyx":43 * return (self.__class__,(self.srs,)) * * def _fwd(self, object lons, object lats, radians=False, errcheck=False): # <<<<<<<<<<<<<< * """ * forward transformation - lons,lats to x,y (done in place). */ - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_1 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_2 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_proj.pyx":101 + /* "_proj.pyx":104 * latsdata[i] = projxyout.v * * def _inv(self, object x, object y, radians=False, errcheck=False): # <<<<<<<<<<<<<< * """ * inverse transformation - x,y to lons,lats (done in place). */ - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_9 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_10 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_proj.pyx":257 + /* "_proj.pyx":260 * return False * * def _transform(Proj p1, Proj p2, inx, iny, inz, radians): # <<<<<<<<<<<<<< * # private function to call pj_transform * cdef void *xdata, *ydata, *zdata */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5_proj_1_transform, NULL, __pyx_n_s___proj); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5_proj_1_transform, NULL, __pyx_n_s___proj); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetAttr(__pyx_m, __pyx_n_s___transform, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_s___transform, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "_proj.pyx":1 diff --git a/src/_proj.pyx b/src/_proj.pyx index 26d18d234..96a2aaac0 100644 --- a/src/_proj.pyx +++ b/src/_proj.pyx @@ -12,6 +12,7 @@ def set_datapath(datapath): cdef class Proj: cdef projPJ projpj + cdef projCtx projctx cdef public object proj_version cdef char *pjinitstring cdef public object srs @@ -23,8 +24,9 @@ cdef class Proj: bytestr = _strencode(projstring) self.pjinitstring = bytestr # initialize projection - self.projpj = pj_init_plus(self.pjinitstring) - err = pj_ctx_get_errno(pj_get_default_ctx()) + self.projctx = pj_ctx_alloc() + self.projpj = pj_init_plus_ctx(self.projctx, self.pjinitstring) + err = pj_ctx_get_errno(self.projctx) if err != 0: raise RuntimeError(pj_strerrno(err)) self.proj_version = PJ_VERSION/100. @@ -32,6 +34,7 @@ cdef class Proj: def __dealloc__(self): """destroy projection definition""" pj_free(self.projpj) + pj_ctx_free(self.projctx) def __reduce__(self): """special method that allows pyproj.Proj instance to be pickled""" @@ -77,7 +80,7 @@ cdef class Proj: projlonlatin.v = _dg2rad*latsdata[i] projxyout = pj_fwd(projlonlatin,self.projpj) if errcheck: - err = pj_ctx_get_errno(pj_get_default_ctx()) + err = pj_ctx_get_errno(self.projctx) if err != 0: raise RuntimeError(pj_strerrno(err)) # since HUGE_VAL can be 'inf', @@ -134,7 +137,7 @@ cdef class Proj: projxyin.v = ydatab[i] projlonlatout = pj_inv(projxyin,self.projpj) if errcheck: - err = pj_ctx_get_errno(pj_get_default_ctx()) + err = pj_ctx_get_errno(self.projctx) if err != 0: raise RuntimeError(pj_strerrno(err)) # since HUGE_VAL can be 'inf', @@ -185,7 +188,7 @@ cdef class Proj: # projxyout = pj_fwd(projlonlatin,self.projpj) # if errcheck: -# err = pj_ctx_get_errno(pj_get_default_ctx()) +# err = pj_ctx_get_errno(self.projctx) # if err != 0: # raise RuntimeError(pj_strerrno(err)) # # since HUGE_VAL can be 'inf', @@ -218,7 +221,7 @@ cdef class Proj: # projxyin = llptr[i] # projlonlatout = pj_inv(projxyin, self.projpj) # if errcheck: -# err = pj_ctx_get_errno(pj_get_default_ctx()) +# err = pj_ctx_get_errno(self.projctx) # if err != 0: # raise RuntimeError(pj_strerrno(err)) # # since HUGE_VAL can be 'inf', diff --git a/src/_pyproj.pxi b/src/_pyproj.pxi index 667eaace1..96580a40e 100644 --- a/src/_pyproj.pxi +++ b/src/_pyproj.pxi @@ -40,6 +40,7 @@ cdef extern from "proj_api.h": ctypedef void *projPJ ctypedef void *projCtx projPJ pj_init_plus(char *) + projPJ pj_init_plus_ctx(projCtx, char *) projUV pj_fwd(projUV, projPJ) projUV pj_inv(projUV, projPJ) int pj_transform(projPJ src, projPJ dst, long point_count, int point_offset, @@ -47,7 +48,9 @@ cdef extern from "proj_api.h": int pj_is_latlong(projPJ) int pj_is_geocent(projPJ) char *pj_strerrno(int) + void pj_ctx_free( projCtx ) int pj_ctx_get_errno( projCtx ) + projCtx pj_ctx_alloc() projCtx pj_get_default_ctx() void pj_free(projPJ) void pj_set_searchpath ( int count, char **path ) diff --git a/src/geod.c b/src/geod.c deleted file mode 100644 index 2bdb803f7..000000000 --- a/src/geod.c +++ /dev/null @@ -1,245 +0,0 @@ -/* <<<< Geodesic filter program >>>> */ -# include "projects.h" -# include "geodesic.h" -# include "emess.h" -# include -# include -# include - -# define MAXLINE 200 -# define MAX_PARGS 50 -# define TAB putchar('\t') - static int -fullout = 0, /* output full set of geodesic values */ -tag = '#', /* beginning of line tag character */ -pos_azi = 0, /* output azimuths as positive values */ -inverse = 0; /* != 0 then inverse geodesic */ - static char -*oform = (char *)0, /* output format for decimal degrees */ -*osform = "%.3f", /* output format for S */ -pline[50], /* work string */ -*usage = -"%s\nusage: %s [ -afFIptTwW [args] ] [ +opts[=arg] ] [ files ]\n"; - - -static GEODESIC_T Geodesic; -static GEODESIC_T *GEODESIC = &Geodesic; - -static void -printLL(double p, double l) { - if (oform) { - (void)printf(oform, p * RAD_TO_DEG); TAB; - (void)printf(oform, l * RAD_TO_DEG); - } else { - (void)fputs(rtodms(pline, p, 'N', 'S'),stdout); TAB; - (void)fputs(rtodms(pline, l, 'E', 'W'),stdout); - } -} - - -static void -do_arc(void) { - double az; - - printLL(GEODESIC->p2.u, GEODESIC->p2.v); putchar('\n'); - for (az = GEODESIC->ALPHA12; GEODESIC->n_alpha--; ) { - GEODESIC->ALPHA12 = az = adjlon(az + GEODESIC->del_alpha); - geod_pre(GEODESIC); - geod_for(GEODESIC); - printLL(GEODESIC->p2.u, GEODESIC->p2.v); putchar('\n'); - } -} - -static void /* generate intermediate geodesic coordinates */ -do_geod(void) { - double phil, laml, del_S; - - phil = GEODESIC->p2.u; - laml = GEODESIC->p2.v; - printLL(GEODESIC->p1.u, GEODESIC->p1.v); putchar('\n'); - for ( GEODESIC->DIST = del_S = GEODESIC->DIST / GEODESIC->n_S; --(GEODESIC->n_S); GEODESIC->DIST += del_S) { - geod_for(GEODESIC); - printLL(GEODESIC->p2.u, GEODESIC->p2.v); putchar('\n'); - } - printLL(phil, laml); putchar('\n'); -} - void static /* file processing function */ -process(FILE *fid) { - char line[MAXLINE+3], *s; - - for (;;) { - ++emess_dat.File_line; - if (!(s = fgets(line, MAXLINE, fid))) - break; - if (!strchr(s, '\n')) { /* overlong line */ - int c; - strcat(s, "\n"); - /* gobble up to newline */ - while ((c = fgetc(fid)) != EOF && c != '\n') ; - } - if (*s == tag) { - fputs(line, stdout); - continue; - } - GEODESIC->p1.u = dmstor(s, &s); - GEODESIC->p1.v = dmstor(s, &s); - if (inverse) { - GEODESIC->p2.u = dmstor(s, &s); - GEODESIC->p2.v = dmstor(s, &s); - geod_inv(GEODESIC); - } else { - GEODESIC->ALPHA12 = dmstor(s, &s); - GEODESIC->DIST = strtod(s, &s) * GEODESIC->TO_METER; - geod_pre(GEODESIC); - geod_for(GEODESIC); - } - if (!*s && (s > line)) --s; /* assumed we gobbled \n */ - if (pos_azi) { - if (GEODESIC->ALPHA12 < 0.) GEODESIC->ALPHA12 += TWOPI; - if (GEODESIC->ALPHA21 < 0.) GEODESIC->ALPHA21 += TWOPI; - } - if (fullout) { - printLL(GEODESIC->p1.u, GEODESIC->p1.v); TAB; - printLL(GEODESIC->p2.u, GEODESIC->p2.v); TAB; - if (oform) { - (void)printf(oform, GEODESIC->ALPHA12 * RAD_TO_DEG); TAB; - (void)printf(oform, GEODESIC->ALPHA21 * RAD_TO_DEG); TAB; - (void)printf(osform, GEODESIC->DIST * GEODESIC->FR_METER); - } else { - (void)fputs(rtodms(pline, GEODESIC->ALPHA12, 0, 0), stdout); TAB; - (void)fputs(rtodms(pline, GEODESIC->ALPHA21, 0, 0), stdout); TAB; - (void)printf(osform, GEODESIC->DIST * GEODESIC->FR_METER); - } - } else if (inverse) - if (oform) { - (void)printf(oform, GEODESIC->ALPHA12 * RAD_TO_DEG); TAB; - (void)printf(oform, GEODESIC->ALPHA21 * RAD_TO_DEG); TAB; - (void)printf(osform, GEODESIC->DIST * GEODESIC->FR_METER); - } else { - (void)fputs(rtodms(pline, GEODESIC->ALPHA12, 0, 0), stdout); TAB; - (void)fputs(rtodms(pline, GEODESIC->ALPHA21, 0, 0), stdout); TAB; - (void)printf(osform, GEODESIC->DIST * GEODESIC->FR_METER); - } - else { - printLL(GEODESIC->p2.u, GEODESIC->p2.v); TAB; - if (oform) - (void)printf(oform, GEODESIC->ALPHA21 * RAD_TO_DEG); - else - (void)fputs(rtodms(pline, GEODESIC->ALPHA21, 0, 0), stdout); - } - (void)fputs(s, stdout); - } -} - -static char *pargv[MAX_PARGS]; -static int pargc = 0; - -int main(int argc, char **argv) { - char *arg, **eargv = argv, *strnchr(); - FILE *fid; - static int eargc = 0, c; - - if (emess_dat.Prog_name = strrchr(*argv,'/')) ++emess_dat.Prog_name; - else emess_dat.Prog_name = *argv; - inverse = ! strncmp(emess_dat.Prog_name, "inv", 3); - if (argc <= 1 ) { - (void)fprintf(stderr, usage, pj_get_release(), - emess_dat.Prog_name); - exit (0); - } - /* process run line arguments */ - while (--argc > 0) { /* collect run line arguments */ - if(**++argv == '-') for(arg = *argv;;) { - switch(*++arg) { - case '\0': /* position of "stdin" */ - if (arg[-1] == '-') eargv[eargc++] = "-"; - break; - case 'a': /* output full set of values */ - fullout = 1; - continue; - case 'I': /* alt. inverse spec. */ - inverse = 1; - continue; - case 't': /* set col. one char */ - if (arg[1]) tag = *++arg; - else emess(1,"missing -t col. 1 tag"); - continue; - case 'W': /* specify seconds precision */ - case 'w': /* -W for constant field width */ - if ((c = arg[1]) && isdigit(c)) { - set_rtodms(c - '0', *arg == 'W'); - ++arg; - } else - emess(1,"-W argument missing or non-digit"); - continue; - case 'f': /* alternate output format degrees or xy */ - if (--argc <= 0) -noargument: emess(1,"missing argument for -%c",*arg); - oform = *++argv; - continue; - case 'F': /* alternate output format degrees or xy */ - if (--argc <= 0) goto noargument; - osform = *++argv; - continue; - case 'l': - if (!arg[1] || arg[1] == 'e') { /* list of ellipsoids */ - struct PJ_ELLPS *le; - - for (le=pj_get_ellps_ref(); le->id ; ++le) - (void)printf("%9s %-16s %-16s %s\n", - le->id, le->major, le->ell, le->name); - } else if (arg[1] == 'u') { /* list of units */ - struct PJ_UNITS *lu; - - for (lu = pj_get_units_ref();lu->id ; ++lu) - (void)printf("%12s %-20s %s\n", - lu->id, lu->to_meter, lu->name); - } else - emess(1,"invalid list option: l%c",arg[1]); - exit( 0 ); - case 'p': /* output azimuths as positive */ - pos_azi = 1; - continue; - default: - emess(1, "invalid option: -%c",*arg); - break; - } - break; - } else if (**argv == '+') /* + argument */ - if (pargc < MAX_PARGS) - pargv[pargc++] = *argv + 1; - else - emess(1,"overflowed + argument table"); - else /* assumed to be input file name(s) */ - eargv[eargc++] = *argv; - } - /* done with parameter and control input */ - GEOD_init(pargc, pargv, GEODESIC); /* setup projection */ - if ((GEODESIC->n_alpha || GEODESIC->n_S) && eargc) - emess(1,"files specified for arc/geodesic mode"); - if (GEODESIC->n_alpha) - do_arc(); - else if (GEODESIC->n_S) - do_geod(); - else { /* process input file list */ - if (eargc == 0) /* if no specific files force sysin */ - eargv[eargc++] = "-"; - for ( ; eargc-- ; ++eargv) { - if (**eargv == '-') { - fid = stdin; - emess_dat.File_name = ""; - } else { - if ((fid = fopen(*eargv, "r")) == NULL) { - emess(-2, *eargv, "input file"); - continue; - } - emess_dat.File_name = *eargv; - } - emess_dat.File_line = 0; - process(fid); - (void)fclose(fid); - emess_dat.File_name = (char *)0; - } - } - exit(0); /* normal completion */ -} diff --git a/src/geod_for.c b/src/geod_for.c deleted file mode 100644 index 510636b79..000000000 --- a/src/geod_for.c +++ /dev/null @@ -1,110 +0,0 @@ -# include "projects.h" -# include "geodesic.h" -# define MERI_TOL 1e-9 - - -// input: al12, ELLIPSE, ONEF, phi1, FLAT, FLAT4 -// output: al12 (ajusting) and!!! double s1, D, P, c1, M, N, cosa12, sina12, sinth1, costh1, th1, int signS, merid - -void -geod_pre(GEODESIC_T *GEODESIC) { - GEODESIC->ALPHA12 = adjlon(GEODESIC->ALPHA12); /* reduce to +- 0-PI */ - GEODESIC->signS = fabs(GEODESIC->ALPHA12) > HALFPI ? 1 : 0; - GEODESIC->th1 = GEODESIC->ELLIPSE ? atan(GEODESIC->ONEF * tan(GEODESIC->p1.u)) : GEODESIC->p1.u; - GEODESIC->costh1 = cos(GEODESIC->th1); - GEODESIC->sinth1 = sin(GEODESIC->th1); - if ((GEODESIC->merid = fabs(GEODESIC->sina12 = sin(GEODESIC->ALPHA12)) < MERI_TOL)) { - GEODESIC->sina12 = 0.; - GEODESIC->cosa12 = fabs(GEODESIC->ALPHA12) < HALFPI ? 1. : -1.; - GEODESIC->M = 0.; - } else { - GEODESIC->cosa12 = cos(GEODESIC->ALPHA12); - GEODESIC->M = GEODESIC->costh1 * GEODESIC->sina12; - } - GEODESIC->N = GEODESIC->costh1 * GEODESIC->cosa12; - if (GEODESIC->ELLIPSE) { - if (GEODESIC->merid) { - GEODESIC->c1 = 0.; - GEODESIC->c2 = GEODESIC->FLAT4; - GEODESIC->D = 1. - GEODESIC->c2; - GEODESIC->D *= GEODESIC->D; - GEODESIC->P = GEODESIC->c2 / GEODESIC->D; - } else { - GEODESIC->c1 = GEODESIC->FLAT * GEODESIC->M; - GEODESIC->c2 = GEODESIC->FLAT4 * (1. - GEODESIC->M * GEODESIC->M); - GEODESIC->D = (1. - GEODESIC->c2)*(1. - GEODESIC->c2 - GEODESIC->c1 * GEODESIC->M); - GEODESIC->P = (1. + .5 * GEODESIC->c1 * GEODESIC->M) * GEODESIC->c2 / GEODESIC->D; - } - } - if (GEODESIC->merid) GEODESIC->s1 = HALFPI - GEODESIC->th1; - else { - GEODESIC->s1 = (fabs(GEODESIC->M) >= 1.) ? 0. : acos(GEODESIC->M); - GEODESIC->s1 = GEODESIC->sinth1 / sin(GEODESIC->s1); - GEODESIC->s1 = (fabs(GEODESIC->s1) >= 1.) ? 0. : acos(GEODESIC->s1); - } -} - -// input: ELLIPSE, DIST, A and!!! D, signS, s1 -// output: - -void -geod_for(GEODESIC_T *GEODESIC) { - double d,sind,u,V,X,ds,cosds,sinds,ss = 0,de; - - if (GEODESIC->ELLIPSE) { - d = GEODESIC->DIST / (GEODESIC->D * GEODESIC->A); - if (GEODESIC->signS) d = -d; - u = 2. * (GEODESIC->s1 - d); - V = cos(u + d); - X = GEODESIC->c2 * GEODESIC->c2 * (sind = sin(d)) * cos(d) * (2. * V * V - 1.); - ds = d + X - 2. * GEODESIC->P * V * (1. - 2. * GEODESIC->P * cos(u)) * sind; - ss = GEODESIC->s1 + GEODESIC->s1 - ds; - } else { - ds = GEODESIC->DIST / GEODESIC->A; - if (GEODESIC->signS) ds = - ds; - } - cosds = cos(ds); - sinds = sin(ds); - if (GEODESIC->signS) sinds = - sinds; - GEODESIC->ALPHA21 = GEODESIC->N * cosds - GEODESIC->sinth1 * sinds; - if (GEODESIC->merid) { - GEODESIC->p2.u = atan( tan(HALFPI + GEODESIC->s1 - ds) / GEODESIC->ONEF); - if (GEODESIC->ALPHA21 > 0.) { - GEODESIC->ALPHA21 = PI; - if (GEODESIC->signS) - de = PI; - else { - GEODESIC->p2.u = - GEODESIC->p2.u; - de = 0.; - } - } else { - GEODESIC->ALPHA21 = 0.; - if (GEODESIC->signS) { - GEODESIC->p2.u = - GEODESIC->p2.u; - de = 0; - } else - de = PI; - } - } else { - GEODESIC->ALPHA21 = atan(GEODESIC->M / GEODESIC->ALPHA21); - if (GEODESIC->ALPHA21 > 0) - GEODESIC->ALPHA21 += PI; - if (GEODESIC->ALPHA12 < 0.) - GEODESIC->ALPHA21 -= PI; - GEODESIC->ALPHA21 = adjlon(GEODESIC->ALPHA21); - GEODESIC->p2.u = atan(-(GEODESIC->sinth1 * cosds + GEODESIC->N * sinds) * sin(GEODESIC->ALPHA21) / - (GEODESIC->ELLIPSE ? GEODESIC->ONEF * GEODESIC->M : GEODESIC->M)); - de = atan2(sinds * GEODESIC->sina12 , - (GEODESIC->costh1 * cosds - GEODESIC->sinth1 * sinds * GEODESIC->cosa12)); - if (GEODESIC->ELLIPSE) - { - if (GEODESIC->signS) - de += GEODESIC->c1 * ((1. - GEODESIC->c2) * ds + - GEODESIC->c2 * sinds * cos(ss)); - else - de -= GEODESIC->c1 * ((1. - GEODESIC->c2) * ds - - GEODESIC->c2 * sinds * cos(ss)); - } - } - GEODESIC->p2.v = adjlon( GEODESIC->p1.v + de ); -} diff --git a/src/geod_inv.c b/src/geod_inv.c deleted file mode 100644 index 5cae35bd9..000000000 --- a/src/geod_inv.c +++ /dev/null @@ -1,59 +0,0 @@ -# include "projects.h" -# include "geodesic.h" -# define DTOL 1e-8 - -int -geod_inv(GEODESIC_T *GEODESIC) -{ - double th1,th2,thm,dthm,dlamm,dlam,sindlamm,costhm,sinthm,cosdthm, - sindthm,L,E,cosd,d,X,Y,T,sind,tandlammp,u,v,D,A,B; - - if (GEODESIC->ELLIPSE) { - th1 = atan(GEODESIC->ONEF * tan(GEODESIC->p1.u)); - th2 = atan(GEODESIC->ONEF * tan(GEODESIC->p2.u)); - } else { - th1 = GEODESIC->p1.u; - th2 = GEODESIC->p2.u; - } - thm = .5 * (th1 + th2); - dthm = .5 * (th2 - th1); - dlamm = .5 * ( dlam = adjlon(GEODESIC->p2.v - GEODESIC->p1.v) ); - if (fabs(dlam) < DTOL && fabs(dthm) < DTOL) { - GEODESIC->ALPHA12 = GEODESIC->ALPHA21 = GEODESIC->DIST = 0.; - return -1; - } - sindlamm = sin(dlamm); - costhm = cos(thm); sinthm = sin(thm); - cosdthm = cos(dthm); sindthm = sin(dthm); - L = sindthm * sindthm + (cosdthm * cosdthm - sinthm * sinthm) - * sindlamm * sindlamm; - d = acos(cosd = 1 - L - L); - if (GEODESIC->ELLIPSE) { - E = cosd + cosd; - sind = sin( d ); - Y = sinthm * cosdthm; - Y *= (Y + Y) / (1. - L); - T = sindthm * costhm; - T *= (T + T) / L; - X = Y + T; - Y -= T; - T = d / sind; - D = 4. * T * T; - A = D * E; - B = D + D; - GEODESIC->DIST = GEODESIC->A * sind * (T - GEODESIC->FLAT4 * (T * X - Y) + - GEODESIC->FLAT64 * (X * (A + (T - .5 * (A - E)) * X) - - Y * (B + E * Y) + D * X * Y)); - tandlammp = tan(.5 * (dlam - .25 * (Y + Y - E * (4. - X)) * - (GEODESIC->FLAT2 * T + GEODESIC->FLAT64 * (32. * T - (20. * T - A) - * X - (B + 4.) * Y)) * tan(dlam))); - } else { - GEODESIC->DIST = GEODESIC->A * d; - tandlammp = tan(dlamm); - } - u = atan2(sindthm , (tandlammp * costhm)); - v = atan2(cosdthm , (tandlammp * sinthm)); - GEODESIC->ALPHA12 = adjlon(TWOPI + v - u); - GEODESIC->ALPHA21 = adjlon(TWOPI - v - u); - return 0; -} diff --git a/src/geod_set.c b/src/geod_set.c deleted file mode 100644 index ee795c6da..000000000 --- a/src/geod_set.c +++ /dev/null @@ -1,133 +0,0 @@ - -#define _IN_GEOD_SET - -#include -#include -#include "projects.h" -#include "geodesic.h" -#include "emess.h" - -GEODESIC_T * -GEOD_init(int argc, char **argv, GEODESIC_T *GEODESIC) -{ - paralist *start = 0, *curr = 0; - double es; - char *name; - int i; - - if(0 == GEODESIC) - { - GEODESIC = malloc(sizeof(GEODESIC_T)); - } - memset(GEODESIC, 0, sizeof(GEODESIC_T)); - - - /* put arguments into internal linked list */ - if (argc <= 0) - emess(1, "no arguments in initialization list"); - for (i = 0; i < argc; ++i) - if (i) - curr = curr->next = pj_mkparam(argv[i]); - else - start = curr = pj_mkparam(argv[i]); - /* set elliptical parameters */ - if (pj_ell_set(pj_get_default_ctx(),start, &GEODESIC->A, &es)) emess(1,"ellipse setup failure"); - /* set units */ - if (name = pj_param(NULL,start, "sunits").s) { - char *s; - struct PJ_UNITS *unit_list = pj_get_units_ref(); - for (i = 0; (s = unit_list[i].id) && strcmp(name, s) ; ++i) ; - if (!s) - emess(1,"%s unknown unit conversion id", name); - GEODESIC->FR_METER = 1. / (GEODESIC->TO_METER = atof(unit_list[i].to_meter)); - } else - GEODESIC->TO_METER = GEODESIC->FR_METER = 1.; - if ((GEODESIC->ELLIPSE = (es != 0.))) { - GEODESIC->ONEF = sqrt(1. - es); - GEODESIC->FLAT = 1 - GEODESIC->ONEF; - GEODESIC->FLAT2 = GEODESIC->FLAT/2; - GEODESIC->FLAT4 = GEODESIC->FLAT/4; - GEODESIC->FLAT64 = GEODESIC->FLAT*GEODESIC->FLAT/64; - } else { - GEODESIC->ONEF = 1.; - GEODESIC->FLAT = GEODESIC->FLAT2 = GEODESIC->FLAT4 = GEODESIC->FLAT64 = 0.; - } - /* check if line or arc mode */ - if (pj_param(NULL,start, "tlat_1").i) { - double del_S; -#undef f - GEODESIC->p1.u = pj_param(NULL,start, "rlat_1").f; - GEODESIC->p1.v = pj_param(NULL,start, "rlon_1").f; - if (pj_param(NULL,start, "tlat_2").i) { - GEODESIC->p2.u = pj_param(NULL,start, "rlat_2").f; - GEODESIC->p2.v = pj_param(NULL,start, "rlon_2").f; - geod_inv(GEODESIC); - geod_pre(GEODESIC); - } else if ((GEODESIC->DIST = pj_param(NULL,start, "dS").f)) { - GEODESIC->ALPHA12 = pj_param(NULL,start, "rA").f; - geod_pre(GEODESIC); - geod_for(GEODESIC); - } else emess(1,"incomplete geodesic/arc info"); - if ((GEODESIC->n_alpha = pj_param(NULL,start, "in_A").i) > 0) { - if (!(GEODESIC->del_alpha = pj_param(NULL,start, "rdel_A").f)) - emess(1,"del azimuth == 0"); - } else if (del_S = fabs(pj_param(NULL,start, "ddel_S").f)) { - GEODESIC->n_S = GEODESIC->DIST / del_S + .5; - } else if ((GEODESIC->n_S = pj_param(NULL,start, "in_S").i) <= 0) - emess(1,"no interval divisor selected"); - } - /* free up linked list */ - for ( ; start; start = curr) { - curr = start->next; - pj_dalloc(start); - } - return GEODESIC; -} - -GEODESIC_T *GEOD_init_plus(const char *definition, GEODESIC_T *geod) -{ -#define MAX_ARG 200 - char *argv[MAX_ARG]; - char *defn_copy; - int argc = 0, i; - - /* make a copy that we can manipulate */ - defn_copy = strdup(definition); - - /* split into arguments based on '+' and trim white space */ - - for( i = 0; defn_copy[i] != '\0'; i++ ) - { - switch( defn_copy[i] ) - { - case '+': - if( i == 0 || defn_copy[i-1] == '\0' ) - { - if( argc+1 == MAX_ARG ) - { - //pj_errno = -44; - return NULL; - } - - argv[argc++] = defn_copy + i + 1; - } - break; - - case ' ': - case '\t': - case '\n': - defn_copy[i] = '\0'; - break; - - default: - /* do nothing */; - } - } - - /* perform actual initialization */ - GEODESIC_T *ret_geod = GEOD_init(argc, argv, geod); - - free( defn_copy ); - return ret_geod; -} - From d595b7c5de948ce064023e8e65545796740a0899 Mon Sep 17 00:00:00 2001 From: Jeff Whitaker Date: Tue, 20 Dec 2011 10:10:05 -0700 Subject: [PATCH 08/14] move _geod.c --- geodesic/_geod.c | 3897 ++++++++++++++++++++++++++++++++++++++++++++ geodesic/_geod.pyx | 218 +++ 2 files changed, 4115 insertions(+) create mode 100644 geodesic/_geod.c create mode 100644 geodesic/_geod.pyx diff --git a/geodesic/_geod.c b/geodesic/_geod.c new file mode 100644 index 000000000..e4d8a4576 --- /dev/null +++ b/geodesic/_geod.c @@ -0,0 +1,3897 @@ +/* Generated by Cython 0.15.1 on Tue Dec 20 08:28:53 2011 */ + +#define PY_SSIZE_T_CLEAN +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#else + +#include /* For offsetof */ +#ifndef offsetof +#define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif + +#if !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif + +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif + +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif + +#if PY_VERSION_HEX < 0x02040000 + #define METH_COEXIST 0 + #define PyDict_CheckExact(op) (Py_TYPE(op) == &PyDict_Type) + #define PyDict_Contains(d,o) PySequence_Contains(d,o) +#endif + +#if PY_VERSION_HEX < 0x02050000 + typedef int Py_ssize_t; + #define PY_SSIZE_T_MAX INT_MAX + #define PY_SSIZE_T_MIN INT_MIN + #define PY_FORMAT_SIZE_T "" + #define PyInt_FromSsize_t(z) PyInt_FromLong(z) + #define PyInt_AsSsize_t(o) __Pyx_PyInt_AsInt(o) + #define PyNumber_Index(o) PyNumber_Int(o) + #define PyIndex_Check(o) PyNumber_Check(o) + #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) +#endif + +#if PY_VERSION_HEX < 0x02060000 + #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) + #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) + #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) + #define PyVarObject_HEAD_INIT(type, size) \ + PyObject_HEAD_INIT(type) size, + #define PyType_Modified(t) + + typedef struct { + void *buf; + PyObject *obj; + Py_ssize_t len; + Py_ssize_t itemsize; + int readonly; + int ndim; + char *format; + Py_ssize_t *shape; + Py_ssize_t *strides; + Py_ssize_t *suboffsets; + void *internal; + } Py_buffer; + + #define PyBUF_SIMPLE 0 + #define PyBUF_WRITABLE 0x0001 + #define PyBUF_FORMAT 0x0004 + #define PyBUF_ND 0x0008 + #define PyBUF_STRIDES (0x0010 | PyBUF_ND) + #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) + #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) + #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) + #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) + +#endif + +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" +#endif + +#if PY_MAJOR_VERSION >= 3 + #define Py_TPFLAGS_CHECKTYPES 0 + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif + +#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif + +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#endif + +#if PY_VERSION_HEX < 0x02060000 + #define PyBytesObject PyStringObject + #define PyBytes_Type PyString_Type + #define PyBytes_Check PyString_Check + #define PyBytes_CheckExact PyString_CheckExact + #define PyBytes_FromString PyString_FromString + #define PyBytes_FromStringAndSize PyString_FromStringAndSize + #define PyBytes_FromFormat PyString_FromFormat + #define PyBytes_DecodeEscape PyString_DecodeEscape + #define PyBytes_AsString PyString_AsString + #define PyBytes_AsStringAndSize PyString_AsStringAndSize + #define PyBytes_Size PyString_Size + #define PyBytes_AS_STRING PyString_AS_STRING + #define PyBytes_GET_SIZE PyString_GET_SIZE + #define PyBytes_Repr PyString_Repr + #define PyBytes_Concat PyString_Concat + #define PyBytes_ConcatAndDel PyString_ConcatAndDel +#endif + +#if PY_VERSION_HEX < 0x02060000 + #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) + #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) +#endif + +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) + +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask +#endif + +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif + +#if PY_VERSION_HEX < 0x03020000 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t PyInt_AsLong +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t +#endif + + +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif + +#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) + #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) + #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) + #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) +#else + #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ + (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ + (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ + (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) + #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ + (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ + (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ + (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) + #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ + (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ + (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ + (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) +#endif + +#if PY_MAJOR_VERSION >= 3 + #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) +#endif + +#if PY_VERSION_HEX < 0x02050000 + #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) + #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) + #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) +#else + #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) + #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) + #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) +#endif + +#if PY_VERSION_HEX < 0x02050000 + #define __Pyx_NAMESTR(n) ((char *)(n)) + #define __Pyx_DOCSTR(n) ((char *)(n)) +#else + #define __Pyx_NAMESTR(n) (n) + #define __Pyx_DOCSTR(n) (n) +#endif + +#ifndef __PYX_EXTERN_C + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#if defined(WIN32) || defined(MS_WINDOWS) +#define _USE_MATH_DEFINES +#endif +#include +#define __PYX_HAVE___geod +#define __PYX_HAVE_API___geod +#include "project.h" +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#ifdef PYREX_WITHOUT_ASSERTIONS +#define CYTHON_WITHOUT_ASSERTIONS +#endif + + +/* inline attribute */ +#ifndef CYTHON_INLINE + #if defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +/* unused attribute */ +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || defined(__INTEL_COMPILER) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif + +typedef struct {PyObject **p; char *s; const long n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ + + +/* Type Conversion Predeclarations */ + +#define __Pyx_PyBytes_FromUString(s) PyBytes_FromString((char*)s) +#define __Pyx_PyBytes_AsUString(s) ((unsigned char*) PyBytes_AsString(s)) + +#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) +#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); + +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*); + +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) + + +#ifdef __GNUC__ + /* Test for GCC > 2.95 */ + #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) + #else /* __GNUC__ > 2 ... */ + #define likely(x) (x) + #define unlikely(x) (x) + #endif /* __GNUC__ > 2 ... */ +#else /* __GNUC__ */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ + +static PyObject *__pyx_m; +static PyObject *__pyx_b; +static PyObject *__pyx_empty_tuple; +static PyObject *__pyx_empty_bytes; +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm= __FILE__; +static const char *__pyx_filename; + + +static const char *__pyx_f[] = { + "_geod.pyx", +}; + +/*--- Type declarations ---*/ +struct __pyx_obj_5_geod_Geod; + +/* "_geod.pyx":41 + * void proj_in_inv(PROJ_LINE * A) + * + * cdef class Geod: # <<<<<<<<<<<<<< + * cdef PROJ_LINE arc + * cdef PROJ_ELLIPS ellps + */ +struct __pyx_obj_5_geod_Geod { + PyObject_HEAD + PROJ_LINE arc; + PROJ_ELLIPS ellps; + PROJ_PT_LPH pt1; + PROJ_PT_LPH pt2; +}; + + +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif + +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, int); + void (*DECREF)(void*, PyObject*, int); + void (*GOTREF)(void*, PyObject*, int); + void (*GIVEREF)(void*, PyObject*, int); + void* (*SetupContext)(const char*, int, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; + #define __Pyx_RefNannySetupContext(name) __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) + #define __Pyx_RefNannyFinishContext() __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name) + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif /* CYTHON_REFNANNY */ + +static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/ + +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ + +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, PyObject* kw_name); /*proto*/ + +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, const char* function_name); /*proto*/ + +static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ +static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ + +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/ + +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level); /*proto*/ + +static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *); + +static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *); + +static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *); + +static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *); + +static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *); + +static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *); + +static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *); + +static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *); + +static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *); + +static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *); + +static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *); + +static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *); + +static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *); + +static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *); + +static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *); + +static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *); + +static int __Pyx_check_binary_version(void); + +static void __Pyx_AddTraceback(const char *funcname, int __pyx_clineno, + int __pyx_lineno, const char *__pyx_filename); /*proto*/ + +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ + +/* Module declarations from '_geod' */ +static PyTypeObject *__pyx_ptype_5_geod_Geod = 0; +static double __pyx_v_5_geod__dg2rad; +static double __pyx_v_5_geod__rad2dg; +#define __Pyx_MODULE_NAME "_geod" +int __pyx_module_is_main__geod = 0; + +/* Implementation of '_geod' */ +static PyObject *__pyx_builtin_RuntimeError; +static char __pyx_k_1[] = "+a=%s +f=%s +es=%s"; +static char __pyx_k_3[] = "Buffer lengths not the same"; +static char __pyx_k_7[] = "undefined inverse geodesic (may be an antipodal point)"; +static char __pyx_k__a[] = "a"; +static char __pyx_k__f[] = "f"; +static char __pyx_k__v[] = "v"; +static char __pyx_k__az[] = "az"; +static char __pyx_k__es[] = "es"; +static char __pyx_k__dist[] = "dist"; +static char __pyx_k__lat1[] = "lat1"; +static char __pyx_k__lat2[] = "lat2"; +static char __pyx_k__lats[] = "lats"; +static char __pyx_k__lon1[] = "lon1"; +static char __pyx_k__lon2[] = "lon2"; +static char __pyx_k__lons[] = "lons"; +static char __pyx_k__math[] = "math"; +static char __pyx_k__npts[] = "npts"; +static char __pyx_k__lats1[] = "lats1"; +static char __pyx_k__lats2[] = "lats2"; +static char __pyx_k__lons1[] = "lons1"; +static char __pyx_k__lons2[] = "lons2"; +static char __pyx_k__sphere[] = "sphere"; +static char __pyx_k__degrees[] = "degrees"; +static char __pyx_k__radians[] = "radians"; +static char __pyx_k____main__[] = "__main__"; +static char __pyx_k____test__[] = "__test__"; +static char __pyx_k____class__[] = "__class__"; +static char __pyx_k___doublesize[] = "_doublesize"; +static char __pyx_k__RuntimeError[] = "RuntimeError"; +static PyObject *__pyx_kp_s_1; +static PyObject *__pyx_kp_s_3; +static PyObject *__pyx_kp_s_7; +static PyObject *__pyx_n_s__RuntimeError; +static PyObject *__pyx_n_s____class__; +static PyObject *__pyx_n_s____main__; +static PyObject *__pyx_n_s____test__; +static PyObject *__pyx_n_s___doublesize; +static PyObject *__pyx_n_s__a; +static PyObject *__pyx_n_s__az; +static PyObject *__pyx_n_s__degrees; +static PyObject *__pyx_n_s__dist; +static PyObject *__pyx_n_s__es; +static PyObject *__pyx_n_s__f; +static PyObject *__pyx_n_s__lat1; +static PyObject *__pyx_n_s__lat2; +static PyObject *__pyx_n_s__lats; +static PyObject *__pyx_n_s__lats1; +static PyObject *__pyx_n_s__lats2; +static PyObject *__pyx_n_s__lon1; +static PyObject *__pyx_n_s__lon2; +static PyObject *__pyx_n_s__lons; +static PyObject *__pyx_n_s__lons1; +static PyObject *__pyx_n_s__lons2; +static PyObject *__pyx_n_s__math; +static PyObject *__pyx_n_s__npts; +static PyObject *__pyx_n_s__radians; +static PyObject *__pyx_n_s__sphere; +static PyObject *__pyx_n_s__v; +static PyObject *__pyx_k_2; +static PyObject *__pyx_k_5; +static PyObject *__pyx_k_8; +static PyObject *__pyx_k_tuple_4; +static PyObject *__pyx_k_tuple_6; + +/* "_geod.pyx":46 + * cdef PROJ_PT_LPH pt1, pt2 + * + * def __cinit__(self, object a, object f, object es, object sphere): # <<<<<<<<<<<<<< + * self.sphere = sphere + * self.ellps.a = a + */ + +static int __pyx_pf_5_geod_4Geod___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pf_5_geod_4Geod___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_a = 0; + PyObject *__pyx_v_f = 0; + PyObject *__pyx_v_es = 0; + PyObject *__pyx_v_sphere = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + double __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__f,&__pyx_n_s__es,&__pyx_n_s__sphere,0}; + __Pyx_RefNannySetupContext("__cinit__"); + { + PyObject* values[4] = {0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 0: + values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a); + if (likely(values[0])) kw_args--; + else goto __pyx_L5_argtuple_error; + case 1: + values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__f); + if (likely(values[1])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 2: + values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__es); + if (likely(values[2])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 3: + values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__sphere); + if (likely(values[3])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + } + __pyx_v_a = values[0]; + __pyx_v_f = values[1]; + __pyx_v_es = values[2]; + __pyx_v_sphere = values[3]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_L3_error:; + __Pyx_AddTraceback("_geod.Geod.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + + /* "_geod.pyx":47 + * + * def __cinit__(self, object a, object f, object es, object sphere): + * self.sphere = sphere # <<<<<<<<<<<<<< + * self.ellps.a = a + * self.ellps.f = f + */ + if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__sphere, __pyx_v_sphere) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + + /* "_geod.pyx":48 + * def __cinit__(self, object a, object f, object es, object sphere): + * self.sphere = sphere + * self.ellps.a = a # <<<<<<<<<<<<<< + * self.ellps.f = f + * self.ellps.es = es + */ + __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_a); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->ellps.a = __pyx_t_1; + + /* "_geod.pyx":49 + * self.sphere = sphere + * self.ellps.a = a + * self.ellps.f = f # <<<<<<<<<<<<<< + * self.ellps.es = es + * self.ellps.one_es = 1.-es + */ + __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_f); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->ellps.f = __pyx_t_1; + + /* "_geod.pyx":50 + * self.ellps.a = a + * self.ellps.f = f + * self.ellps.es = es # <<<<<<<<<<<<<< + * self.ellps.one_es = 1.-es + * self.arc.E = &self.ellps + */ + __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_es); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->ellps.es = __pyx_t_1; + + /* "_geod.pyx":51 + * self.ellps.f = f + * self.ellps.es = es + * self.ellps.one_es = 1.-es # <<<<<<<<<<<<<< + * self.arc.E = &self.ellps + * + */ + __pyx_t_2 = PyFloat_FromDouble(1.); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Subtract(__pyx_t_2, __pyx_v_es); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->ellps.one_es = __pyx_t_1; + + /* "_geod.pyx":52 + * self.ellps.es = es + * self.ellps.one_es = 1.-es + * self.arc.E = &self.ellps # <<<<<<<<<<<<<< + * + * def __reduce__(self): + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.E = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->ellps); + + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("_geod.Geod.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_geod.pyx":54 + * self.arc.E = &self.ellps + * + * def __reduce__(self): # <<<<<<<<<<<<<< + * """special method that allows pyproj.Geod instance to be pickled""" + * initstring = '+a=%s +f=%s +es=%s' % (self.a, self.f, self.es) + */ + +static PyObject *__pyx_pf_5_geod_4Geod_1__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static char __pyx_doc_5_geod_4Geod_1__reduce__[] = "special method that allows pyproj.Geod instance to be pickled"; +static PyObject *__pyx_pf_5_geod_4Geod_1__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_v_initstring = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce__"); + + /* "_geod.pyx":56 + * def __reduce__(self): + * """special method that allows pyproj.Geod instance to be pickled""" + * initstring = '+a=%s +f=%s +es=%s' % (self.a, self.f, self.es) # <<<<<<<<<<<<<< + * return (self.__class__,(initstring,)) + * + */ + __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__a); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__f); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__es); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_1), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; + __pyx_v_initstring = ((PyObject *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "_geod.pyx":57 + * """special method that allows pyproj.Geod instance to be pickled""" + * initstring = '+a=%s +f=%s +es=%s' % (self.a, self.f, self.es) + * return (self.__class__,(initstring,)) # <<<<<<<<<<<<<< + * + * def _fwd(self, lons, lats, az, dist, radians=False): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s____class__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); + __Pyx_INCREF(__pyx_v_initstring); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_initstring); + __Pyx_GIVEREF(__pyx_v_initstring); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_2)); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_t_4)); + __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_r = ((PyObject *)__pyx_t_2); + __pyx_t_2 = 0; + goto __pyx_L0; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("_geod.Geod.__reduce__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_initstring); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_geod.pyx":59 + * return (self.__class__,(initstring,)) + * + * def _fwd(self, lons, lats, az, dist, radians=False): # <<<<<<<<<<<<<< + * cdef Py_ssize_t buflenlons, buflenlats, buflenaz, buflend, ndim, i + * cdef double *lonsdata, *latsdata, *azdata, *distdata + */ + +static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_lons = 0; + PyObject *__pyx_v_lats = 0; + PyObject *__pyx_v_az = 0; + PyObject *__pyx_v_dist = 0; + PyObject *__pyx_v_radians = 0; + Py_ssize_t __pyx_v_buflenlons; + Py_ssize_t __pyx_v_buflenlats; + Py_ssize_t __pyx_v_buflenaz; + Py_ssize_t __pyx_v_buflend; + Py_ssize_t __pyx_v_ndim; + Py_ssize_t __pyx_v_i; + double *__pyx_v_lonsdata; + double *__pyx_v_latsdata; + double *__pyx_v_azdata; + double *__pyx_v_distdata; + void *__pyx_v_londata; + void *__pyx_v_latdata; + void *__pyx_v_azdat; + void *__pyx_v_distdat; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + Py_ssize_t __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__lons,&__pyx_n_s__lats,&__pyx_n_s__az,&__pyx_n_s__dist,&__pyx_n_s__radians,0}; + __Pyx_RefNannySetupContext("_fwd"); + { + PyObject* values[5] = {0,0,0,0,0}; + values[4] = __pyx_k_2; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 0: + values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lons); + if (likely(values[0])) kw_args--; + else goto __pyx_L5_argtuple_error; + case 1: + values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lats); + if (likely(values[1])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 2: + values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__az); + if (likely(values[2])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 3: + values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dist); + if (likely(values[3])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 4: + if (kw_args > 0) { + PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__radians); + if (value) { values[4] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_fwd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_lons = values[0]; + __pyx_v_lats = values[1]; + __pyx_v_az = values[2]; + __pyx_v_dist = values[3]; + __pyx_v_radians = values[4]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_L3_error:; + __Pyx_AddTraceback("_geod.Geod._fwd", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + + /* "_geod.pyx":65 + * cdef int err + * # if buffer api is supported, get pointer to data buffers. + * if PyObject_AsWriteBuffer(lons, &londata, &buflenlons) <> 0: # <<<<<<<<<<<<<< + * raise RuntimeError + * if PyObject_AsWriteBuffer(lats, &latdata, &buflenlats) <> 0: + */ + __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lons, (&__pyx_v_londata), (&__pyx_v_buflenlons)) != 0); + if (__pyx_t_1) { + + /* "_geod.pyx":66 + * # if buffer api is supported, get pointer to data buffers. + * if PyObject_AsWriteBuffer(lons, &londata, &buflenlons) <> 0: + * raise RuntimeError # <<<<<<<<<<<<<< + * if PyObject_AsWriteBuffer(lats, &latdata, &buflenlats) <> 0: + * raise RuntimeError + */ + __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L6; + } + __pyx_L6:; + + /* "_geod.pyx":67 + * if PyObject_AsWriteBuffer(lons, &londata, &buflenlons) <> 0: + * raise RuntimeError + * if PyObject_AsWriteBuffer(lats, &latdata, &buflenlats) <> 0: # <<<<<<<<<<<<<< + * raise RuntimeError + * if PyObject_AsWriteBuffer(az, &azdat, &buflenaz) <> 0: + */ + __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lats, (&__pyx_v_latdata), (&__pyx_v_buflenlats)) != 0); + if (__pyx_t_1) { + + /* "_geod.pyx":68 + * raise RuntimeError + * if PyObject_AsWriteBuffer(lats, &latdata, &buflenlats) <> 0: + * raise RuntimeError # <<<<<<<<<<<<<< + * if PyObject_AsWriteBuffer(az, &azdat, &buflenaz) <> 0: + * raise RuntimeError + */ + __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L7; + } + __pyx_L7:; + + /* "_geod.pyx":69 + * if PyObject_AsWriteBuffer(lats, &latdata, &buflenlats) <> 0: + * raise RuntimeError + * if PyObject_AsWriteBuffer(az, &azdat, &buflenaz) <> 0: # <<<<<<<<<<<<<< + * raise RuntimeError + * if PyObject_AsWriteBuffer(dist, &distdat, &buflend) <> 0: + */ + __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_az, (&__pyx_v_azdat), (&__pyx_v_buflenaz)) != 0); + if (__pyx_t_1) { + + /* "_geod.pyx":70 + * raise RuntimeError + * if PyObject_AsWriteBuffer(az, &azdat, &buflenaz) <> 0: + * raise RuntimeError # <<<<<<<<<<<<<< + * if PyObject_AsWriteBuffer(dist, &distdat, &buflend) <> 0: + * raise RuntimeError + */ + __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L8; + } + __pyx_L8:; + + /* "_geod.pyx":71 + * if PyObject_AsWriteBuffer(az, &azdat, &buflenaz) <> 0: + * raise RuntimeError + * if PyObject_AsWriteBuffer(dist, &distdat, &buflend) <> 0: # <<<<<<<<<<<<<< + * raise RuntimeError + * # process data in buffer + */ + __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_dist, (&__pyx_v_distdat), (&__pyx_v_buflend)) != 0); + if (__pyx_t_1) { + + /* "_geod.pyx":72 + * raise RuntimeError + * if PyObject_AsWriteBuffer(dist, &distdat, &buflend) <> 0: + * raise RuntimeError # <<<<<<<<<<<<<< + * # process data in buffer + * if not buflenlons == buflenlats == buflenaz == buflend: + */ + __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L9; + } + __pyx_L9:; + + /* "_geod.pyx":74 + * raise RuntimeError + * # process data in buffer + * if not buflenlons == buflenlats == buflenaz == buflend: # <<<<<<<<<<<<<< + * raise RuntimeError("Buffer lengths not the same") + * ndim = buflenlons//_doublesize + */ + __pyx_t_1 = (__pyx_v_buflenlons == __pyx_v_buflenlats); + if (__pyx_t_1) { + __pyx_t_1 = (__pyx_v_buflenlats == __pyx_v_buflenaz); + if (__pyx_t_1) { + __pyx_t_1 = (__pyx_v_buflenaz == __pyx_v_buflend); + } + } + __pyx_t_2 = (!__pyx_t_1); + if (__pyx_t_2) { + + /* "_geod.pyx":75 + * # process data in buffer + * if not buflenlons == buflenlats == buflenaz == buflend: + * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< + * ndim = buflenlons//_doublesize + * lonsdata = londata + */ + __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L10; + } + __pyx_L10:; + + /* "_geod.pyx":76 + * if not buflenlons == buflenlats == buflenaz == buflend: + * raise RuntimeError("Buffer lengths not the same") + * ndim = buflenlons//_doublesize # <<<<<<<<<<<<<< + * lonsdata = londata + * latsdata = latdata + */ + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_buflenlons); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyNumber_FloorDivide(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_ndim = __pyx_t_6; + + /* "_geod.pyx":77 + * raise RuntimeError("Buffer lengths not the same") + * ndim = buflenlons//_doublesize + * lonsdata = londata # <<<<<<<<<<<<<< + * latsdata = latdata + * azdata = azdat + */ + __pyx_v_lonsdata = ((double *)__pyx_v_londata); + + /* "_geod.pyx":78 + * ndim = buflenlons//_doublesize + * lonsdata = londata + * latsdata = latdata # <<<<<<<<<<<<<< + * azdata = azdat + * distdata = distdat + */ + __pyx_v_latsdata = ((double *)__pyx_v_latdata); + + /* "_geod.pyx":79 + * lonsdata = londata + * latsdata = latdata + * azdata = azdat # <<<<<<<<<<<<<< + * distdata = distdat + * for i from 0 <= i < ndim: + */ + __pyx_v_azdata = ((double *)__pyx_v_azdat); + + /* "_geod.pyx":80 + * latsdata = latdata + * azdata = azdat + * distdata = distdat # <<<<<<<<<<<<<< + * for i from 0 <= i < ndim: + * if radians: + */ + __pyx_v_distdata = ((double *)__pyx_v_distdat); + + /* "_geod.pyx":81 + * azdata = azdat + * distdata = distdat + * for i from 0 <= i < ndim: # <<<<<<<<<<<<<< + * if radians: + * self.pt1.lam = lonsdata[i] + */ + __pyx_t_6 = __pyx_v_ndim; + for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) { + + /* "_geod.pyx":82 + * distdata = distdat + * for i from 0 <= i < ndim: + * if radians: # <<<<<<<<<<<<<< + * self.pt1.lam = lonsdata[i] + * self.pt1.phi = latsdata[i] + */ + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__pyx_t_2) { + + /* "_geod.pyx":83 + * for i from 0 <= i < ndim: + * if radians: + * self.pt1.lam = lonsdata[i] # <<<<<<<<<<<<<< + * self.pt1.phi = latsdata[i] + * self.pt1.h = 0. + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.lam = (__pyx_v_lonsdata[__pyx_v_i]); + + /* "_geod.pyx":84 + * if radians: + * self.pt1.lam = lonsdata[i] + * self.pt1.phi = latsdata[i] # <<<<<<<<<<<<<< + * self.pt1.h = 0. + * self.arc.pt1 = &self.pt1 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.phi = (__pyx_v_latsdata[__pyx_v_i]); + + /* "_geod.pyx":85 + * self.pt1.lam = lonsdata[i] + * self.pt1.phi = latsdata[i] + * self.pt1.h = 0. # <<<<<<<<<<<<<< + * self.arc.pt1 = &self.pt1 + * self.arc.az12 = azdata[i] + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.h = 0.; + + /* "_geod.pyx":86 + * self.pt1.phi = latsdata[i] + * self.pt1.h = 0. + * self.arc.pt1 = &self.pt1 # <<<<<<<<<<<<<< + * self.arc.az12 = azdata[i] + * self.arc.S = distdata[i] + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt1 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1); + + /* "_geod.pyx":87 + * self.pt1.h = 0. + * self.arc.pt1 = &self.pt1 + * self.arc.az12 = azdata[i] # <<<<<<<<<<<<<< + * self.arc.S = distdata[i] + * else: + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az12 = (__pyx_v_azdata[__pyx_v_i]); + + /* "_geod.pyx":88 + * self.arc.pt1 = &self.pt1 + * self.arc.az12 = azdata[i] + * self.arc.S = distdata[i] # <<<<<<<<<<<<<< + * else: + * self.pt1.lam = _dg2rad*lonsdata[i] + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.S = (__pyx_v_distdata[__pyx_v_i]); + goto __pyx_L13; + } + /*else*/ { + + /* "_geod.pyx":90 + * self.arc.S = distdata[i] + * else: + * self.pt1.lam = _dg2rad*lonsdata[i] # <<<<<<<<<<<<<< + * self.pt1.phi = _dg2rad*latsdata[i] + * self.pt1.h = 0. + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.lam = (__pyx_v_5_geod__dg2rad * (__pyx_v_lonsdata[__pyx_v_i])); + + /* "_geod.pyx":91 + * else: + * self.pt1.lam = _dg2rad*lonsdata[i] + * self.pt1.phi = _dg2rad*latsdata[i] # <<<<<<<<<<<<<< + * self.pt1.h = 0. + * self.arc.pt1 = &self.pt1 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.phi = (__pyx_v_5_geod__dg2rad * (__pyx_v_latsdata[__pyx_v_i])); + + /* "_geod.pyx":92 + * self.pt1.lam = _dg2rad*lonsdata[i] + * self.pt1.phi = _dg2rad*latsdata[i] + * self.pt1.h = 0. # <<<<<<<<<<<<<< + * self.arc.pt1 = &self.pt1 + * self.arc.az12 = _dg2rad*azdata[i] + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.h = 0.; + + /* "_geod.pyx":93 + * self.pt1.phi = _dg2rad*latsdata[i] + * self.pt1.h = 0. + * self.arc.pt1 = &self.pt1 # <<<<<<<<<<<<<< + * self.arc.az12 = _dg2rad*azdata[i] + * self.arc.S = distdata[i] + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt1 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1); + + /* "_geod.pyx":94 + * self.pt1.h = 0. + * self.arc.pt1 = &self.pt1 + * self.arc.az12 = _dg2rad*azdata[i] # <<<<<<<<<<<<<< + * self.arc.S = distdata[i] + * # Computes the location of the second point in the structure + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az12 = (__pyx_v_5_geod__dg2rad * (__pyx_v_azdata[__pyx_v_i])); + + /* "_geod.pyx":95 + * self.arc.pt1 = &self.pt1 + * self.arc.az12 = _dg2rad*azdata[i] + * self.arc.S = distdata[i] # <<<<<<<<<<<<<< + * # Computes the location of the second point in the structure + * # based on the first point's location and the distance and + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.S = (__pyx_v_distdata[__pyx_v_i]); + } + __pyx_L13:; + + /* "_geod.pyx":99 + * # based on the first point's location and the distance and + * # forward azumuth + * if self.sphere: # <<<<<<<<<<<<<< + * proj_sp_fwd(&self.arc) + * else: + */ + __pyx_t_5 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__sphere); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_2) { + + /* "_geod.pyx":100 + * # forward azumuth + * if self.sphere: + * proj_sp_fwd(&self.arc) # <<<<<<<<<<<<<< + * else: + * proj_in_fwd(&self.arc) + */ + proj_sp_fwd((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); + goto __pyx_L14; + } + /*else*/ { + + /* "_geod.pyx":102 + * proj_sp_fwd(&self.arc) + * else: + * proj_in_fwd(&self.arc) # <<<<<<<<<<<<<< + * if radians: + * self.pt2.lam = self.arc.pt2.lam + */ + proj_in_fwd((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); + } + __pyx_L14:; + + /* "_geod.pyx":103 + * else: + * proj_in_fwd(&self.arc) + * if radians: # <<<<<<<<<<<<<< + * self.pt2.lam = self.arc.pt2.lam + * self.pt2.phi = self.arc.pt2.phi + */ + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__pyx_t_2) { + + /* "_geod.pyx":104 + * proj_in_fwd(&self.arc) + * if radians: + * self.pt2.lam = self.arc.pt2.lam # <<<<<<<<<<<<<< + * self.pt2.phi = self.arc.pt2.phi + * lonsdata[i] = self.pt2.lam + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2->lam; + + /* "_geod.pyx":105 + * if radians: + * self.pt2.lam = self.arc.pt2.lam + * self.pt2.phi = self.arc.pt2.phi # <<<<<<<<<<<<<< + * lonsdata[i] = self.pt2.lam + * latsdata[i] = self.pt2.phi + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2->phi; + + /* "_geod.pyx":106 + * self.pt2.lam = self.arc.pt2.lam + * self.pt2.phi = self.arc.pt2.phi + * lonsdata[i] = self.pt2.lam # <<<<<<<<<<<<<< + * latsdata[i] = self.pt2.phi + * azdata[i] = self.arc.az21 + */ + (__pyx_v_lonsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam; + + /* "_geod.pyx":107 + * self.pt2.phi = self.arc.pt2.phi + * lonsdata[i] = self.pt2.lam + * latsdata[i] = self.pt2.phi # <<<<<<<<<<<<<< + * azdata[i] = self.arc.az21 + * else: + */ + (__pyx_v_latsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi; + + /* "_geod.pyx":108 + * lonsdata[i] = self.pt2.lam + * latsdata[i] = self.pt2.phi + * azdata[i] = self.arc.az21 # <<<<<<<<<<<<<< + * else: + * self.pt2.lam = _rad2dg*self.arc.pt2.lam + */ + (__pyx_v_azdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az21; + goto __pyx_L15; + } + /*else*/ { + + /* "_geod.pyx":110 + * azdata[i] = self.arc.az21 + * else: + * self.pt2.lam = _rad2dg*self.arc.pt2.lam # <<<<<<<<<<<<<< + * self.pt2.phi = _rad2dg*self.arc.pt2.phi + * lonsdata[i] = self.pt2.lam + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam = (__pyx_v_5_geod__rad2dg * ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2->lam); + + /* "_geod.pyx":111 + * else: + * self.pt2.lam = _rad2dg*self.arc.pt2.lam + * self.pt2.phi = _rad2dg*self.arc.pt2.phi # <<<<<<<<<<<<<< + * lonsdata[i] = self.pt2.lam + * latsdata[i] = self.pt2.phi + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi = (__pyx_v_5_geod__rad2dg * ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2->phi); + + /* "_geod.pyx":112 + * self.pt2.lam = _rad2dg*self.arc.pt2.lam + * self.pt2.phi = _rad2dg*self.arc.pt2.phi + * lonsdata[i] = self.pt2.lam # <<<<<<<<<<<<<< + * latsdata[i] = self.pt2.phi + * azdata[i] = _rad2dg*self.arc.az21 + */ + (__pyx_v_lonsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam; + + /* "_geod.pyx":113 + * self.pt2.phi = _rad2dg*self.arc.pt2.phi + * lonsdata[i] = self.pt2.lam + * latsdata[i] = self.pt2.phi # <<<<<<<<<<<<<< + * azdata[i] = _rad2dg*self.arc.az21 + * + */ + (__pyx_v_latsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi; + + /* "_geod.pyx":114 + * lonsdata[i] = self.pt2.lam + * latsdata[i] = self.pt2.phi + * azdata[i] = _rad2dg*self.arc.az21 # <<<<<<<<<<<<<< + * + * def _inv(self, object lons1, object lats1, object lons2, object lats2, radians=False): + */ + (__pyx_v_azdata[__pyx_v_i]) = (__pyx_v_5_geod__rad2dg * ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az21); + } + __pyx_L15:; + } + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("_geod.Geod._fwd", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_geod.pyx":116 + * azdata[i] = _rad2dg*self.arc.az21 + * + * def _inv(self, object lons1, object lats1, object lons2, object lats2, radians=False): # <<<<<<<<<<<<<< + * """ + * inverse transformation - return forward and back azimuths, plus distance + */ + +static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_5_geod_4Geod_3_inv[] = "\n inverse transformation - return forward and back azimuths, plus distance\n between an initial and terminus lat/lon pair.\n if radians=True, lons/lats are radians instead of degrees.\n "; +static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_lons1 = 0; + PyObject *__pyx_v_lats1 = 0; + PyObject *__pyx_v_lons2 = 0; + PyObject *__pyx_v_lats2 = 0; + PyObject *__pyx_v_radians = 0; + Py_ssize_t __pyx_v_buflenlons; + Py_ssize_t __pyx_v_buflenlats; + Py_ssize_t __pyx_v_buflenaz; + Py_ssize_t __pyx_v_buflend; + Py_ssize_t __pyx_v_ndim; + Py_ssize_t __pyx_v_i; + double *__pyx_v_lonsdata; + double *__pyx_v_latsdata; + double *__pyx_v_azdata; + double *__pyx_v_distdata; + void *__pyx_v_londata; + void *__pyx_v_latdata; + void *__pyx_v_azdat; + void *__pyx_v_distdat; + PyObject *__pyx_v_errmsg = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + Py_ssize_t __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__lons1,&__pyx_n_s__lats1,&__pyx_n_s__lons2,&__pyx_n_s__lats2,&__pyx_n_s__radians,0}; + __Pyx_RefNannySetupContext("_inv"); + { + PyObject* values[5] = {0,0,0,0,0}; + values[4] = __pyx_k_5; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 0: + values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lons1); + if (likely(values[0])) kw_args--; + else goto __pyx_L5_argtuple_error; + case 1: + values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lats1); + if (likely(values[1])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 2: + values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lons2); + if (likely(values[2])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 3: + values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lats2); + if (likely(values[3])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 4: + if (kw_args > 0) { + PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__radians); + if (value) { values[4] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_inv") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_lons1 = values[0]; + __pyx_v_lats1 = values[1]; + __pyx_v_lons2 = values[2]; + __pyx_v_lats2 = values[3]; + __pyx_v_radians = values[4]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_L3_error:; + __Pyx_AddTraceback("_geod.Geod._inv", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + + /* "_geod.pyx":127 + * cdef int err + * # if buffer api is supported, get pointer to data buffers. + * if PyObject_AsWriteBuffer(lons1, &londata, &buflenlons) <> 0: # <<<<<<<<<<<<<< + * raise RuntimeError + * if PyObject_AsWriteBuffer(lats1, &latdata, &buflenlats) <> 0: + */ + __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lons1, (&__pyx_v_londata), (&__pyx_v_buflenlons)) != 0); + if (__pyx_t_1) { + + /* "_geod.pyx":128 + * # if buffer api is supported, get pointer to data buffers. + * if PyObject_AsWriteBuffer(lons1, &londata, &buflenlons) <> 0: + * raise RuntimeError # <<<<<<<<<<<<<< + * if PyObject_AsWriteBuffer(lats1, &latdata, &buflenlats) <> 0: + * raise RuntimeError + */ + __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L6; + } + __pyx_L6:; + + /* "_geod.pyx":129 + * if PyObject_AsWriteBuffer(lons1, &londata, &buflenlons) <> 0: + * raise RuntimeError + * if PyObject_AsWriteBuffer(lats1, &latdata, &buflenlats) <> 0: # <<<<<<<<<<<<<< + * raise RuntimeError + * if PyObject_AsWriteBuffer(lons2, &azdat, &buflenaz) <> 0: + */ + __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lats1, (&__pyx_v_latdata), (&__pyx_v_buflenlats)) != 0); + if (__pyx_t_1) { + + /* "_geod.pyx":130 + * raise RuntimeError + * if PyObject_AsWriteBuffer(lats1, &latdata, &buflenlats) <> 0: + * raise RuntimeError # <<<<<<<<<<<<<< + * if PyObject_AsWriteBuffer(lons2, &azdat, &buflenaz) <> 0: + * raise RuntimeError + */ + __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L7; + } + __pyx_L7:; + + /* "_geod.pyx":131 + * if PyObject_AsWriteBuffer(lats1, &latdata, &buflenlats) <> 0: + * raise RuntimeError + * if PyObject_AsWriteBuffer(lons2, &azdat, &buflenaz) <> 0: # <<<<<<<<<<<<<< + * raise RuntimeError + * if PyObject_AsWriteBuffer(lats2, &distdat, &buflend) <> 0: + */ + __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lons2, (&__pyx_v_azdat), (&__pyx_v_buflenaz)) != 0); + if (__pyx_t_1) { + + /* "_geod.pyx":132 + * raise RuntimeError + * if PyObject_AsWriteBuffer(lons2, &azdat, &buflenaz) <> 0: + * raise RuntimeError # <<<<<<<<<<<<<< + * if PyObject_AsWriteBuffer(lats2, &distdat, &buflend) <> 0: + * raise RuntimeError + */ + __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L8; + } + __pyx_L8:; + + /* "_geod.pyx":133 + * if PyObject_AsWriteBuffer(lons2, &azdat, &buflenaz) <> 0: + * raise RuntimeError + * if PyObject_AsWriteBuffer(lats2, &distdat, &buflend) <> 0: # <<<<<<<<<<<<<< + * raise RuntimeError + * # process data in buffer + */ + __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lats2, (&__pyx_v_distdat), (&__pyx_v_buflend)) != 0); + if (__pyx_t_1) { + + /* "_geod.pyx":134 + * raise RuntimeError + * if PyObject_AsWriteBuffer(lats2, &distdat, &buflend) <> 0: + * raise RuntimeError # <<<<<<<<<<<<<< + * # process data in buffer + * if not buflenlons == buflenlats == buflenaz == buflend: + */ + __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L9; + } + __pyx_L9:; + + /* "_geod.pyx":136 + * raise RuntimeError + * # process data in buffer + * if not buflenlons == buflenlats == buflenaz == buflend: # <<<<<<<<<<<<<< + * raise RuntimeError("Buffer lengths not the same") + * ndim = buflenlons//_doublesize + */ + __pyx_t_1 = (__pyx_v_buflenlons == __pyx_v_buflenlats); + if (__pyx_t_1) { + __pyx_t_1 = (__pyx_v_buflenlats == __pyx_v_buflenaz); + if (__pyx_t_1) { + __pyx_t_1 = (__pyx_v_buflenaz == __pyx_v_buflend); + } + } + __pyx_t_2 = (!__pyx_t_1); + if (__pyx_t_2) { + + /* "_geod.pyx":137 + * # process data in buffer + * if not buflenlons == buflenlats == buflenaz == buflend: + * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< + * ndim = buflenlons//_doublesize + * lonsdata = londata + */ + __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_6), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + goto __pyx_L10; + } + __pyx_L10:; + + /* "_geod.pyx":138 + * if not buflenlons == buflenlats == buflenaz == buflend: + * raise RuntimeError("Buffer lengths not the same") + * ndim = buflenlons//_doublesize # <<<<<<<<<<<<<< + * lonsdata = londata + * latsdata = latdata + */ + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_buflenlons); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyNumber_FloorDivide(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_ndim = __pyx_t_6; + + /* "_geod.pyx":139 + * raise RuntimeError("Buffer lengths not the same") + * ndim = buflenlons//_doublesize + * lonsdata = londata # <<<<<<<<<<<<<< + * latsdata = latdata + * azdata = azdat + */ + __pyx_v_lonsdata = ((double *)__pyx_v_londata); + + /* "_geod.pyx":140 + * ndim = buflenlons//_doublesize + * lonsdata = londata + * latsdata = latdata # <<<<<<<<<<<<<< + * azdata = azdat + * distdata = distdat + */ + __pyx_v_latsdata = ((double *)__pyx_v_latdata); + + /* "_geod.pyx":141 + * lonsdata = londata + * latsdata = latdata + * azdata = azdat # <<<<<<<<<<<<<< + * distdata = distdat + * errmsg = 'undefined inverse geodesic (may be an antipodal point)' + */ + __pyx_v_azdata = ((double *)__pyx_v_azdat); + + /* "_geod.pyx":142 + * latsdata = latdata + * azdata = azdat + * distdata = distdat # <<<<<<<<<<<<<< + * errmsg = 'undefined inverse geodesic (may be an antipodal point)' + * for i from 0 <= i < ndim: + */ + __pyx_v_distdata = ((double *)__pyx_v_distdat); + + /* "_geod.pyx":143 + * azdata = azdat + * distdata = distdat + * errmsg = 'undefined inverse geodesic (may be an antipodal point)' # <<<<<<<<<<<<<< + * for i from 0 <= i < ndim: + * if radians: + */ + __Pyx_INCREF(((PyObject *)__pyx_kp_s_7)); + __pyx_v_errmsg = ((PyObject *)__pyx_kp_s_7); + + /* "_geod.pyx":144 + * distdata = distdat + * errmsg = 'undefined inverse geodesic (may be an antipodal point)' + * for i from 0 <= i < ndim: # <<<<<<<<<<<<<< + * if radians: + * self.pt1.lam = lonsdata[i] + */ + __pyx_t_6 = __pyx_v_ndim; + for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) { + + /* "_geod.pyx":145 + * errmsg = 'undefined inverse geodesic (may be an antipodal point)' + * for i from 0 <= i < ndim: + * if radians: # <<<<<<<<<<<<<< + * self.pt1.lam = lonsdata[i] + * self.pt1.phi = latsdata[i] + */ + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__pyx_t_2) { + + /* "_geod.pyx":146 + * for i from 0 <= i < ndim: + * if radians: + * self.pt1.lam = lonsdata[i] # <<<<<<<<<<<<<< + * self.pt1.phi = latsdata[i] + * self.pt1.h = 0. + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.lam = (__pyx_v_lonsdata[__pyx_v_i]); + + /* "_geod.pyx":147 + * if radians: + * self.pt1.lam = lonsdata[i] + * self.pt1.phi = latsdata[i] # <<<<<<<<<<<<<< + * self.pt1.h = 0. + * self.pt2.lam = azdata[i] + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.phi = (__pyx_v_latsdata[__pyx_v_i]); + + /* "_geod.pyx":148 + * self.pt1.lam = lonsdata[i] + * self.pt1.phi = latsdata[i] + * self.pt1.h = 0. # <<<<<<<<<<<<<< + * self.pt2.lam = azdata[i] + * self.pt2.phi = distdata[i] + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.h = 0.; + + /* "_geod.pyx":149 + * self.pt1.phi = latsdata[i] + * self.pt1.h = 0. + * self.pt2.lam = azdata[i] # <<<<<<<<<<<<<< + * self.pt2.phi = distdata[i] + * self.arc.pt1 = &self.pt1 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam = (__pyx_v_azdata[__pyx_v_i]); + + /* "_geod.pyx":150 + * self.pt1.h = 0. + * self.pt2.lam = azdata[i] + * self.pt2.phi = distdata[i] # <<<<<<<<<<<<<< + * self.arc.pt1 = &self.pt1 + * self.arc.pt2 = &self.pt2 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi = (__pyx_v_distdata[__pyx_v_i]); + + /* "_geod.pyx":151 + * self.pt2.lam = azdata[i] + * self.pt2.phi = distdata[i] + * self.arc.pt1 = &self.pt1 # <<<<<<<<<<<<<< + * self.arc.pt2 = &self.pt2 + * else: + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt1 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1); + + /* "_geod.pyx":152 + * self.pt2.phi = distdata[i] + * self.arc.pt1 = &self.pt1 + * self.arc.pt2 = &self.pt2 # <<<<<<<<<<<<<< + * else: + * self.pt1.lam = _dg2rad*lonsdata[i] + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2); + goto __pyx_L13; + } + /*else*/ { + + /* "_geod.pyx":154 + * self.arc.pt2 = &self.pt2 + * else: + * self.pt1.lam = _dg2rad*lonsdata[i] # <<<<<<<<<<<<<< + * self.pt1.phi = _dg2rad*latsdata[i] + * self.pt1.h = 0. + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.lam = (__pyx_v_5_geod__dg2rad * (__pyx_v_lonsdata[__pyx_v_i])); + + /* "_geod.pyx":155 + * else: + * self.pt1.lam = _dg2rad*lonsdata[i] + * self.pt1.phi = _dg2rad*latsdata[i] # <<<<<<<<<<<<<< + * self.pt1.h = 0. + * self.pt2.lam = _dg2rad*azdata[i] + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.phi = (__pyx_v_5_geod__dg2rad * (__pyx_v_latsdata[__pyx_v_i])); + + /* "_geod.pyx":156 + * self.pt1.lam = _dg2rad*lonsdata[i] + * self.pt1.phi = _dg2rad*latsdata[i] + * self.pt1.h = 0. # <<<<<<<<<<<<<< + * self.pt2.lam = _dg2rad*azdata[i] + * self.pt2.phi = _dg2rad*distdata[i] + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.h = 0.; + + /* "_geod.pyx":157 + * self.pt1.phi = _dg2rad*latsdata[i] + * self.pt1.h = 0. + * self.pt2.lam = _dg2rad*azdata[i] # <<<<<<<<<<<<<< + * self.pt2.phi = _dg2rad*distdata[i] + * self.arc.pt1 = &self.pt1 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam = (__pyx_v_5_geod__dg2rad * (__pyx_v_azdata[__pyx_v_i])); + + /* "_geod.pyx":158 + * self.pt1.h = 0. + * self.pt2.lam = _dg2rad*azdata[i] + * self.pt2.phi = _dg2rad*distdata[i] # <<<<<<<<<<<<<< + * self.arc.pt1 = &self.pt1 + * self.arc.pt2 = &self.pt2 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi = (__pyx_v_5_geod__dg2rad * (__pyx_v_distdata[__pyx_v_i])); + + /* "_geod.pyx":159 + * self.pt2.lam = _dg2rad*azdata[i] + * self.pt2.phi = _dg2rad*distdata[i] + * self.arc.pt1 = &self.pt1 # <<<<<<<<<<<<<< + * self.arc.pt2 = &self.pt2 + * # Computes distance, forward and back azimuths in structure + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt1 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1); + + /* "_geod.pyx":160 + * self.pt2.phi = _dg2rad*distdata[i] + * self.arc.pt1 = &self.pt1 + * self.arc.pt2 = &self.pt2 # <<<<<<<<<<<<<< + * # Computes distance, forward and back azimuths in structure + * # for the two end points of the geodesic line + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2); + } + __pyx_L13:; + + /* "_geod.pyx":163 + * # Computes distance, forward and back azimuths in structure + * # for the two end points of the geodesic line + * if self.sphere: # <<<<<<<<<<<<<< + * proj_sp_inv(&self.arc) + * else: + */ + __pyx_t_5 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__sphere); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_2) { + + /* "_geod.pyx":164 + * # for the two end points of the geodesic line + * if self.sphere: + * proj_sp_inv(&self.arc) # <<<<<<<<<<<<<< + * else: + * proj_in_inv(&self.arc) + */ + proj_sp_inv((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); + goto __pyx_L14; + } + /*else*/ { + + /* "_geod.pyx":166 + * proj_sp_inv(&self.arc) + * else: + * proj_in_inv(&self.arc) # <<<<<<<<<<<<<< + * if radians: + * lonsdata[i] = self.arc.az12 + */ + proj_in_inv((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); + } + __pyx_L14:; + + /* "_geod.pyx":167 + * else: + * proj_in_inv(&self.arc) + * if radians: # <<<<<<<<<<<<<< + * lonsdata[i] = self.arc.az12 + * latsdata[i] = self.arc.az21 + */ + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__pyx_t_2) { + + /* "_geod.pyx":168 + * proj_in_inv(&self.arc) + * if radians: + * lonsdata[i] = self.arc.az12 # <<<<<<<<<<<<<< + * latsdata[i] = self.arc.az21 + * else: + */ + (__pyx_v_lonsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az12; + + /* "_geod.pyx":169 + * if radians: + * lonsdata[i] = self.arc.az12 + * latsdata[i] = self.arc.az21 # <<<<<<<<<<<<<< + * else: + * lonsdata[i] = _rad2dg*self.arc.az12 + */ + (__pyx_v_latsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az21; + goto __pyx_L15; + } + /*else*/ { + + /* "_geod.pyx":171 + * latsdata[i] = self.arc.az21 + * else: + * lonsdata[i] = _rad2dg*self.arc.az12 # <<<<<<<<<<<<<< + * latsdata[i] = _rad2dg*self.arc.az21 + * azdata[i] = self.arc.S + */ + (__pyx_v_lonsdata[__pyx_v_i]) = (__pyx_v_5_geod__rad2dg * ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az12); + + /* "_geod.pyx":172 + * else: + * lonsdata[i] = _rad2dg*self.arc.az12 + * latsdata[i] = _rad2dg*self.arc.az21 # <<<<<<<<<<<<<< + * azdata[i] = self.arc.S + * + */ + (__pyx_v_latsdata[__pyx_v_i]) = (__pyx_v_5_geod__rad2dg * ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az21); + } + __pyx_L15:; + + /* "_geod.pyx":173 + * lonsdata[i] = _rad2dg*self.arc.az12 + * latsdata[i] = _rad2dg*self.arc.az21 + * azdata[i] = self.arc.S # <<<<<<<<<<<<<< + * + * def _npts(self, double lon1, double lat1, double lon2, double lat2, int npts, radians=False): + */ + (__pyx_v_azdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.S; + } + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("_geod.Geod._inv", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_errmsg); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_geod.pyx":175 + * azdata[i] = self.arc.S + * + * def _npts(self, double lon1, double lat1, double lon2, double lat2, int npts, radians=False): # <<<<<<<<<<<<<< + * """ + * given initial and terminus lat/lon, find npts intermediate points.""" + */ + +static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_5_geod_4Geod_4_npts[] = "\n given initial and terminus lat/lon, find npts intermediate points."; +static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + double __pyx_v_lon1; + double __pyx_v_lat1; + double __pyx_v_lon2; + double __pyx_v_lat2; + int __pyx_v_npts; + PyObject *__pyx_v_radians = 0; + int __pyx_v_i; + double __pyx_v_del_s; + PyObject *__pyx_v_lats = NULL; + PyObject *__pyx_v_lons = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + long __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__lon1,&__pyx_n_s__lat1,&__pyx_n_s__lon2,&__pyx_n_s__lat2,&__pyx_n_s__npts,&__pyx_n_s__radians,0}; + __Pyx_RefNannySetupContext("_npts"); + { + PyObject* values[6] = {0,0,0,0,0,0}; + values[5] = __pyx_k_8; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 0: + values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lon1); + if (likely(values[0])) kw_args--; + else goto __pyx_L5_argtuple_error; + case 1: + values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lat1); + if (likely(values[1])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 2: + values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lon2); + if (likely(values[2])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 3: + values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lat2); + if (likely(values[3])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 4: + values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__npts); + if (likely(values[4])) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 5: + if (kw_args > 0) { + PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__radians); + if (value) { values[5] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_npts") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_lon1 = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_lon1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_v_lat1 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_lat1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_v_lon2 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_lon2 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_v_lat2 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_lat2 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_v_npts = __Pyx_PyInt_AsInt(values[4]); if (unlikely((__pyx_v_npts == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_v_radians = values[5]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_L3_error:; + __Pyx_AddTraceback("_geod.Geod._npts", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + + /* "_geod.pyx":180 + * cdef int i + * cdef double del_s + * if radians: # <<<<<<<<<<<<<< + * self.pt1.lam = lon1 + * self.pt1.phi = lat1 + */ + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__pyx_t_1) { + + /* "_geod.pyx":181 + * cdef double del_s + * if radians: + * self.pt1.lam = lon1 # <<<<<<<<<<<<<< + * self.pt1.phi = lat1 + * self.pt1.h = 0. + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.lam = __pyx_v_lon1; + + /* "_geod.pyx":182 + * if radians: + * self.pt1.lam = lon1 + * self.pt1.phi = lat1 # <<<<<<<<<<<<<< + * self.pt1.h = 0. + * self.pt2.lam = lon2 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.phi = __pyx_v_lat1; + + /* "_geod.pyx":183 + * self.pt1.lam = lon1 + * self.pt1.phi = lat1 + * self.pt1.h = 0. # <<<<<<<<<<<<<< + * self.pt2.lam = lon2 + * self.pt2.phi = lat2 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.h = 0.; + + /* "_geod.pyx":184 + * self.pt1.phi = lat1 + * self.pt1.h = 0. + * self.pt2.lam = lon2 # <<<<<<<<<<<<<< + * self.pt2.phi = lat2 + * self.arc.pt1 = &self.pt1 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam = __pyx_v_lon2; + + /* "_geod.pyx":185 + * self.pt1.h = 0. + * self.pt2.lam = lon2 + * self.pt2.phi = lat2 # <<<<<<<<<<<<<< + * self.arc.pt1 = &self.pt1 + * self.arc.pt2 = &self.pt2 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi = __pyx_v_lat2; + + /* "_geod.pyx":186 + * self.pt2.lam = lon2 + * self.pt2.phi = lat2 + * self.arc.pt1 = &self.pt1 # <<<<<<<<<<<<<< + * self.arc.pt2 = &self.pt2 + * else: + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt1 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1); + + /* "_geod.pyx":187 + * self.pt2.phi = lat2 + * self.arc.pt1 = &self.pt1 + * self.arc.pt2 = &self.pt2 # <<<<<<<<<<<<<< + * else: + * self.pt1.lam = _dg2rad*lon1 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2); + goto __pyx_L6; + } + /*else*/ { + + /* "_geod.pyx":189 + * self.arc.pt2 = &self.pt2 + * else: + * self.pt1.lam = _dg2rad*lon1 # <<<<<<<<<<<<<< + * self.pt1.phi = _dg2rad*lat1 + * self.pt1.h = 0. + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.lam = (__pyx_v_5_geod__dg2rad * __pyx_v_lon1); + + /* "_geod.pyx":190 + * else: + * self.pt1.lam = _dg2rad*lon1 + * self.pt1.phi = _dg2rad*lat1 # <<<<<<<<<<<<<< + * self.pt1.h = 0. + * self.pt2.lam = _dg2rad*lon2 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.phi = (__pyx_v_5_geod__dg2rad * __pyx_v_lat1); + + /* "_geod.pyx":191 + * self.pt1.lam = _dg2rad*lon1 + * self.pt1.phi = _dg2rad*lat1 + * self.pt1.h = 0. # <<<<<<<<<<<<<< + * self.pt2.lam = _dg2rad*lon2 + * self.pt2.phi = _dg2rad*lat2 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.h = 0.; + + /* "_geod.pyx":192 + * self.pt1.phi = _dg2rad*lat1 + * self.pt1.h = 0. + * self.pt2.lam = _dg2rad*lon2 # <<<<<<<<<<<<<< + * self.pt2.phi = _dg2rad*lat2 + * self.arc.pt1 = &self.pt1 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam = (__pyx_v_5_geod__dg2rad * __pyx_v_lon2); + + /* "_geod.pyx":193 + * self.pt1.h = 0. + * self.pt2.lam = _dg2rad*lon2 + * self.pt2.phi = _dg2rad*lat2 # <<<<<<<<<<<<<< + * self.arc.pt1 = &self.pt1 + * self.arc.pt2 = &self.pt2 + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi = (__pyx_v_5_geod__dg2rad * __pyx_v_lat2); + + /* "_geod.pyx":194 + * self.pt2.lam = _dg2rad*lon2 + * self.pt2.phi = _dg2rad*lat2 + * self.arc.pt1 = &self.pt1 # <<<<<<<<<<<<<< + * self.arc.pt2 = &self.pt2 + * if self.sphere: + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt1 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1); + + /* "_geod.pyx":195 + * self.pt2.phi = _dg2rad*lat2 + * self.arc.pt1 = &self.pt1 + * self.arc.pt2 = &self.pt2 # <<<<<<<<<<<<<< + * if self.sphere: + * proj_sp_inv(&self.arc) + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2); + } + __pyx_L6:; + + /* "_geod.pyx":196 + * self.arc.pt1 = &self.pt1 + * self.arc.pt2 = &self.pt2 + * if self.sphere: # <<<<<<<<<<<<<< + * proj_sp_inv(&self.arc) + * else: + */ + __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__sphere); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_1) { + + /* "_geod.pyx":197 + * self.arc.pt2 = &self.pt2 + * if self.sphere: + * proj_sp_inv(&self.arc) # <<<<<<<<<<<<<< + * else: + * proj_in_inv(&self.arc) + */ + proj_sp_inv((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); + goto __pyx_L7; + } + /*else*/ { + + /* "_geod.pyx":199 + * proj_sp_inv(&self.arc) + * else: + * proj_in_inv(&self.arc) # <<<<<<<<<<<<<< + * # distance increment. + * del_s = self.arc.S/(npts+1) + */ + proj_in_inv((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); + } + __pyx_L7:; + + /* "_geod.pyx":201 + * proj_in_inv(&self.arc) + * # distance increment. + * del_s = self.arc.S/(npts+1) # <<<<<<<<<<<<<< + * # initialize output tuples. + * lats = () + */ + __pyx_t_3 = (__pyx_v_npts + 1); + if (unlikely(__pyx_t_3 == 0)) { + PyErr_Format(PyExc_ZeroDivisionError, "float division"); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_v_del_s = (((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.S / __pyx_t_3); + + /* "_geod.pyx":203 + * del_s = self.arc.S/(npts+1) + * # initialize output tuples. + * lats = () # <<<<<<<<<<<<<< + * lons = () + * # loop over intermediate points, compute lat/lons. + */ + __Pyx_INCREF(((PyObject *)__pyx_empty_tuple)); + __pyx_v_lats = __pyx_empty_tuple; + + /* "_geod.pyx":204 + * # initialize output tuples. + * lats = () + * lons = () # <<<<<<<<<<<<<< + * # loop over intermediate points, compute lat/lons. + * for i from 1 <= i < npts+1: + */ + __Pyx_INCREF(((PyObject *)__pyx_empty_tuple)); + __pyx_v_lons = __pyx_empty_tuple; + + /* "_geod.pyx":206 + * lons = () + * # loop over intermediate points, compute lat/lons. + * for i from 1 <= i < npts+1: # <<<<<<<<<<<<<< + * self.arc.S = i*del_s + * if self.sphere: + */ + __pyx_t_3 = (__pyx_v_npts + 1); + for (__pyx_v_i = 1; __pyx_v_i < __pyx_t_3; __pyx_v_i++) { + + /* "_geod.pyx":207 + * # loop over intermediate points, compute lat/lons. + * for i from 1 <= i < npts+1: + * self.arc.S = i*del_s # <<<<<<<<<<<<<< + * if self.sphere: + * proj_sp_fwd(&self.arc) + */ + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.S = (__pyx_v_i * __pyx_v_del_s); + + /* "_geod.pyx":208 + * for i from 1 <= i < npts+1: + * self.arc.S = i*del_s + * if self.sphere: # <<<<<<<<<<<<<< + * proj_sp_fwd(&self.arc) + * else: + */ + __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__sphere); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_1) { + + /* "_geod.pyx":209 + * self.arc.S = i*del_s + * if self.sphere: + * proj_sp_fwd(&self.arc) # <<<<<<<<<<<<<< + * else: + * proj_in_fwd(&self.arc) + */ + proj_sp_fwd((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); + goto __pyx_L10; + } + /*else*/ { + + /* "_geod.pyx":211 + * proj_sp_fwd(&self.arc) + * else: + * proj_in_fwd(&self.arc) # <<<<<<<<<<<<<< + * if radians: + * lats = lats + (self.pt2.phi,) + */ + proj_in_fwd((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); + } + __pyx_L10:; + + /* "_geod.pyx":212 + * else: + * proj_in_fwd(&self.arc) + * if radians: # <<<<<<<<<<<<<< + * lats = lats + (self.pt2.phi,) + * lons = lons + (self.pt2.lam.v,) + */ + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__pyx_t_1) { + + /* "_geod.pyx":213 + * proj_in_fwd(&self.arc) + * if radians: + * lats = lats + (self.pt2.phi,) # <<<<<<<<<<<<<< + * lons = lons + (self.pt2.lam.v,) + * else: + */ + __pyx_t_2 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = PyNumber_Add(((PyObject *)__pyx_v_lats), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_2)); + __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; + __Pyx_DECREF(((PyObject *)__pyx_v_lats)); + __pyx_v_lats = __pyx_t_2; + __pyx_t_2 = 0; + + /* "_geod.pyx":214 + * if radians: + * lats = lats + (self.pt2.phi,) + * lons = lons + (self.pt2.lam.v,) # <<<<<<<<<<<<<< + * else: + * lats = lats + (_rad2dg*self.pt2.phi,) + */ + __pyx_t_2 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__v); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_2)); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + __pyx_t_4 = 0; + __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_v_lons), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); + __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; + __Pyx_DECREF(((PyObject *)__pyx_v_lons)); + __pyx_v_lons = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L11; + } + /*else*/ { + + /* "_geod.pyx":216 + * lons = lons + (self.pt2.lam.v,) + * else: + * lats = lats + (_rad2dg*self.pt2.phi,) # <<<<<<<<<<<<<< + * lons = lons + (_rad2dg*self.pt2.lam,) + * return lons, lats + */ + __pyx_t_4 = PyFloat_FromDouble((__pyx_v_5_geod__rad2dg * ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_2)); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + __pyx_t_4 = 0; + __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_v_lats), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); + __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; + __Pyx_DECREF(((PyObject *)__pyx_v_lats)); + __pyx_v_lats = __pyx_t_4; + __pyx_t_4 = 0; + + /* "_geod.pyx":217 + * else: + * lats = lats + (_rad2dg*self.pt2.phi,) + * lons = lons + (_rad2dg*self.pt2.lam,) # <<<<<<<<<<<<<< + * return lons, lats + */ + __pyx_t_4 = PyFloat_FromDouble((__pyx_v_5_geod__rad2dg * ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_2)); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_4); + __pyx_t_4 = 0; + __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_v_lons), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); + __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; + __Pyx_DECREF(((PyObject *)__pyx_v_lons)); + __pyx_v_lons = __pyx_t_4; + __pyx_t_4 = 0; + } + __pyx_L11:; + } + + /* "_geod.pyx":218 + * lats = lats + (_rad2dg*self.pt2.phi,) + * lons = lons + (_rad2dg*self.pt2.lam,) + * return lons, lats # <<<<<<<<<<<<<< + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); + __Pyx_INCREF(((PyObject *)__pyx_v_lons)); + PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_lons)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_lons)); + __Pyx_INCREF(((PyObject *)__pyx_v_lats)); + PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_v_lats)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_lats)); + __pyx_r = ((PyObject *)__pyx_t_4); + __pyx_t_4 = 0; + goto __pyx_L0; + + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("_geod.Geod._npts", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_lats); + __Pyx_XDECREF(__pyx_v_lons); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_tp_new_5_geod_Geod(PyTypeObject *t, PyObject *a, PyObject *k) { + PyObject *o = (*t->tp_alloc)(t, 0); + if (!o) return 0; + if (__pyx_pf_5_geod_4Geod___cinit__(o, a, k) < 0) { + Py_DECREF(o); o = 0; + } + return o; +} + +static void __pyx_tp_dealloc_5_geod_Geod(PyObject *o) { + (*Py_TYPE(o)->tp_free)(o); +} + +static PyMethodDef __pyx_methods_5_geod_Geod[] = { + {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__pyx_pf_5_geod_4Geod_1__reduce__, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5_geod_4Geod_1__reduce__)}, + {__Pyx_NAMESTR("_fwd"), (PyCFunction)__pyx_pf_5_geod_4Geod_2_fwd, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}, + {__Pyx_NAMESTR("_inv"), (PyCFunction)__pyx_pf_5_geod_4Geod_3_inv, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5_geod_4Geod_3_inv)}, + {__Pyx_NAMESTR("_npts"), (PyCFunction)__pyx_pf_5_geod_4Geod_4_npts, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5_geod_4Geod_4_npts)}, + {0, 0, 0, 0} +}; + +static PyNumberMethods __pyx_tp_as_number_Geod = { + 0, /*nb_add*/ + 0, /*nb_subtract*/ + 0, /*nb_multiply*/ + #if PY_MAJOR_VERSION < 3 + 0, /*nb_divide*/ + #endif + 0, /*nb_remainder*/ + 0, /*nb_divmod*/ + 0, /*nb_power*/ + 0, /*nb_negative*/ + 0, /*nb_positive*/ + 0, /*nb_absolute*/ + 0, /*nb_nonzero*/ + 0, /*nb_invert*/ + 0, /*nb_lshift*/ + 0, /*nb_rshift*/ + 0, /*nb_and*/ + 0, /*nb_xor*/ + 0, /*nb_or*/ + #if PY_MAJOR_VERSION < 3 + 0, /*nb_coerce*/ + #endif + 0, /*nb_int*/ + #if PY_MAJOR_VERSION < 3 + 0, /*nb_long*/ + #else + 0, /*reserved*/ + #endif + 0, /*nb_float*/ + #if PY_MAJOR_VERSION < 3 + 0, /*nb_oct*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*nb_hex*/ + #endif + 0, /*nb_inplace_add*/ + 0, /*nb_inplace_subtract*/ + 0, /*nb_inplace_multiply*/ + #if PY_MAJOR_VERSION < 3 + 0, /*nb_inplace_divide*/ + #endif + 0, /*nb_inplace_remainder*/ + 0, /*nb_inplace_power*/ + 0, /*nb_inplace_lshift*/ + 0, /*nb_inplace_rshift*/ + 0, /*nb_inplace_and*/ + 0, /*nb_inplace_xor*/ + 0, /*nb_inplace_or*/ + 0, /*nb_floor_divide*/ + 0, /*nb_true_divide*/ + 0, /*nb_inplace_floor_divide*/ + 0, /*nb_inplace_true_divide*/ + #if PY_VERSION_HEX >= 0x02050000 + 0, /*nb_index*/ + #endif +}; + +static PySequenceMethods __pyx_tp_as_sequence_Geod = { + 0, /*sq_length*/ + 0, /*sq_concat*/ + 0, /*sq_repeat*/ + 0, /*sq_item*/ + 0, /*sq_slice*/ + 0, /*sq_ass_item*/ + 0, /*sq_ass_slice*/ + 0, /*sq_contains*/ + 0, /*sq_inplace_concat*/ + 0, /*sq_inplace_repeat*/ +}; + +static PyMappingMethods __pyx_tp_as_mapping_Geod = { + 0, /*mp_length*/ + 0, /*mp_subscript*/ + 0, /*mp_ass_subscript*/ +}; + +static PyBufferProcs __pyx_tp_as_buffer_Geod = { + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getreadbuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getwritebuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getsegcount*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getcharbuffer*/ + #endif + #if PY_VERSION_HEX >= 0x02060000 + 0, /*bf_getbuffer*/ + #endif + #if PY_VERSION_HEX >= 0x02060000 + 0, /*bf_releasebuffer*/ + #endif +}; + +static PyTypeObject __pyx_type_5_geod_Geod = { + PyVarObject_HEAD_INIT(0, 0) + __Pyx_NAMESTR("_geod.Geod"), /*tp_name*/ + sizeof(struct __pyx_obj_5_geod_Geod), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_5_geod_Geod, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #else + 0, /*reserved*/ + #endif + 0, /*tp_repr*/ + &__pyx_tp_as_number_Geod, /*tp_as_number*/ + &__pyx_tp_as_sequence_Geod, /*tp_as_sequence*/ + &__pyx_tp_as_mapping_Geod, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + &__pyx_tp_as_buffer_Geod, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_5_geod_Geod, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_5_geod_Geod, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + #if PY_VERSION_HEX >= 0x02060000 + 0, /*tp_version_tag*/ + #endif +}; + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; + +#if PY_MAJOR_VERSION >= 3 +static struct PyModuleDef __pyx_moduledef = { + PyModuleDef_HEAD_INIT, + __Pyx_NAMESTR("_geod"), + 0, /* m_doc */ + -1, /* m_size */ + __pyx_methods /* m_methods */, + NULL, /* m_reload */ + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ +}; +#endif + +static __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 0}, + {&__pyx_kp_s_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 0, 1, 0}, + {&__pyx_kp_s_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 0, 1, 0}, + {&__pyx_n_s__RuntimeError, __pyx_k__RuntimeError, sizeof(__pyx_k__RuntimeError), 0, 0, 1, 1}, + {&__pyx_n_s____class__, __pyx_k____class__, sizeof(__pyx_k____class__), 0, 0, 1, 1}, + {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1}, + {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1}, + {&__pyx_n_s___doublesize, __pyx_k___doublesize, sizeof(__pyx_k___doublesize), 0, 0, 1, 1}, + {&__pyx_n_s__a, __pyx_k__a, sizeof(__pyx_k__a), 0, 0, 1, 1}, + {&__pyx_n_s__az, __pyx_k__az, sizeof(__pyx_k__az), 0, 0, 1, 1}, + {&__pyx_n_s__degrees, __pyx_k__degrees, sizeof(__pyx_k__degrees), 0, 0, 1, 1}, + {&__pyx_n_s__dist, __pyx_k__dist, sizeof(__pyx_k__dist), 0, 0, 1, 1}, + {&__pyx_n_s__es, __pyx_k__es, sizeof(__pyx_k__es), 0, 0, 1, 1}, + {&__pyx_n_s__f, __pyx_k__f, sizeof(__pyx_k__f), 0, 0, 1, 1}, + {&__pyx_n_s__lat1, __pyx_k__lat1, sizeof(__pyx_k__lat1), 0, 0, 1, 1}, + {&__pyx_n_s__lat2, __pyx_k__lat2, sizeof(__pyx_k__lat2), 0, 0, 1, 1}, + {&__pyx_n_s__lats, __pyx_k__lats, sizeof(__pyx_k__lats), 0, 0, 1, 1}, + {&__pyx_n_s__lats1, __pyx_k__lats1, sizeof(__pyx_k__lats1), 0, 0, 1, 1}, + {&__pyx_n_s__lats2, __pyx_k__lats2, sizeof(__pyx_k__lats2), 0, 0, 1, 1}, + {&__pyx_n_s__lon1, __pyx_k__lon1, sizeof(__pyx_k__lon1), 0, 0, 1, 1}, + {&__pyx_n_s__lon2, __pyx_k__lon2, sizeof(__pyx_k__lon2), 0, 0, 1, 1}, + {&__pyx_n_s__lons, __pyx_k__lons, sizeof(__pyx_k__lons), 0, 0, 1, 1}, + {&__pyx_n_s__lons1, __pyx_k__lons1, sizeof(__pyx_k__lons1), 0, 0, 1, 1}, + {&__pyx_n_s__lons2, __pyx_k__lons2, sizeof(__pyx_k__lons2), 0, 0, 1, 1}, + {&__pyx_n_s__math, __pyx_k__math, sizeof(__pyx_k__math), 0, 0, 1, 1}, + {&__pyx_n_s__npts, __pyx_k__npts, sizeof(__pyx_k__npts), 0, 0, 1, 1}, + {&__pyx_n_s__radians, __pyx_k__radians, sizeof(__pyx_k__radians), 0, 0, 1, 1}, + {&__pyx_n_s__sphere, __pyx_k__sphere, sizeof(__pyx_k__sphere), 0, 0, 1, 1}, + {&__pyx_n_s__v, __pyx_k__v, sizeof(__pyx_k__v), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} +}; +static int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + return 0; + __pyx_L1_error:; + return -1; +} + +static int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants"); + + /* "_geod.pyx":75 + * # process data in buffer + * if not buflenlons == buflenlats == buflenaz == buflend: + * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< + * ndim = buflenlons//_doublesize + * lonsdata = londata + */ + __pyx_k_tuple_4 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_4)); + __Pyx_INCREF(((PyObject *)__pyx_kp_s_3)); + PyTuple_SET_ITEM(__pyx_k_tuple_4, 0, ((PyObject *)__pyx_kp_s_3)); + __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_3)); + __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_4)); + + /* "_geod.pyx":137 + * # process data in buffer + * if not buflenlons == buflenlats == buflenaz == buflend: + * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< + * ndim = buflenlons//_doublesize + * lonsdata = londata + */ + __pyx_k_tuple_6 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_6)); + __Pyx_INCREF(((PyObject *)__pyx_kp_s_3)); + PyTuple_SET_ITEM(__pyx_k_tuple_6, 0, ((PyObject *)__pyx_kp_s_3)); + __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_3)); + __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_6)); + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_InitGlobals(void) { + if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + return 0; + __pyx_L1_error:; + return -1; +} + +#if PY_MAJOR_VERSION < 3 +PyMODINIT_FUNC init_geod(void); /*proto*/ +PyMODINIT_FUNC init_geod(void) +#else +PyMODINIT_FUNC PyInit__geod(void); /*proto*/ +PyMODINIT_FUNC PyInit__geod(void) +#endif +{ + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + double __pyx_t_4; + __Pyx_RefNannyDeclarations + #if CYTHON_REFNANNY + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); + if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); + } + #endif + __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit__geod(void)"); + if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #ifdef __pyx_binding_PyCFunctionType_USED + if (__pyx_binding_PyCFunctionType_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + #ifdef WITH_THREAD /* Python build with threading support? */ + PyEval_InitThreads(); + #endif + #endif + /*--- Module creation code ---*/ + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4(__Pyx_NAMESTR("_geod"), __pyx_methods, 0, 0, PYTHON_API_VERSION); + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + #endif + if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + #if PY_MAJOR_VERSION < 3 + Py_INCREF(__pyx_m); + #endif + __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); + if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + /*--- Initialize various global constants etc. ---*/ + if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__pyx_module_is_main__geod) { + if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + } + /*--- Builtin init code ---*/ + if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + /*--- Constants init code ---*/ + if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + /*--- Global init code ---*/ + /*--- Variable export code ---*/ + /*--- Function export code ---*/ + /*--- Type init code ---*/ + if (PyType_Ready(&__pyx_type_5_geod_Geod) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__Pyx_SetAttrString(__pyx_m, "Geod", (PyObject *)&__pyx_type_5_geod_Geod) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_ptype_5_geod_Geod = &__pyx_type_5_geod_Geod; + /*--- Type import code ---*/ + /*--- Variable import code ---*/ + /*--- Function import code ---*/ + /*--- Execution code ---*/ + + /* "_geod.pyx":1 + * import math # <<<<<<<<<<<<<< + * + * cdef double _dg2rad, _rad2dg + */ + __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__math), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + if (PyObject_SetAttr(__pyx_m, __pyx_n_s__math, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_geod.pyx":5 + * cdef double _dg2rad, _rad2dg + * + * _dg2rad = math.radians(1.) # <<<<<<<<<<<<<< + * _rad2dg = math.degrees(1.) + * _doublesize = sizeof(double) + */ + __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__math); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__radians); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyFloat_FromDouble(1.); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; + __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_5_geod__dg2rad = __pyx_t_4; + + /* "_geod.pyx":6 + * + * _dg2rad = math.radians(1.) + * _rad2dg = math.degrees(1.) # <<<<<<<<<<<<<< + * _doublesize = sizeof(double) + * + */ + __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__math); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__degrees); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyFloat_FromDouble(1.); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_2)); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; + __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_5_geod__rad2dg = __pyx_t_4; + + /* "_geod.pyx":7 + * _dg2rad = math.radians(1.) + * _rad2dg = math.degrees(1.) + * _doublesize = sizeof(double) # <<<<<<<<<<<<<< + * + * cdef extern from "Python.h": + */ + __pyx_t_1 = __Pyx_PyInt_FromSize_t((sizeof(double))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + if (PyObject_SetAttr(__pyx_m, __pyx_n_s___doublesize, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_geod.pyx":59 + * return (self.__class__,(initstring,)) + * + * def _fwd(self, lons, lats, az, dist, radians=False): # <<<<<<<<<<<<<< + * cdef Py_ssize_t buflenlons, buflenlats, buflenaz, buflend, ndim, i + * cdef double *lonsdata, *latsdata, *azdata, *distdata + */ + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_k_2 = __pyx_t_1; + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "_geod.pyx":116 + * azdata[i] = _rad2dg*self.arc.az21 + * + * def _inv(self, object lons1, object lats1, object lons2, object lats2, radians=False): # <<<<<<<<<<<<<< + * """ + * inverse transformation - return forward and back azimuths, plus distance + */ + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_k_5 = __pyx_t_1; + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "_geod.pyx":175 + * azdata[i] = self.arc.S + * + * def _npts(self, double lon1, double lat1, double lon2, double lat2, int npts, radians=False): # <<<<<<<<<<<<<< + * """ + * given initial and terminus lat/lon, find npts intermediate points.""" + */ + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_k_8 = __pyx_t_1; + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "_geod.pyx":1 + * import math # <<<<<<<<<<<<<< + * + * cdef double _dg2rad, _rad2dg + */ + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); + if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + if (__pyx_m) { + __Pyx_AddTraceback("init _geod", __pyx_clineno, __pyx_lineno, __pyx_filename); + Py_DECREF(__pyx_m); __pyx_m = 0; + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init _geod"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if PY_MAJOR_VERSION < 3 + return; + #else + return __pyx_m; + #endif +} + +/* Runtime support code */ + +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule((char *)modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif /* CYTHON_REFNANNY */ + +static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) { + PyObject *result; + result = PyObject_GetAttr(dict, name); + if (!result) { + if (dict != __pyx_b) { + PyErr_Clear(); + result = PyObject_GetAttr(__pyx_b, name); + } + if (!result) { + PyErr_SetObject(PyExc_NameError, name); + } + } + return result; +} + +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%s() takes %s %"PY_FORMAT_SIZE_T"d positional argument%s (%"PY_FORMAT_SIZE_T"d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AS_STRING(kw_name)); + #endif +} + +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + + while (PyDict_Next(kwds, &pos, &key, &value)) { + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; + } else { + #if PY_MAJOR_VERSION < 3 + if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key))) { + #else + if (unlikely(!PyUnicode_CheckExact(key)) && unlikely(!PyUnicode_Check(key))) { + #endif + goto invalid_keyword_type; + } else { + for (name = first_kw_arg; *name; name++) { + #if PY_MAJOR_VERSION >= 3 + if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) && + PyUnicode_Compare(**name, key) == 0) break; + #else + if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) && + _PyString_Eq(**name, key)) break; + #endif + } + if (*name) { + values[name-argnames] = value; + } else { + /* unexpected keyword found */ + for (name=argnames; name != first_kw_arg; name++) { + if (**name == key) goto arg_passed_twice; + #if PY_MAJOR_VERSION >= 3 + if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) && + PyUnicode_Compare(**name, key) == 0) goto arg_passed_twice; + #else + if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) && + _PyString_Eq(**name, key)) goto arg_passed_twice; + #endif + } + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + } + } + } + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, **name); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION < 3 + "%s() got an unexpected keyword argument '%s'", + function_name, PyString_AsString(key)); + #else + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + return -1; +} + +static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyThreadState *tstate = PyThreadState_GET(); + + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +} + +static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { + PyThreadState *tstate = PyThreadState_GET(); + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +} + + +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + /* cause is unused */ + Py_XINCREF(type); + Py_XINCREF(value); + Py_XINCREF(tb); + /* First, check the traceback argument, replacing None with NULL. */ + if (tb == Py_None) { + Py_DECREF(tb); + tb = 0; + } + else if (tb != NULL && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + /* Next, replace a missing value with None */ + if (value == NULL) { + value = Py_None; + Py_INCREF(value); + } + #if PY_VERSION_HEX < 0x02050000 + if (!PyClass_Check(type)) + #else + if (!PyType_Check(type)) + #endif + { + /* Raising an instance. The value should be a dummy. */ + if (value != Py_None) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + /* Normalize to raise , */ + Py_DECREF(value); + value = type; + #if PY_VERSION_HEX < 0x02050000 + if (PyInstance_Check(type)) { + type = (PyObject*) ((PyInstanceObject*)type)->in_class; + Py_INCREF(type); + } + else { + type = 0; + PyErr_SetString(PyExc_TypeError, + "raise: exception must be an old-style class or instance"); + goto raise_error; + } + #else + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + #endif + } + + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} + +#else /* Python 3+ */ + +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (!PyExceptionClass_Check(type)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + + if (cause) { + PyObject *fixed_cause; + if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } + else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } + else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + if (!value) { + value = PyObject_CallObject(type, NULL); + } + PyException_SetCause(value, fixed_cause); + } + + PyErr_SetObject(type, value); + + if (tb) { + PyThreadState *tstate = PyThreadState_GET(); + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } + } + +bad: + return; +} +#endif + +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level) { + PyObject *py_import = 0; + PyObject *empty_list = 0; + PyObject *module = 0; + PyObject *global_dict = 0; + PyObject *empty_dict = 0; + PyObject *list; + py_import = __Pyx_GetAttrString(__pyx_b, "__import__"); + if (!py_import) + goto bad; + if (from_list) + list = from_list; + else { + empty_list = PyList_New(0); + if (!empty_list) + goto bad; + list = empty_list; + } + global_dict = PyModule_GetDict(__pyx_m); + if (!global_dict) + goto bad; + empty_dict = PyDict_New(); + if (!empty_dict) + goto bad; + #if PY_VERSION_HEX >= 0x02050000 + { + PyObject *py_level = PyInt_FromLong(level); + if (!py_level) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, global_dict, empty_dict, list, py_level, NULL); + Py_DECREF(py_level); + } + #else + if (level>0) { + PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); + goto bad; + } + module = PyObject_CallFunctionObjArgs(py_import, + name, global_dict, empty_dict, list, NULL); + #endif +bad: + Py_XDECREF(empty_list); + Py_XDECREF(py_import); + Py_XDECREF(empty_dict); + return module; +} + +static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) { + const unsigned char neg_one = (unsigned char)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(unsigned char) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(unsigned char)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to unsigned char" : + "value too large to convert to unsigned char"); + } + return (unsigned char)-1; + } + return (unsigned char)val; + } + return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x); +} + +static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) { + const unsigned short neg_one = (unsigned short)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(unsigned short) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(unsigned short)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to unsigned short" : + "value too large to convert to unsigned short"); + } + return (unsigned short)-1; + } + return (unsigned short)val; + } + return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x); +} + +static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) { + const unsigned int neg_one = (unsigned int)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(unsigned int) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(unsigned int)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to unsigned int" : + "value too large to convert to unsigned int"); + } + return (unsigned int)-1; + } + return (unsigned int)val; + } + return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x); +} + +static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) { + const char neg_one = (char)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(char) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(char)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to char" : + "value too large to convert to char"); + } + return (char)-1; + } + return (char)val; + } + return (char)__Pyx_PyInt_AsLong(x); +} + +static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) { + const short neg_one = (short)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(short) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(short)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to short" : + "value too large to convert to short"); + } + return (short)-1; + } + return (short)val; + } + return (short)__Pyx_PyInt_AsLong(x); +} + +static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) { + const int neg_one = (int)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(int) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(int)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to int" : + "value too large to convert to int"); + } + return (int)-1; + } + return (int)val; + } + return (int)__Pyx_PyInt_AsLong(x); +} + +static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) { + const signed char neg_one = (signed char)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(signed char) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(signed char)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to signed char" : + "value too large to convert to signed char"); + } + return (signed char)-1; + } + return (signed char)val; + } + return (signed char)__Pyx_PyInt_AsSignedLong(x); +} + +static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) { + const signed short neg_one = (signed short)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(signed short) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(signed short)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to signed short" : + "value too large to convert to signed short"); + } + return (signed short)-1; + } + return (signed short)val; + } + return (signed short)__Pyx_PyInt_AsSignedLong(x); +} + +static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) { + const signed int neg_one = (signed int)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(signed int) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(signed int)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to signed int" : + "value too large to convert to signed int"); + } + return (signed int)-1; + } + return (signed int)val; + } + return (signed int)__Pyx_PyInt_AsSignedLong(x); +} + +static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) { + const int neg_one = (int)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (sizeof(int) < sizeof(long)) { + long val = __Pyx_PyInt_AsLong(x); + if (unlikely(val != (long)(int)val)) { + if (!unlikely(val == -1 && PyErr_Occurred())) { + PyErr_SetString(PyExc_OverflowError, + (is_unsigned && unlikely(val < 0)) ? + "can't convert negative value to int" : + "value too large to convert to int"); + } + return (int)-1; + } + return (int)val; + } + return (int)__Pyx_PyInt_AsLong(x); +} + +static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) { + const unsigned long neg_one = (unsigned long)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; +#if PY_VERSION_HEX < 0x03000000 + if (likely(PyInt_Check(x))) { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to unsigned long"); + return (unsigned long)-1; + } + return (unsigned long)val; + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { + if (unlikely(Py_SIZE(x) < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to unsigned long"); + return (unsigned long)-1; + } + return (unsigned long)PyLong_AsUnsignedLong(x); + } else { + return (unsigned long)PyLong_AsLong(x); + } + } else { + unsigned long val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (unsigned long)-1; + val = __Pyx_PyInt_AsUnsignedLong(tmp); + Py_DECREF(tmp); + return val; + } +} + +static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) { + const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; +#if PY_VERSION_HEX < 0x03000000 + if (likely(PyInt_Check(x))) { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to unsigned PY_LONG_LONG"); + return (unsigned PY_LONG_LONG)-1; + } + return (unsigned PY_LONG_LONG)val; + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { + if (unlikely(Py_SIZE(x) < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to unsigned PY_LONG_LONG"); + return (unsigned PY_LONG_LONG)-1; + } + return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); + } else { + return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x); + } + } else { + unsigned PY_LONG_LONG val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (unsigned PY_LONG_LONG)-1; + val = __Pyx_PyInt_AsUnsignedLongLong(tmp); + Py_DECREF(tmp); + return val; + } +} + +static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) { + const long neg_one = (long)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; +#if PY_VERSION_HEX < 0x03000000 + if (likely(PyInt_Check(x))) { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long)-1; + } + return (long)val; + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { + if (unlikely(Py_SIZE(x) < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long)-1; + } + return (long)PyLong_AsUnsignedLong(x); + } else { + return (long)PyLong_AsLong(x); + } + } else { + long val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (long)-1; + val = __Pyx_PyInt_AsLong(tmp); + Py_DECREF(tmp); + return val; + } +} + +static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) { + const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; +#if PY_VERSION_HEX < 0x03000000 + if (likely(PyInt_Check(x))) { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to PY_LONG_LONG"); + return (PY_LONG_LONG)-1; + } + return (PY_LONG_LONG)val; + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { + if (unlikely(Py_SIZE(x) < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to PY_LONG_LONG"); + return (PY_LONG_LONG)-1; + } + return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); + } else { + return (PY_LONG_LONG)PyLong_AsLongLong(x); + } + } else { + PY_LONG_LONG val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (PY_LONG_LONG)-1; + val = __Pyx_PyInt_AsLongLong(tmp); + Py_DECREF(tmp); + return val; + } +} + +static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) { + const signed long neg_one = (signed long)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; +#if PY_VERSION_HEX < 0x03000000 + if (likely(PyInt_Check(x))) { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to signed long"); + return (signed long)-1; + } + return (signed long)val; + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { + if (unlikely(Py_SIZE(x) < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to signed long"); + return (signed long)-1; + } + return (signed long)PyLong_AsUnsignedLong(x); + } else { + return (signed long)PyLong_AsLong(x); + } + } else { + signed long val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (signed long)-1; + val = __Pyx_PyInt_AsSignedLong(tmp); + Py_DECREF(tmp); + return val; + } +} + +static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) { + const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; +#if PY_VERSION_HEX < 0x03000000 + if (likely(PyInt_Check(x))) { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to signed PY_LONG_LONG"); + return (signed PY_LONG_LONG)-1; + } + return (signed PY_LONG_LONG)val; + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { + if (unlikely(Py_SIZE(x) < 0)) { + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to signed PY_LONG_LONG"); + return (signed PY_LONG_LONG)-1; + } + return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); + } else { + return (signed PY_LONG_LONG)PyLong_AsLongLong(x); + } + } else { + signed PY_LONG_LONG val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (signed PY_LONG_LONG)-1; + val = __Pyx_PyInt_AsSignedLongLong(tmp); + Py_DECREF(tmp); + return val; + } +} + +static int __Pyx_check_binary_version(void) { + char ctversion[4], rtversion[4]; + PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); + PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); + if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compiletime version %s of module '%.100s' " + "does not match runtime version %s", + ctversion, __Pyx_MODULE_NAME, rtversion); + #if PY_VERSION_HEX < 0x02050000 + return PyErr_Warn(NULL, message); + #else + return PyErr_WarnEx(NULL, message, 1); + #endif + } + return 0; +} + +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" + +static void __Pyx_AddTraceback(const char *funcname, int __pyx_clineno, + int __pyx_lineno, const char *__pyx_filename) { + PyObject *py_srcfile = 0; + PyObject *py_funcname = 0; + PyObject *py_globals = 0; + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + + #if PY_MAJOR_VERSION < 3 + py_srcfile = PyString_FromString(__pyx_filename); + #else + py_srcfile = PyUnicode_FromString(__pyx_filename); + #endif + if (!py_srcfile) goto bad; + if (__pyx_clineno) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno); + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno); + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + #else + py_funcname = PyUnicode_FromString(funcname); + #endif + } + if (!py_funcname) goto bad; + py_globals = PyModule_GetDict(__pyx_m); + if (!py_globals) goto bad; + py_code = PyCode_New( + 0, /*int argcount,*/ + #if PY_MAJOR_VERSION >= 3 + 0, /*int kwonlyargcount,*/ + #endif + 0, /*int nlocals,*/ + 0, /*int stacksize,*/ + 0, /*int flags,*/ + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + __pyx_lineno, /*int firstlineno,*/ + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + if (!py_code) goto bad; + py_frame = PyFrame_New( + PyThreadState_GET(), /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + py_globals, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + py_frame->f_lineno = __pyx_lineno; + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_srcfile); + Py_XDECREF(py_funcname); + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} + +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION < 3 + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + #else /* Python 3+ has unicode identifiers */ + if (t->is_unicode | t->is_str) { + if (t->intern) { + *t->p = PyUnicode_InternFromString(t->s); + } else if (t->encoding) { + *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); + } else { + *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); + } + } else { + *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); + } + #endif + if (!*t->p) + return -1; + ++t; + } + return 0; +} + +/* Type Conversion Functions */ + +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} + +static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { + PyNumberMethods *m; + const char *name = NULL; + PyObject *res = NULL; +#if PY_VERSION_HEX < 0x03000000 + if (PyInt_Check(x) || PyLong_Check(x)) +#else + if (PyLong_Check(x)) +#endif + return Py_INCREF(x), x; + m = Py_TYPE(x)->tp_as_number; +#if PY_VERSION_HEX < 0x03000000 + if (m && m->nb_int) { + name = "int"; + res = PyNumber_Int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = PyNumber_Long(x); + } +#else + if (m && m->nb_int) { + name = "int"; + res = PyNumber_Long(x); + } +#endif + if (res) { +#if PY_VERSION_HEX < 0x03000000 + if (!PyInt_Check(res) && !PyLong_Check(res)) { +#else + if (!PyLong_Check(res)) { +#endif + PyErr_Format(PyExc_TypeError, + "__%s__ returned non-%s (type %.200s)", + name, name, Py_TYPE(res)->tp_name); + Py_DECREF(res); + return NULL; + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} + +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject* x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} + +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { +#if PY_VERSION_HEX < 0x02050000 + if (ival <= LONG_MAX) + return PyInt_FromLong((long)ival); + else { + unsigned char *bytes = (unsigned char *) &ival; + int one = 1; int little = (int)*(unsigned char*)&one; + return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); + } +#else + return PyInt_FromSize_t(ival); +#endif +} + +static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) { + unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x); + if (unlikely(val == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred())) { + return (size_t)-1; + } else if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) { + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to size_t"); + return (size_t)-1; + } + return (size_t)val; +} + + +#endif /* Py_PYTHON_H */ diff --git a/geodesic/_geod.pyx b/geodesic/_geod.pyx new file mode 100644 index 000000000..e703a2064 --- /dev/null +++ b/geodesic/_geod.pyx @@ -0,0 +1,218 @@ +import math + +cdef double _dg2rad, _rad2dg + +_dg2rad = math.radians(1.) +_rad2dg = math.degrees(1.) +_doublesize = sizeof(double) + +cdef extern from "Python.h": + int PyObject_AsWriteBuffer(object, void **rbuf, Py_ssize_t *len) + +cdef extern from "project.h": + # Earth's elliptical constants. + # Element a units, typically meters, defines the units for + # all other length elements. + ctypedef struct PROJ_ELLIPS: + double a # semi-major axis or sphere radius + double f # ellpsoid flattening, if == 0 then sphere + double es # eccentricity squared, if == 0 then sphere + double one_es # 1-es + # 3D Geographic coordinate + ctypedef struct PROJ_PT_LPH: + double lam # longitude in radians + double phi # latitude in radians + double h # height above the ellpsoid + # Geodesic line structure + # Azimuths in radians clockwise from North. Distance units the + # same as element a in structure ellps. + ctypedef struct PROJ_LINE: + PROJ_PT_LPH *pt1 # pointer to geographic coord of first location + double az12 # azimuth from pt1 to pt2 (forward) + PROJ_PT_LPH *pt2 # pointer to geographic coord of second location + double az21 # azimuth from pt2 to pt1 (back) + double S # geodetic distance between points + PROJ_ELLIPS *E # pointer to ellpsoid constants + void proj_sp_inv(PROJ_LINE * A) + void proj_sp_fwd(PROJ_LINE * A) + void proj_in_fwd(PROJ_LINE * A) + void proj_in_inv(PROJ_LINE * A) + +cdef class Geod: + cdef PROJ_LINE arc + cdef PROJ_ELLIPS ellps + cdef PROJ_PT_LPH pt1, pt2 + + def __cinit__(self, object a, object f, object es, object sphere): + self.sphere = sphere + self.ellps.a = a + self.ellps.f = f + self.ellps.es = es + self.ellps.one_es = 1.-es + self.arc.E = &self.ellps + + def __reduce__(self): + """special method that allows pyproj.Geod instance to be pickled""" + initstring = '+a=%s +f=%s +es=%s' % (self.a, self.f, self.es) + return (self.__class__,(initstring,)) + + def _fwd(self, lons, lats, az, dist, radians=False): + cdef Py_ssize_t buflenlons, buflenlats, buflenaz, buflend, ndim, i + cdef double *lonsdata, *latsdata, *azdata, *distdata + cdef void *londata, *latdata, *azdat, *distdat + cdef int err + # if buffer api is supported, get pointer to data buffers. + if PyObject_AsWriteBuffer(lons, &londata, &buflenlons) <> 0: + raise RuntimeError + if PyObject_AsWriteBuffer(lats, &latdata, &buflenlats) <> 0: + raise RuntimeError + if PyObject_AsWriteBuffer(az, &azdat, &buflenaz) <> 0: + raise RuntimeError + if PyObject_AsWriteBuffer(dist, &distdat, &buflend) <> 0: + raise RuntimeError + # process data in buffer + if not buflenlons == buflenlats == buflenaz == buflend: + raise RuntimeError("Buffer lengths not the same") + ndim = buflenlons//_doublesize + lonsdata = londata + latsdata = latdata + azdata = azdat + distdata = distdat + for i from 0 <= i < ndim: + if radians: + self.pt1.lam = lonsdata[i] + self.pt1.phi = latsdata[i] + self.pt1.h = 0. + self.arc.pt1 = &self.pt1 + self.arc.az12 = azdata[i] + self.arc.S = distdata[i] + else: + self.pt1.lam = _dg2rad*lonsdata[i] + self.pt1.phi = _dg2rad*latsdata[i] + self.pt1.h = 0. + self.arc.pt1 = &self.pt1 + self.arc.az12 = _dg2rad*azdata[i] + self.arc.S = distdata[i] +# Computes the location of the second point in the structure +# based on the first point's location and the distance and +# forward azumuth + if self.sphere: + proj_sp_fwd(&self.arc) + else: + proj_in_fwd(&self.arc) + if radians: + self.pt2.lam = self.arc.pt2.lam + self.pt2.phi = self.arc.pt2.phi + lonsdata[i] = self.pt2.lam + latsdata[i] = self.pt2.phi + azdata[i] = self.arc.az21 + else: + self.pt2.lam = _rad2dg*self.arc.pt2.lam + self.pt2.phi = _rad2dg*self.arc.pt2.phi + lonsdata[i] = self.pt2.lam + latsdata[i] = self.pt2.phi + azdata[i] = _rad2dg*self.arc.az21 + + def _inv(self, object lons1, object lats1, object lons2, object lats2, radians=False): + """ + inverse transformation - return forward and back azimuths, plus distance + between an initial and terminus lat/lon pair. + if radians=True, lons/lats are radians instead of degrees. + """ + cdef Py_ssize_t buflenlons, buflenlats, buflenaz, buflend, ndim, i + cdef double *lonsdata, *latsdata, *azdata, *distdata + cdef void *londata, *latdata, *azdat, *distdat + cdef int err + # if buffer api is supported, get pointer to data buffers. + if PyObject_AsWriteBuffer(lons1, &londata, &buflenlons) <> 0: + raise RuntimeError + if PyObject_AsWriteBuffer(lats1, &latdata, &buflenlats) <> 0: + raise RuntimeError + if PyObject_AsWriteBuffer(lons2, &azdat, &buflenaz) <> 0: + raise RuntimeError + if PyObject_AsWriteBuffer(lats2, &distdat, &buflend) <> 0: + raise RuntimeError + # process data in buffer + if not buflenlons == buflenlats == buflenaz == buflend: + raise RuntimeError("Buffer lengths not the same") + ndim = buflenlons//_doublesize + lonsdata = londata + latsdata = latdata + azdata = azdat + distdata = distdat + errmsg = 'undefined inverse geodesic (may be an antipodal point)' + for i from 0 <= i < ndim: + if radians: + self.pt1.lam = lonsdata[i] + self.pt1.phi = latsdata[i] + self.pt1.h = 0. + self.pt2.lam = azdata[i] + self.pt2.phi = distdata[i] + self.arc.pt1 = &self.pt1 + self.arc.pt2 = &self.pt2 + else: + self.pt1.lam = _dg2rad*lonsdata[i] + self.pt1.phi = _dg2rad*latsdata[i] + self.pt1.h = 0. + self.pt2.lam = _dg2rad*azdata[i] + self.pt2.phi = _dg2rad*distdata[i] + self.arc.pt1 = &self.pt1 + self.arc.pt2 = &self.pt2 +# Computes distance, forward and back azimuths in structure +# for the two end points of the geodesic line + if self.sphere: + proj_sp_inv(&self.arc) + else: + proj_in_inv(&self.arc) + if radians: + lonsdata[i] = self.arc.az12 + latsdata[i] = self.arc.az21 + else: + lonsdata[i] = _rad2dg*self.arc.az12 + latsdata[i] = _rad2dg*self.arc.az21 + azdata[i] = self.arc.S + + def _npts(self, double lon1, double lat1, double lon2, double lat2, int npts, radians=False): + """ + given initial and terminus lat/lon, find npts intermediate points.""" + cdef int i + cdef double del_s + if radians: + self.pt1.lam = lon1 + self.pt1.phi = lat1 + self.pt1.h = 0. + self.pt2.lam = lon2 + self.pt2.phi = lat2 + self.arc.pt1 = &self.pt1 + self.arc.pt2 = &self.pt2 + else: + self.pt1.lam = _dg2rad*lon1 + self.pt1.phi = _dg2rad*lat1 + self.pt1.h = 0. + self.pt2.lam = _dg2rad*lon2 + self.pt2.phi = _dg2rad*lat2 + self.arc.pt1 = &self.pt1 + self.arc.pt2 = &self.pt2 + if self.sphere: + proj_sp_inv(&self.arc) + else: + proj_in_inv(&self.arc) + # distance increment. + del_s = self.arc.S/(npts+1) + # initialize output tuples. + lats = () + lons = () + # loop over intermediate points, compute lat/lons. + for i from 1 <= i < npts+1: + self.arc.S = i*del_s + if self.sphere: + proj_sp_fwd(&self.arc) + else: + proj_in_fwd(&self.arc) + if radians: + lats = lats + (self.pt2.phi,) + lons = lons + (self.pt2.lam.v,) + else: + lats = lats + (_rad2dg*self.pt2.phi,) + lons = lons + (_rad2dg*self.pt2.lam,) + return lons, lats From 0556ae94fd8193e863540741ce6e21d8ff5b4567 Mon Sep 17 00:00:00 2001 From: Jeff Whitaker Date: Tue, 20 Dec 2011 10:10:22 -0700 Subject: [PATCH 09/14] move _geod.c --- setup.py | 4 +- src/_geod.c | 3897 ------------------------------------------------- src/_geod.pyx | 218 --- 3 files changed, 2 insertions(+), 4117 deletions(-) delete mode 100644 src/_geod.c delete mode 100644 src/_geod.pyx diff --git a/setup.py b/setup.py index 00af44d72..bc06844e2 100644 --- a/setup.py +++ b/setup.py @@ -61,14 +61,14 @@ def checkversion(GEOS_dir): # proj4 and geos extensions. deps = glob.glob('src/*.c') deps.remove(os.path.join('src','_proj.c')) -deps.remove(os.path.join('src','_geod.c')) deps.remove(os.path.join('src','_geoslib.c')) packages = ['mpl_toolkits','mpl_toolkits.basemap'] package_dirs = {'':'lib'} extensions = [Extension("mpl_toolkits.basemap._proj",deps+['src/_proj.c'],include_dirs = ['src'],)] deps = glob.glob('geodesic/*.c') -extensions.append(Extension("mpl_toolkits.basemap._geod",deps+['src/_geod.c'],\ +deps.remove(os.path.join('geodesic','_geod.c')) +extensions.append(Extension("mpl_toolkits.basemap._geod",deps+['geodesic/_geod.c'],\ include_dirs = ['geodesic'],)) # can't install _geoslib in mpl_toolkits.basemap namespace, # or Basemap objects won't be pickleable. diff --git a/src/_geod.c b/src/_geod.c deleted file mode 100644 index e4d8a4576..000000000 --- a/src/_geod.c +++ /dev/null @@ -1,3897 +0,0 @@ -/* Generated by Cython 0.15.1 on Tue Dec 20 08:28:53 2011 */ - -#define PY_SSIZE_T_CLEAN -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#else - -#include /* For offsetof */ -#ifndef offsetof -#define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif - -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif - -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif - -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif - -#if PY_VERSION_HEX < 0x02040000 - #define METH_COEXIST 0 - #define PyDict_CheckExact(op) (Py_TYPE(op) == &PyDict_Type) - #define PyDict_Contains(d,o) PySequence_Contains(d,o) -#endif - -#if PY_VERSION_HEX < 0x02050000 - typedef int Py_ssize_t; - #define PY_SSIZE_T_MAX INT_MAX - #define PY_SSIZE_T_MIN INT_MIN - #define PY_FORMAT_SIZE_T "" - #define PyInt_FromSsize_t(z) PyInt_FromLong(z) - #define PyInt_AsSsize_t(o) __Pyx_PyInt_AsInt(o) - #define PyNumber_Index(o) PyNumber_Int(o) - #define PyIndex_Check(o) PyNumber_Check(o) - #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) -#endif - -#if PY_VERSION_HEX < 0x02060000 - #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) - #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) - #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) - #define PyVarObject_HEAD_INIT(type, size) \ - PyObject_HEAD_INIT(type) size, - #define PyType_Modified(t) - - typedef struct { - void *buf; - PyObject *obj; - Py_ssize_t len; - Py_ssize_t itemsize; - int readonly; - int ndim; - char *format; - Py_ssize_t *shape; - Py_ssize_t *strides; - Py_ssize_t *suboffsets; - void *internal; - } Py_buffer; - - #define PyBUF_SIMPLE 0 - #define PyBUF_WRITABLE 0x0001 - #define PyBUF_FORMAT 0x0004 - #define PyBUF_ND 0x0008 - #define PyBUF_STRIDES (0x0010 | PyBUF_ND) - #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) - #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) - #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) - #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) - -#endif - -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" -#endif - -#if PY_MAJOR_VERSION >= 3 - #define Py_TPFLAGS_CHECKTYPES 0 - #define Py_TPFLAGS_HAVE_INDEX 0 -#endif - -#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif - -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact -#endif - -#if PY_VERSION_HEX < 0x02060000 - #define PyBytesObject PyStringObject - #define PyBytes_Type PyString_Type - #define PyBytes_Check PyString_Check - #define PyBytes_CheckExact PyString_CheckExact - #define PyBytes_FromString PyString_FromString - #define PyBytes_FromStringAndSize PyString_FromStringAndSize - #define PyBytes_FromFormat PyString_FromFormat - #define PyBytes_DecodeEscape PyString_DecodeEscape - #define PyBytes_AsString PyString_AsString - #define PyBytes_AsStringAndSize PyString_AsStringAndSize - #define PyBytes_Size PyString_Size - #define PyBytes_AS_STRING PyString_AS_STRING - #define PyBytes_GET_SIZE PyString_GET_SIZE - #define PyBytes_Repr PyString_Repr - #define PyBytes_Concat PyString_Concat - #define PyBytes_ConcatAndDel PyString_ConcatAndDel -#endif - -#if PY_VERSION_HEX < 0x02060000 - #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) - #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) -#endif - -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) - -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask -#endif - -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif - -#if PY_VERSION_HEX < 0x03020000 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif - - -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif - -#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) - #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) - #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) -#else - #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) - #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) -#endif - -#if PY_MAJOR_VERSION >= 3 - #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) -#endif - -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) -#else - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) -#endif - -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_NAMESTR(n) ((char *)(n)) - #define __Pyx_DOCSTR(n) ((char *)(n)) -#else - #define __Pyx_NAMESTR(n) (n) - #define __Pyx_DOCSTR(n) (n) -#endif - -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#if defined(WIN32) || defined(MS_WINDOWS) -#define _USE_MATH_DEFINES -#endif -#include -#define __PYX_HAVE___geod -#define __PYX_HAVE_API___geod -#include "project.h" -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#ifdef PYREX_WITHOUT_ASSERTIONS -#define CYTHON_WITHOUT_ASSERTIONS -#endif - - -/* inline attribute */ -#ifndef CYTHON_INLINE - #if defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif - -/* unused attribute */ -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || defined(__INTEL_COMPILER) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif - -typedef struct {PyObject **p; char *s; const long n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ - - -/* Type Conversion Predeclarations */ - -#define __Pyx_PyBytes_FromUString(s) PyBytes_FromString((char*)s) -#define __Pyx_PyBytes_AsUString(s) ((unsigned char*) PyBytes_AsString(s)) - -#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) -#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); - -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*); - -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) - - -#ifdef __GNUC__ - /* Test for GCC > 2.95 */ - #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #else /* __GNUC__ > 2 ... */ - #define likely(x) (x) - #define unlikely(x) (x) - #endif /* __GNUC__ > 2 ... */ -#else /* __GNUC__ */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ - -static PyObject *__pyx_m; -static PyObject *__pyx_b; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; -static const char *__pyx_filename; - - -static const char *__pyx_f[] = { - "_geod.pyx", -}; - -/*--- Type declarations ---*/ -struct __pyx_obj_5_geod_Geod; - -/* "_geod.pyx":41 - * void proj_in_inv(PROJ_LINE * A) - * - * cdef class Geod: # <<<<<<<<<<<<<< - * cdef PROJ_LINE arc - * cdef PROJ_ELLIPS ellps - */ -struct __pyx_obj_5_geod_Geod { - PyObject_HEAD - PROJ_LINE arc; - PROJ_ELLIPS ellps; - PROJ_PT_LPH pt1; - PROJ_PT_LPH pt2; -}; - - -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif - -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; - #define __Pyx_RefNannySetupContext(name) __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) - #define __Pyx_RefNannyFinishContext() __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name) - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif /* CYTHON_REFNANNY */ - -static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/ - -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ - -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, PyObject* kw_name); /*proto*/ - -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, const char* function_name); /*proto*/ - -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ - -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/ - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level); /*proto*/ - -static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *); - -static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *); - -static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *); - -static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *); - -static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *); - -static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *); - -static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *); - -static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *); - -static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *); - -static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *); - -static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *); - -static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *); - -static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *); - -static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *); - -static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *); - -static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *); - -static int __Pyx_check_binary_version(void); - -static void __Pyx_AddTraceback(const char *funcname, int __pyx_clineno, - int __pyx_lineno, const char *__pyx_filename); /*proto*/ - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ - -/* Module declarations from '_geod' */ -static PyTypeObject *__pyx_ptype_5_geod_Geod = 0; -static double __pyx_v_5_geod__dg2rad; -static double __pyx_v_5_geod__rad2dg; -#define __Pyx_MODULE_NAME "_geod" -int __pyx_module_is_main__geod = 0; - -/* Implementation of '_geod' */ -static PyObject *__pyx_builtin_RuntimeError; -static char __pyx_k_1[] = "+a=%s +f=%s +es=%s"; -static char __pyx_k_3[] = "Buffer lengths not the same"; -static char __pyx_k_7[] = "undefined inverse geodesic (may be an antipodal point)"; -static char __pyx_k__a[] = "a"; -static char __pyx_k__f[] = "f"; -static char __pyx_k__v[] = "v"; -static char __pyx_k__az[] = "az"; -static char __pyx_k__es[] = "es"; -static char __pyx_k__dist[] = "dist"; -static char __pyx_k__lat1[] = "lat1"; -static char __pyx_k__lat2[] = "lat2"; -static char __pyx_k__lats[] = "lats"; -static char __pyx_k__lon1[] = "lon1"; -static char __pyx_k__lon2[] = "lon2"; -static char __pyx_k__lons[] = "lons"; -static char __pyx_k__math[] = "math"; -static char __pyx_k__npts[] = "npts"; -static char __pyx_k__lats1[] = "lats1"; -static char __pyx_k__lats2[] = "lats2"; -static char __pyx_k__lons1[] = "lons1"; -static char __pyx_k__lons2[] = "lons2"; -static char __pyx_k__sphere[] = "sphere"; -static char __pyx_k__degrees[] = "degrees"; -static char __pyx_k__radians[] = "radians"; -static char __pyx_k____main__[] = "__main__"; -static char __pyx_k____test__[] = "__test__"; -static char __pyx_k____class__[] = "__class__"; -static char __pyx_k___doublesize[] = "_doublesize"; -static char __pyx_k__RuntimeError[] = "RuntimeError"; -static PyObject *__pyx_kp_s_1; -static PyObject *__pyx_kp_s_3; -static PyObject *__pyx_kp_s_7; -static PyObject *__pyx_n_s__RuntimeError; -static PyObject *__pyx_n_s____class__; -static PyObject *__pyx_n_s____main__; -static PyObject *__pyx_n_s____test__; -static PyObject *__pyx_n_s___doublesize; -static PyObject *__pyx_n_s__a; -static PyObject *__pyx_n_s__az; -static PyObject *__pyx_n_s__degrees; -static PyObject *__pyx_n_s__dist; -static PyObject *__pyx_n_s__es; -static PyObject *__pyx_n_s__f; -static PyObject *__pyx_n_s__lat1; -static PyObject *__pyx_n_s__lat2; -static PyObject *__pyx_n_s__lats; -static PyObject *__pyx_n_s__lats1; -static PyObject *__pyx_n_s__lats2; -static PyObject *__pyx_n_s__lon1; -static PyObject *__pyx_n_s__lon2; -static PyObject *__pyx_n_s__lons; -static PyObject *__pyx_n_s__lons1; -static PyObject *__pyx_n_s__lons2; -static PyObject *__pyx_n_s__math; -static PyObject *__pyx_n_s__npts; -static PyObject *__pyx_n_s__radians; -static PyObject *__pyx_n_s__sphere; -static PyObject *__pyx_n_s__v; -static PyObject *__pyx_k_2; -static PyObject *__pyx_k_5; -static PyObject *__pyx_k_8; -static PyObject *__pyx_k_tuple_4; -static PyObject *__pyx_k_tuple_6; - -/* "_geod.pyx":46 - * cdef PROJ_PT_LPH pt1, pt2 - * - * def __cinit__(self, object a, object f, object es, object sphere): # <<<<<<<<<<<<<< - * self.sphere = sphere - * self.ellps.a = a - */ - -static int __pyx_pf_5_geod_4Geod___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_pf_5_geod_4Geod___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_a = 0; - PyObject *__pyx_v_f = 0; - PyObject *__pyx_v_es = 0; - PyObject *__pyx_v_sphere = 0; - int __pyx_r; - __Pyx_RefNannyDeclarations - double __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__f,&__pyx_n_s__es,&__pyx_n_s__sphere,0}; - __Pyx_RefNannySetupContext("__cinit__"); - { - PyObject* values[4] = {0,0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 0: - values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a); - if (likely(values[0])) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__f); - if (likely(values[1])) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__es); - if (likely(values[2])) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 3: - values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__sphere); - if (likely(values[3])) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - } - __pyx_v_a = values[0]; - __pyx_v_f = values[1]; - __pyx_v_es = values[2]; - __pyx_v_sphere = values[3]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("_geod.Geod.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return -1; - __pyx_L4_argument_unpacking_done:; - - /* "_geod.pyx":47 - * - * def __cinit__(self, object a, object f, object es, object sphere): - * self.sphere = sphere # <<<<<<<<<<<<<< - * self.ellps.a = a - * self.ellps.f = f - */ - if (PyObject_SetAttr(__pyx_v_self, __pyx_n_s__sphere, __pyx_v_sphere) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "_geod.pyx":48 - * def __cinit__(self, object a, object f, object es, object sphere): - * self.sphere = sphere - * self.ellps.a = a # <<<<<<<<<<<<<< - * self.ellps.f = f - * self.ellps.es = es - */ - __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_a); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->ellps.a = __pyx_t_1; - - /* "_geod.pyx":49 - * self.sphere = sphere - * self.ellps.a = a - * self.ellps.f = f # <<<<<<<<<<<<<< - * self.ellps.es = es - * self.ellps.one_es = 1.-es - */ - __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_f); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->ellps.f = __pyx_t_1; - - /* "_geod.pyx":50 - * self.ellps.a = a - * self.ellps.f = f - * self.ellps.es = es # <<<<<<<<<<<<<< - * self.ellps.one_es = 1.-es - * self.arc.E = &self.ellps - */ - __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_es); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->ellps.es = __pyx_t_1; - - /* "_geod.pyx":51 - * self.ellps.f = f - * self.ellps.es = es - * self.ellps.one_es = 1.-es # <<<<<<<<<<<<<< - * self.arc.E = &self.ellps - * - */ - __pyx_t_2 = PyFloat_FromDouble(1.); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyNumber_Subtract(__pyx_t_2, __pyx_v_es); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->ellps.one_es = __pyx_t_1; - - /* "_geod.pyx":52 - * self.ellps.es = es - * self.ellps.one_es = 1.-es - * self.arc.E = &self.ellps # <<<<<<<<<<<<<< - * - * def __reduce__(self): - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.E = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->ellps); - - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("_geod.Geod.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "_geod.pyx":54 - * self.arc.E = &self.ellps - * - * def __reduce__(self): # <<<<<<<<<<<<<< - * """special method that allows pyproj.Geod instance to be pickled""" - * initstring = '+a=%s +f=%s +es=%s' % (self.a, self.f, self.es) - */ - -static PyObject *__pyx_pf_5_geod_4Geod_1__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static char __pyx_doc_5_geod_4Geod_1__reduce__[] = "special method that allows pyproj.Geod instance to be pickled"; -static PyObject *__pyx_pf_5_geod_4Geod_1__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_v_initstring = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce__"); - - /* "_geod.pyx":56 - * def __reduce__(self): - * """special method that allows pyproj.Geod instance to be pickled""" - * initstring = '+a=%s +f=%s +es=%s' % (self.a, self.f, self.es) # <<<<<<<<<<<<<< - * return (self.__class__,(initstring,)) - * - */ - __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__a); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__f); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__es); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_1), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_3)); - __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; - __pyx_v_initstring = ((PyObject *)__pyx_t_3); - __pyx_t_3 = 0; - - /* "_geod.pyx":57 - * """special method that allows pyproj.Geod instance to be pickled""" - * initstring = '+a=%s +f=%s +es=%s' % (self.a, self.f, self.es) - * return (self.__class__,(initstring,)) # <<<<<<<<<<<<<< - * - * def _fwd(self, lons, lats, az, dist, radians=False): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s____class__); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - __Pyx_INCREF(__pyx_v_initstring); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_initstring); - __Pyx_GIVEREF(__pyx_v_initstring); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_2)); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_t_4)); - __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); - __pyx_t_3 = 0; - __pyx_t_4 = 0; - __pyx_r = ((PyObject *)__pyx_t_2); - __pyx_t_2 = 0; - goto __pyx_L0; - - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("_geod.Geod.__reduce__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_initstring); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "_geod.pyx":59 - * return (self.__class__,(initstring,)) - * - * def _fwd(self, lons, lats, az, dist, radians=False): # <<<<<<<<<<<<<< - * cdef Py_ssize_t buflenlons, buflenlats, buflenaz, buflend, ndim, i - * cdef double *lonsdata, *latsdata, *azdata, *distdata - */ - -static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_lons = 0; - PyObject *__pyx_v_lats = 0; - PyObject *__pyx_v_az = 0; - PyObject *__pyx_v_dist = 0; - PyObject *__pyx_v_radians = 0; - Py_ssize_t __pyx_v_buflenlons; - Py_ssize_t __pyx_v_buflenlats; - Py_ssize_t __pyx_v_buflenaz; - Py_ssize_t __pyx_v_buflend; - Py_ssize_t __pyx_v_ndim; - Py_ssize_t __pyx_v_i; - double *__pyx_v_lonsdata; - double *__pyx_v_latsdata; - double *__pyx_v_azdata; - double *__pyx_v_distdata; - void *__pyx_v_londata; - void *__pyx_v_latdata; - void *__pyx_v_azdat; - void *__pyx_v_distdat; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - Py_ssize_t __pyx_t_6; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__lons,&__pyx_n_s__lats,&__pyx_n_s__az,&__pyx_n_s__dist,&__pyx_n_s__radians,0}; - __Pyx_RefNannySetupContext("_fwd"); - { - PyObject* values[5] = {0,0,0,0,0}; - values[4] = __pyx_k_2; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 0: - values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lons); - if (likely(values[0])) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lats); - if (likely(values[1])) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__az); - if (likely(values[2])) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 3: - values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dist); - if (likely(values[3])) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 4: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__radians); - if (value) { values[4] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_fwd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_lons = values[0]; - __pyx_v_lats = values[1]; - __pyx_v_az = values[2]; - __pyx_v_dist = values[3]; - __pyx_v_radians = values[4]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("_geod.Geod._fwd", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - - /* "_geod.pyx":65 - * cdef int err - * # if buffer api is supported, get pointer to data buffers. - * if PyObject_AsWriteBuffer(lons, &londata, &buflenlons) <> 0: # <<<<<<<<<<<<<< - * raise RuntimeError - * if PyObject_AsWriteBuffer(lats, &latdata, &buflenlats) <> 0: - */ - __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lons, (&__pyx_v_londata), (&__pyx_v_buflenlons)) != 0); - if (__pyx_t_1) { - - /* "_geod.pyx":66 - * # if buffer api is supported, get pointer to data buffers. - * if PyObject_AsWriteBuffer(lons, &londata, &buflenlons) <> 0: - * raise RuntimeError # <<<<<<<<<<<<<< - * if PyObject_AsWriteBuffer(lats, &latdata, &buflenlats) <> 0: - * raise RuntimeError - */ - __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L6; - } - __pyx_L6:; - - /* "_geod.pyx":67 - * if PyObject_AsWriteBuffer(lons, &londata, &buflenlons) <> 0: - * raise RuntimeError - * if PyObject_AsWriteBuffer(lats, &latdata, &buflenlats) <> 0: # <<<<<<<<<<<<<< - * raise RuntimeError - * if PyObject_AsWriteBuffer(az, &azdat, &buflenaz) <> 0: - */ - __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lats, (&__pyx_v_latdata), (&__pyx_v_buflenlats)) != 0); - if (__pyx_t_1) { - - /* "_geod.pyx":68 - * raise RuntimeError - * if PyObject_AsWriteBuffer(lats, &latdata, &buflenlats) <> 0: - * raise RuntimeError # <<<<<<<<<<<<<< - * if PyObject_AsWriteBuffer(az, &azdat, &buflenaz) <> 0: - * raise RuntimeError - */ - __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L7; - } - __pyx_L7:; - - /* "_geod.pyx":69 - * if PyObject_AsWriteBuffer(lats, &latdata, &buflenlats) <> 0: - * raise RuntimeError - * if PyObject_AsWriteBuffer(az, &azdat, &buflenaz) <> 0: # <<<<<<<<<<<<<< - * raise RuntimeError - * if PyObject_AsWriteBuffer(dist, &distdat, &buflend) <> 0: - */ - __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_az, (&__pyx_v_azdat), (&__pyx_v_buflenaz)) != 0); - if (__pyx_t_1) { - - /* "_geod.pyx":70 - * raise RuntimeError - * if PyObject_AsWriteBuffer(az, &azdat, &buflenaz) <> 0: - * raise RuntimeError # <<<<<<<<<<<<<< - * if PyObject_AsWriteBuffer(dist, &distdat, &buflend) <> 0: - * raise RuntimeError - */ - __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L8; - } - __pyx_L8:; - - /* "_geod.pyx":71 - * if PyObject_AsWriteBuffer(az, &azdat, &buflenaz) <> 0: - * raise RuntimeError - * if PyObject_AsWriteBuffer(dist, &distdat, &buflend) <> 0: # <<<<<<<<<<<<<< - * raise RuntimeError - * # process data in buffer - */ - __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_dist, (&__pyx_v_distdat), (&__pyx_v_buflend)) != 0); - if (__pyx_t_1) { - - /* "_geod.pyx":72 - * raise RuntimeError - * if PyObject_AsWriteBuffer(dist, &distdat, &buflend) <> 0: - * raise RuntimeError # <<<<<<<<<<<<<< - * # process data in buffer - * if not buflenlons == buflenlats == buflenaz == buflend: - */ - __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L9; - } - __pyx_L9:; - - /* "_geod.pyx":74 - * raise RuntimeError - * # process data in buffer - * if not buflenlons == buflenlats == buflenaz == buflend: # <<<<<<<<<<<<<< - * raise RuntimeError("Buffer lengths not the same") - * ndim = buflenlons//_doublesize - */ - __pyx_t_1 = (__pyx_v_buflenlons == __pyx_v_buflenlats); - if (__pyx_t_1) { - __pyx_t_1 = (__pyx_v_buflenlats == __pyx_v_buflenaz); - if (__pyx_t_1) { - __pyx_t_1 = (__pyx_v_buflenaz == __pyx_v_buflend); - } - } - __pyx_t_2 = (!__pyx_t_1); - if (__pyx_t_2) { - - /* "_geod.pyx":75 - * # process data in buffer - * if not buflenlons == buflenlats == buflenaz == buflend: - * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< - * ndim = buflenlons//_doublesize - * lonsdata = londata - */ - __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L10; - } - __pyx_L10:; - - /* "_geod.pyx":76 - * if not buflenlons == buflenlats == buflenaz == buflend: - * raise RuntimeError("Buffer lengths not the same") - * ndim = buflenlons//_doublesize # <<<<<<<<<<<<<< - * lonsdata = londata - * latsdata = latdata - */ - __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_buflenlons); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyNumber_FloorDivide(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_ndim = __pyx_t_6; - - /* "_geod.pyx":77 - * raise RuntimeError("Buffer lengths not the same") - * ndim = buflenlons//_doublesize - * lonsdata = londata # <<<<<<<<<<<<<< - * latsdata = latdata - * azdata = azdat - */ - __pyx_v_lonsdata = ((double *)__pyx_v_londata); - - /* "_geod.pyx":78 - * ndim = buflenlons//_doublesize - * lonsdata = londata - * latsdata = latdata # <<<<<<<<<<<<<< - * azdata = azdat - * distdata = distdat - */ - __pyx_v_latsdata = ((double *)__pyx_v_latdata); - - /* "_geod.pyx":79 - * lonsdata = londata - * latsdata = latdata - * azdata = azdat # <<<<<<<<<<<<<< - * distdata = distdat - * for i from 0 <= i < ndim: - */ - __pyx_v_azdata = ((double *)__pyx_v_azdat); - - /* "_geod.pyx":80 - * latsdata = latdata - * azdata = azdat - * distdata = distdat # <<<<<<<<<<<<<< - * for i from 0 <= i < ndim: - * if radians: - */ - __pyx_v_distdata = ((double *)__pyx_v_distdat); - - /* "_geod.pyx":81 - * azdata = azdat - * distdata = distdat - * for i from 0 <= i < ndim: # <<<<<<<<<<<<<< - * if radians: - * self.pt1.lam = lonsdata[i] - */ - __pyx_t_6 = __pyx_v_ndim; - for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) { - - /* "_geod.pyx":82 - * distdata = distdat - * for i from 0 <= i < ndim: - * if radians: # <<<<<<<<<<<<<< - * self.pt1.lam = lonsdata[i] - * self.pt1.phi = latsdata[i] - */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_2) { - - /* "_geod.pyx":83 - * for i from 0 <= i < ndim: - * if radians: - * self.pt1.lam = lonsdata[i] # <<<<<<<<<<<<<< - * self.pt1.phi = latsdata[i] - * self.pt1.h = 0. - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.lam = (__pyx_v_lonsdata[__pyx_v_i]); - - /* "_geod.pyx":84 - * if radians: - * self.pt1.lam = lonsdata[i] - * self.pt1.phi = latsdata[i] # <<<<<<<<<<<<<< - * self.pt1.h = 0. - * self.arc.pt1 = &self.pt1 - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.phi = (__pyx_v_latsdata[__pyx_v_i]); - - /* "_geod.pyx":85 - * self.pt1.lam = lonsdata[i] - * self.pt1.phi = latsdata[i] - * self.pt1.h = 0. # <<<<<<<<<<<<<< - * self.arc.pt1 = &self.pt1 - * self.arc.az12 = azdata[i] - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.h = 0.; - - /* "_geod.pyx":86 - * self.pt1.phi = latsdata[i] - * self.pt1.h = 0. - * self.arc.pt1 = &self.pt1 # <<<<<<<<<<<<<< - * self.arc.az12 = azdata[i] - * self.arc.S = distdata[i] - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt1 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1); - - /* "_geod.pyx":87 - * self.pt1.h = 0. - * self.arc.pt1 = &self.pt1 - * self.arc.az12 = azdata[i] # <<<<<<<<<<<<<< - * self.arc.S = distdata[i] - * else: - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az12 = (__pyx_v_azdata[__pyx_v_i]); - - /* "_geod.pyx":88 - * self.arc.pt1 = &self.pt1 - * self.arc.az12 = azdata[i] - * self.arc.S = distdata[i] # <<<<<<<<<<<<<< - * else: - * self.pt1.lam = _dg2rad*lonsdata[i] - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.S = (__pyx_v_distdata[__pyx_v_i]); - goto __pyx_L13; - } - /*else*/ { - - /* "_geod.pyx":90 - * self.arc.S = distdata[i] - * else: - * self.pt1.lam = _dg2rad*lonsdata[i] # <<<<<<<<<<<<<< - * self.pt1.phi = _dg2rad*latsdata[i] - * self.pt1.h = 0. - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.lam = (__pyx_v_5_geod__dg2rad * (__pyx_v_lonsdata[__pyx_v_i])); - - /* "_geod.pyx":91 - * else: - * self.pt1.lam = _dg2rad*lonsdata[i] - * self.pt1.phi = _dg2rad*latsdata[i] # <<<<<<<<<<<<<< - * self.pt1.h = 0. - * self.arc.pt1 = &self.pt1 - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.phi = (__pyx_v_5_geod__dg2rad * (__pyx_v_latsdata[__pyx_v_i])); - - /* "_geod.pyx":92 - * self.pt1.lam = _dg2rad*lonsdata[i] - * self.pt1.phi = _dg2rad*latsdata[i] - * self.pt1.h = 0. # <<<<<<<<<<<<<< - * self.arc.pt1 = &self.pt1 - * self.arc.az12 = _dg2rad*azdata[i] - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.h = 0.; - - /* "_geod.pyx":93 - * self.pt1.phi = _dg2rad*latsdata[i] - * self.pt1.h = 0. - * self.arc.pt1 = &self.pt1 # <<<<<<<<<<<<<< - * self.arc.az12 = _dg2rad*azdata[i] - * self.arc.S = distdata[i] - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt1 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1); - - /* "_geod.pyx":94 - * self.pt1.h = 0. - * self.arc.pt1 = &self.pt1 - * self.arc.az12 = _dg2rad*azdata[i] # <<<<<<<<<<<<<< - * self.arc.S = distdata[i] - * # Computes the location of the second point in the structure - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az12 = (__pyx_v_5_geod__dg2rad * (__pyx_v_azdata[__pyx_v_i])); - - /* "_geod.pyx":95 - * self.arc.pt1 = &self.pt1 - * self.arc.az12 = _dg2rad*azdata[i] - * self.arc.S = distdata[i] # <<<<<<<<<<<<<< - * # Computes the location of the second point in the structure - * # based on the first point's location and the distance and - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.S = (__pyx_v_distdata[__pyx_v_i]); - } - __pyx_L13:; - - /* "_geod.pyx":99 - * # based on the first point's location and the distance and - * # forward azumuth - * if self.sphere: # <<<<<<<<<<<<<< - * proj_sp_fwd(&self.arc) - * else: - */ - __pyx_t_5 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__sphere); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_2) { - - /* "_geod.pyx":100 - * # forward azumuth - * if self.sphere: - * proj_sp_fwd(&self.arc) # <<<<<<<<<<<<<< - * else: - * proj_in_fwd(&self.arc) - */ - proj_sp_fwd((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); - goto __pyx_L14; - } - /*else*/ { - - /* "_geod.pyx":102 - * proj_sp_fwd(&self.arc) - * else: - * proj_in_fwd(&self.arc) # <<<<<<<<<<<<<< - * if radians: - * self.pt2.lam = self.arc.pt2.lam - */ - proj_in_fwd((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); - } - __pyx_L14:; - - /* "_geod.pyx":103 - * else: - * proj_in_fwd(&self.arc) - * if radians: # <<<<<<<<<<<<<< - * self.pt2.lam = self.arc.pt2.lam - * self.pt2.phi = self.arc.pt2.phi - */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_2) { - - /* "_geod.pyx":104 - * proj_in_fwd(&self.arc) - * if radians: - * self.pt2.lam = self.arc.pt2.lam # <<<<<<<<<<<<<< - * self.pt2.phi = self.arc.pt2.phi - * lonsdata[i] = self.pt2.lam - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2->lam; - - /* "_geod.pyx":105 - * if radians: - * self.pt2.lam = self.arc.pt2.lam - * self.pt2.phi = self.arc.pt2.phi # <<<<<<<<<<<<<< - * lonsdata[i] = self.pt2.lam - * latsdata[i] = self.pt2.phi - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2->phi; - - /* "_geod.pyx":106 - * self.pt2.lam = self.arc.pt2.lam - * self.pt2.phi = self.arc.pt2.phi - * lonsdata[i] = self.pt2.lam # <<<<<<<<<<<<<< - * latsdata[i] = self.pt2.phi - * azdata[i] = self.arc.az21 - */ - (__pyx_v_lonsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam; - - /* "_geod.pyx":107 - * self.pt2.phi = self.arc.pt2.phi - * lonsdata[i] = self.pt2.lam - * latsdata[i] = self.pt2.phi # <<<<<<<<<<<<<< - * azdata[i] = self.arc.az21 - * else: - */ - (__pyx_v_latsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi; - - /* "_geod.pyx":108 - * lonsdata[i] = self.pt2.lam - * latsdata[i] = self.pt2.phi - * azdata[i] = self.arc.az21 # <<<<<<<<<<<<<< - * else: - * self.pt2.lam = _rad2dg*self.arc.pt2.lam - */ - (__pyx_v_azdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az21; - goto __pyx_L15; - } - /*else*/ { - - /* "_geod.pyx":110 - * azdata[i] = self.arc.az21 - * else: - * self.pt2.lam = _rad2dg*self.arc.pt2.lam # <<<<<<<<<<<<<< - * self.pt2.phi = _rad2dg*self.arc.pt2.phi - * lonsdata[i] = self.pt2.lam - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam = (__pyx_v_5_geod__rad2dg * ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2->lam); - - /* "_geod.pyx":111 - * else: - * self.pt2.lam = _rad2dg*self.arc.pt2.lam - * self.pt2.phi = _rad2dg*self.arc.pt2.phi # <<<<<<<<<<<<<< - * lonsdata[i] = self.pt2.lam - * latsdata[i] = self.pt2.phi - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi = (__pyx_v_5_geod__rad2dg * ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2->phi); - - /* "_geod.pyx":112 - * self.pt2.lam = _rad2dg*self.arc.pt2.lam - * self.pt2.phi = _rad2dg*self.arc.pt2.phi - * lonsdata[i] = self.pt2.lam # <<<<<<<<<<<<<< - * latsdata[i] = self.pt2.phi - * azdata[i] = _rad2dg*self.arc.az21 - */ - (__pyx_v_lonsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam; - - /* "_geod.pyx":113 - * self.pt2.phi = _rad2dg*self.arc.pt2.phi - * lonsdata[i] = self.pt2.lam - * latsdata[i] = self.pt2.phi # <<<<<<<<<<<<<< - * azdata[i] = _rad2dg*self.arc.az21 - * - */ - (__pyx_v_latsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi; - - /* "_geod.pyx":114 - * lonsdata[i] = self.pt2.lam - * latsdata[i] = self.pt2.phi - * azdata[i] = _rad2dg*self.arc.az21 # <<<<<<<<<<<<<< - * - * def _inv(self, object lons1, object lats1, object lons2, object lats2, radians=False): - */ - (__pyx_v_azdata[__pyx_v_i]) = (__pyx_v_5_geod__rad2dg * ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az21); - } - __pyx_L15:; - } - - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("_geod.Geod._fwd", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "_geod.pyx":116 - * azdata[i] = _rad2dg*self.arc.az21 - * - * def _inv(self, object lons1, object lats1, object lons2, object lats2, radians=False): # <<<<<<<<<<<<<< - * """ - * inverse transformation - return forward and back azimuths, plus distance - */ - -static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_5_geod_4Geod_3_inv[] = "\n inverse transformation - return forward and back azimuths, plus distance\n between an initial and terminus lat/lon pair.\n if radians=True, lons/lats are radians instead of degrees.\n "; -static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_lons1 = 0; - PyObject *__pyx_v_lats1 = 0; - PyObject *__pyx_v_lons2 = 0; - PyObject *__pyx_v_lats2 = 0; - PyObject *__pyx_v_radians = 0; - Py_ssize_t __pyx_v_buflenlons; - Py_ssize_t __pyx_v_buflenlats; - Py_ssize_t __pyx_v_buflenaz; - Py_ssize_t __pyx_v_buflend; - Py_ssize_t __pyx_v_ndim; - Py_ssize_t __pyx_v_i; - double *__pyx_v_lonsdata; - double *__pyx_v_latsdata; - double *__pyx_v_azdata; - double *__pyx_v_distdata; - void *__pyx_v_londata; - void *__pyx_v_latdata; - void *__pyx_v_azdat; - void *__pyx_v_distdat; - PyObject *__pyx_v_errmsg = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - Py_ssize_t __pyx_t_6; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__lons1,&__pyx_n_s__lats1,&__pyx_n_s__lons2,&__pyx_n_s__lats2,&__pyx_n_s__radians,0}; - __Pyx_RefNannySetupContext("_inv"); - { - PyObject* values[5] = {0,0,0,0,0}; - values[4] = __pyx_k_5; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 0: - values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lons1); - if (likely(values[0])) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lats1); - if (likely(values[1])) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lons2); - if (likely(values[2])) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 3: - values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lats2); - if (likely(values[3])) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 4: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__radians); - if (value) { values[4] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_inv") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_lons1 = values[0]; - __pyx_v_lats1 = values[1]; - __pyx_v_lons2 = values[2]; - __pyx_v_lats2 = values[3]; - __pyx_v_radians = values[4]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("_geod.Geod._inv", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - - /* "_geod.pyx":127 - * cdef int err - * # if buffer api is supported, get pointer to data buffers. - * if PyObject_AsWriteBuffer(lons1, &londata, &buflenlons) <> 0: # <<<<<<<<<<<<<< - * raise RuntimeError - * if PyObject_AsWriteBuffer(lats1, &latdata, &buflenlats) <> 0: - */ - __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lons1, (&__pyx_v_londata), (&__pyx_v_buflenlons)) != 0); - if (__pyx_t_1) { - - /* "_geod.pyx":128 - * # if buffer api is supported, get pointer to data buffers. - * if PyObject_AsWriteBuffer(lons1, &londata, &buflenlons) <> 0: - * raise RuntimeError # <<<<<<<<<<<<<< - * if PyObject_AsWriteBuffer(lats1, &latdata, &buflenlats) <> 0: - * raise RuntimeError - */ - __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L6; - } - __pyx_L6:; - - /* "_geod.pyx":129 - * if PyObject_AsWriteBuffer(lons1, &londata, &buflenlons) <> 0: - * raise RuntimeError - * if PyObject_AsWriteBuffer(lats1, &latdata, &buflenlats) <> 0: # <<<<<<<<<<<<<< - * raise RuntimeError - * if PyObject_AsWriteBuffer(lons2, &azdat, &buflenaz) <> 0: - */ - __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lats1, (&__pyx_v_latdata), (&__pyx_v_buflenlats)) != 0); - if (__pyx_t_1) { - - /* "_geod.pyx":130 - * raise RuntimeError - * if PyObject_AsWriteBuffer(lats1, &latdata, &buflenlats) <> 0: - * raise RuntimeError # <<<<<<<<<<<<<< - * if PyObject_AsWriteBuffer(lons2, &azdat, &buflenaz) <> 0: - * raise RuntimeError - */ - __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L7; - } - __pyx_L7:; - - /* "_geod.pyx":131 - * if PyObject_AsWriteBuffer(lats1, &latdata, &buflenlats) <> 0: - * raise RuntimeError - * if PyObject_AsWriteBuffer(lons2, &azdat, &buflenaz) <> 0: # <<<<<<<<<<<<<< - * raise RuntimeError - * if PyObject_AsWriteBuffer(lats2, &distdat, &buflend) <> 0: - */ - __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lons2, (&__pyx_v_azdat), (&__pyx_v_buflenaz)) != 0); - if (__pyx_t_1) { - - /* "_geod.pyx":132 - * raise RuntimeError - * if PyObject_AsWriteBuffer(lons2, &azdat, &buflenaz) <> 0: - * raise RuntimeError # <<<<<<<<<<<<<< - * if PyObject_AsWriteBuffer(lats2, &distdat, &buflend) <> 0: - * raise RuntimeError - */ - __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L8; - } - __pyx_L8:; - - /* "_geod.pyx":133 - * if PyObject_AsWriteBuffer(lons2, &azdat, &buflenaz) <> 0: - * raise RuntimeError - * if PyObject_AsWriteBuffer(lats2, &distdat, &buflend) <> 0: # <<<<<<<<<<<<<< - * raise RuntimeError - * # process data in buffer - */ - __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lats2, (&__pyx_v_distdat), (&__pyx_v_buflend)) != 0); - if (__pyx_t_1) { - - /* "_geod.pyx":134 - * raise RuntimeError - * if PyObject_AsWriteBuffer(lats2, &distdat, &buflend) <> 0: - * raise RuntimeError # <<<<<<<<<<<<<< - * # process data in buffer - * if not buflenlons == buflenlats == buflenaz == buflend: - */ - __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L9; - } - __pyx_L9:; - - /* "_geod.pyx":136 - * raise RuntimeError - * # process data in buffer - * if not buflenlons == buflenlats == buflenaz == buflend: # <<<<<<<<<<<<<< - * raise RuntimeError("Buffer lengths not the same") - * ndim = buflenlons//_doublesize - */ - __pyx_t_1 = (__pyx_v_buflenlons == __pyx_v_buflenlats); - if (__pyx_t_1) { - __pyx_t_1 = (__pyx_v_buflenlats == __pyx_v_buflenaz); - if (__pyx_t_1) { - __pyx_t_1 = (__pyx_v_buflenaz == __pyx_v_buflend); - } - } - __pyx_t_2 = (!__pyx_t_1); - if (__pyx_t_2) { - - /* "_geod.pyx":137 - * # process data in buffer - * if not buflenlons == buflenlats == buflenaz == buflend: - * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< - * ndim = buflenlons//_doublesize - * lonsdata = londata - */ - __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_6), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L10; - } - __pyx_L10:; - - /* "_geod.pyx":138 - * if not buflenlons == buflenlats == buflenaz == buflend: - * raise RuntimeError("Buffer lengths not the same") - * ndim = buflenlons//_doublesize # <<<<<<<<<<<<<< - * lonsdata = londata - * latsdata = latdata - */ - __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_buflenlons); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyNumber_FloorDivide(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_ndim = __pyx_t_6; - - /* "_geod.pyx":139 - * raise RuntimeError("Buffer lengths not the same") - * ndim = buflenlons//_doublesize - * lonsdata = londata # <<<<<<<<<<<<<< - * latsdata = latdata - * azdata = azdat - */ - __pyx_v_lonsdata = ((double *)__pyx_v_londata); - - /* "_geod.pyx":140 - * ndim = buflenlons//_doublesize - * lonsdata = londata - * latsdata = latdata # <<<<<<<<<<<<<< - * azdata = azdat - * distdata = distdat - */ - __pyx_v_latsdata = ((double *)__pyx_v_latdata); - - /* "_geod.pyx":141 - * lonsdata = londata - * latsdata = latdata - * azdata = azdat # <<<<<<<<<<<<<< - * distdata = distdat - * errmsg = 'undefined inverse geodesic (may be an antipodal point)' - */ - __pyx_v_azdata = ((double *)__pyx_v_azdat); - - /* "_geod.pyx":142 - * latsdata = latdata - * azdata = azdat - * distdata = distdat # <<<<<<<<<<<<<< - * errmsg = 'undefined inverse geodesic (may be an antipodal point)' - * for i from 0 <= i < ndim: - */ - __pyx_v_distdata = ((double *)__pyx_v_distdat); - - /* "_geod.pyx":143 - * azdata = azdat - * distdata = distdat - * errmsg = 'undefined inverse geodesic (may be an antipodal point)' # <<<<<<<<<<<<<< - * for i from 0 <= i < ndim: - * if radians: - */ - __Pyx_INCREF(((PyObject *)__pyx_kp_s_7)); - __pyx_v_errmsg = ((PyObject *)__pyx_kp_s_7); - - /* "_geod.pyx":144 - * distdata = distdat - * errmsg = 'undefined inverse geodesic (may be an antipodal point)' - * for i from 0 <= i < ndim: # <<<<<<<<<<<<<< - * if radians: - * self.pt1.lam = lonsdata[i] - */ - __pyx_t_6 = __pyx_v_ndim; - for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) { - - /* "_geod.pyx":145 - * errmsg = 'undefined inverse geodesic (may be an antipodal point)' - * for i from 0 <= i < ndim: - * if radians: # <<<<<<<<<<<<<< - * self.pt1.lam = lonsdata[i] - * self.pt1.phi = latsdata[i] - */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_2) { - - /* "_geod.pyx":146 - * for i from 0 <= i < ndim: - * if radians: - * self.pt1.lam = lonsdata[i] # <<<<<<<<<<<<<< - * self.pt1.phi = latsdata[i] - * self.pt1.h = 0. - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.lam = (__pyx_v_lonsdata[__pyx_v_i]); - - /* "_geod.pyx":147 - * if radians: - * self.pt1.lam = lonsdata[i] - * self.pt1.phi = latsdata[i] # <<<<<<<<<<<<<< - * self.pt1.h = 0. - * self.pt2.lam = azdata[i] - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.phi = (__pyx_v_latsdata[__pyx_v_i]); - - /* "_geod.pyx":148 - * self.pt1.lam = lonsdata[i] - * self.pt1.phi = latsdata[i] - * self.pt1.h = 0. # <<<<<<<<<<<<<< - * self.pt2.lam = azdata[i] - * self.pt2.phi = distdata[i] - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.h = 0.; - - /* "_geod.pyx":149 - * self.pt1.phi = latsdata[i] - * self.pt1.h = 0. - * self.pt2.lam = azdata[i] # <<<<<<<<<<<<<< - * self.pt2.phi = distdata[i] - * self.arc.pt1 = &self.pt1 - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam = (__pyx_v_azdata[__pyx_v_i]); - - /* "_geod.pyx":150 - * self.pt1.h = 0. - * self.pt2.lam = azdata[i] - * self.pt2.phi = distdata[i] # <<<<<<<<<<<<<< - * self.arc.pt1 = &self.pt1 - * self.arc.pt2 = &self.pt2 - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi = (__pyx_v_distdata[__pyx_v_i]); - - /* "_geod.pyx":151 - * self.pt2.lam = azdata[i] - * self.pt2.phi = distdata[i] - * self.arc.pt1 = &self.pt1 # <<<<<<<<<<<<<< - * self.arc.pt2 = &self.pt2 - * else: - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt1 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1); - - /* "_geod.pyx":152 - * self.pt2.phi = distdata[i] - * self.arc.pt1 = &self.pt1 - * self.arc.pt2 = &self.pt2 # <<<<<<<<<<<<<< - * else: - * self.pt1.lam = _dg2rad*lonsdata[i] - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2); - goto __pyx_L13; - } - /*else*/ { - - /* "_geod.pyx":154 - * self.arc.pt2 = &self.pt2 - * else: - * self.pt1.lam = _dg2rad*lonsdata[i] # <<<<<<<<<<<<<< - * self.pt1.phi = _dg2rad*latsdata[i] - * self.pt1.h = 0. - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.lam = (__pyx_v_5_geod__dg2rad * (__pyx_v_lonsdata[__pyx_v_i])); - - /* "_geod.pyx":155 - * else: - * self.pt1.lam = _dg2rad*lonsdata[i] - * self.pt1.phi = _dg2rad*latsdata[i] # <<<<<<<<<<<<<< - * self.pt1.h = 0. - * self.pt2.lam = _dg2rad*azdata[i] - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.phi = (__pyx_v_5_geod__dg2rad * (__pyx_v_latsdata[__pyx_v_i])); - - /* "_geod.pyx":156 - * self.pt1.lam = _dg2rad*lonsdata[i] - * self.pt1.phi = _dg2rad*latsdata[i] - * self.pt1.h = 0. # <<<<<<<<<<<<<< - * self.pt2.lam = _dg2rad*azdata[i] - * self.pt2.phi = _dg2rad*distdata[i] - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.h = 0.; - - /* "_geod.pyx":157 - * self.pt1.phi = _dg2rad*latsdata[i] - * self.pt1.h = 0. - * self.pt2.lam = _dg2rad*azdata[i] # <<<<<<<<<<<<<< - * self.pt2.phi = _dg2rad*distdata[i] - * self.arc.pt1 = &self.pt1 - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam = (__pyx_v_5_geod__dg2rad * (__pyx_v_azdata[__pyx_v_i])); - - /* "_geod.pyx":158 - * self.pt1.h = 0. - * self.pt2.lam = _dg2rad*azdata[i] - * self.pt2.phi = _dg2rad*distdata[i] # <<<<<<<<<<<<<< - * self.arc.pt1 = &self.pt1 - * self.arc.pt2 = &self.pt2 - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi = (__pyx_v_5_geod__dg2rad * (__pyx_v_distdata[__pyx_v_i])); - - /* "_geod.pyx":159 - * self.pt2.lam = _dg2rad*azdata[i] - * self.pt2.phi = _dg2rad*distdata[i] - * self.arc.pt1 = &self.pt1 # <<<<<<<<<<<<<< - * self.arc.pt2 = &self.pt2 - * # Computes distance, forward and back azimuths in structure - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt1 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1); - - /* "_geod.pyx":160 - * self.pt2.phi = _dg2rad*distdata[i] - * self.arc.pt1 = &self.pt1 - * self.arc.pt2 = &self.pt2 # <<<<<<<<<<<<<< - * # Computes distance, forward and back azimuths in structure - * # for the two end points of the geodesic line - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2); - } - __pyx_L13:; - - /* "_geod.pyx":163 - * # Computes distance, forward and back azimuths in structure - * # for the two end points of the geodesic line - * if self.sphere: # <<<<<<<<<<<<<< - * proj_sp_inv(&self.arc) - * else: - */ - __pyx_t_5 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__sphere); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_2) { - - /* "_geod.pyx":164 - * # for the two end points of the geodesic line - * if self.sphere: - * proj_sp_inv(&self.arc) # <<<<<<<<<<<<<< - * else: - * proj_in_inv(&self.arc) - */ - proj_sp_inv((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); - goto __pyx_L14; - } - /*else*/ { - - /* "_geod.pyx":166 - * proj_sp_inv(&self.arc) - * else: - * proj_in_inv(&self.arc) # <<<<<<<<<<<<<< - * if radians: - * lonsdata[i] = self.arc.az12 - */ - proj_in_inv((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); - } - __pyx_L14:; - - /* "_geod.pyx":167 - * else: - * proj_in_inv(&self.arc) - * if radians: # <<<<<<<<<<<<<< - * lonsdata[i] = self.arc.az12 - * latsdata[i] = self.arc.az21 - */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_2) { - - /* "_geod.pyx":168 - * proj_in_inv(&self.arc) - * if radians: - * lonsdata[i] = self.arc.az12 # <<<<<<<<<<<<<< - * latsdata[i] = self.arc.az21 - * else: - */ - (__pyx_v_lonsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az12; - - /* "_geod.pyx":169 - * if radians: - * lonsdata[i] = self.arc.az12 - * latsdata[i] = self.arc.az21 # <<<<<<<<<<<<<< - * else: - * lonsdata[i] = _rad2dg*self.arc.az12 - */ - (__pyx_v_latsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az21; - goto __pyx_L15; - } - /*else*/ { - - /* "_geod.pyx":171 - * latsdata[i] = self.arc.az21 - * else: - * lonsdata[i] = _rad2dg*self.arc.az12 # <<<<<<<<<<<<<< - * latsdata[i] = _rad2dg*self.arc.az21 - * azdata[i] = self.arc.S - */ - (__pyx_v_lonsdata[__pyx_v_i]) = (__pyx_v_5_geod__rad2dg * ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az12); - - /* "_geod.pyx":172 - * else: - * lonsdata[i] = _rad2dg*self.arc.az12 - * latsdata[i] = _rad2dg*self.arc.az21 # <<<<<<<<<<<<<< - * azdata[i] = self.arc.S - * - */ - (__pyx_v_latsdata[__pyx_v_i]) = (__pyx_v_5_geod__rad2dg * ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.az21); - } - __pyx_L15:; - - /* "_geod.pyx":173 - * lonsdata[i] = _rad2dg*self.arc.az12 - * latsdata[i] = _rad2dg*self.arc.az21 - * azdata[i] = self.arc.S # <<<<<<<<<<<<<< - * - * def _npts(self, double lon1, double lat1, double lon2, double lat2, int npts, radians=False): - */ - (__pyx_v_azdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.S; - } - - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("_geod.Geod._inv", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_errmsg); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "_geod.pyx":175 - * azdata[i] = self.arc.S - * - * def _npts(self, double lon1, double lat1, double lon2, double lat2, int npts, radians=False): # <<<<<<<<<<<<<< - * """ - * given initial and terminus lat/lon, find npts intermediate points.""" - */ - -static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_5_geod_4Geod_4_npts[] = "\n given initial and terminus lat/lon, find npts intermediate points."; -static PyObject *__pyx_pf_5_geod_4Geod_4_npts(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - double __pyx_v_lon1; - double __pyx_v_lat1; - double __pyx_v_lon2; - double __pyx_v_lat2; - int __pyx_v_npts; - PyObject *__pyx_v_radians = 0; - int __pyx_v_i; - double __pyx_v_del_s; - PyObject *__pyx_v_lats = NULL; - PyObject *__pyx_v_lons = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - long __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__lon1,&__pyx_n_s__lat1,&__pyx_n_s__lon2,&__pyx_n_s__lat2,&__pyx_n_s__npts,&__pyx_n_s__radians,0}; - __Pyx_RefNannySetupContext("_npts"); - { - PyObject* values[6] = {0,0,0,0,0,0}; - values[5] = __pyx_k_8; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 0: - values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lon1); - if (likely(values[0])) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lat1); - if (likely(values[1])) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lon2); - if (likely(values[2])) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 3: - values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lat2); - if (likely(values[3])) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 4: - values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__npts); - if (likely(values[4])) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 5: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__radians); - if (value) { values[5] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_npts") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_lon1 = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_lon1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_v_lat1 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_lat1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_v_lon2 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_lon2 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_v_lat2 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_lat2 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_v_npts = __Pyx_PyInt_AsInt(values[4]); if (unlikely((__pyx_v_npts == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_v_radians = values[5]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("_geod.Geod._npts", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - - /* "_geod.pyx":180 - * cdef int i - * cdef double del_s - * if radians: # <<<<<<<<<<<<<< - * self.pt1.lam = lon1 - * self.pt1.phi = lat1 - */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_1) { - - /* "_geod.pyx":181 - * cdef double del_s - * if radians: - * self.pt1.lam = lon1 # <<<<<<<<<<<<<< - * self.pt1.phi = lat1 - * self.pt1.h = 0. - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.lam = __pyx_v_lon1; - - /* "_geod.pyx":182 - * if radians: - * self.pt1.lam = lon1 - * self.pt1.phi = lat1 # <<<<<<<<<<<<<< - * self.pt1.h = 0. - * self.pt2.lam = lon2 - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.phi = __pyx_v_lat1; - - /* "_geod.pyx":183 - * self.pt1.lam = lon1 - * self.pt1.phi = lat1 - * self.pt1.h = 0. # <<<<<<<<<<<<<< - * self.pt2.lam = lon2 - * self.pt2.phi = lat2 - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.h = 0.; - - /* "_geod.pyx":184 - * self.pt1.phi = lat1 - * self.pt1.h = 0. - * self.pt2.lam = lon2 # <<<<<<<<<<<<<< - * self.pt2.phi = lat2 - * self.arc.pt1 = &self.pt1 - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam = __pyx_v_lon2; - - /* "_geod.pyx":185 - * self.pt1.h = 0. - * self.pt2.lam = lon2 - * self.pt2.phi = lat2 # <<<<<<<<<<<<<< - * self.arc.pt1 = &self.pt1 - * self.arc.pt2 = &self.pt2 - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi = __pyx_v_lat2; - - /* "_geod.pyx":186 - * self.pt2.lam = lon2 - * self.pt2.phi = lat2 - * self.arc.pt1 = &self.pt1 # <<<<<<<<<<<<<< - * self.arc.pt2 = &self.pt2 - * else: - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt1 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1); - - /* "_geod.pyx":187 - * self.pt2.phi = lat2 - * self.arc.pt1 = &self.pt1 - * self.arc.pt2 = &self.pt2 # <<<<<<<<<<<<<< - * else: - * self.pt1.lam = _dg2rad*lon1 - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2); - goto __pyx_L6; - } - /*else*/ { - - /* "_geod.pyx":189 - * self.arc.pt2 = &self.pt2 - * else: - * self.pt1.lam = _dg2rad*lon1 # <<<<<<<<<<<<<< - * self.pt1.phi = _dg2rad*lat1 - * self.pt1.h = 0. - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.lam = (__pyx_v_5_geod__dg2rad * __pyx_v_lon1); - - /* "_geod.pyx":190 - * else: - * self.pt1.lam = _dg2rad*lon1 - * self.pt1.phi = _dg2rad*lat1 # <<<<<<<<<<<<<< - * self.pt1.h = 0. - * self.pt2.lam = _dg2rad*lon2 - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.phi = (__pyx_v_5_geod__dg2rad * __pyx_v_lat1); - - /* "_geod.pyx":191 - * self.pt1.lam = _dg2rad*lon1 - * self.pt1.phi = _dg2rad*lat1 - * self.pt1.h = 0. # <<<<<<<<<<<<<< - * self.pt2.lam = _dg2rad*lon2 - * self.pt2.phi = _dg2rad*lat2 - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1.h = 0.; - - /* "_geod.pyx":192 - * self.pt1.phi = _dg2rad*lat1 - * self.pt1.h = 0. - * self.pt2.lam = _dg2rad*lon2 # <<<<<<<<<<<<<< - * self.pt2.phi = _dg2rad*lat2 - * self.arc.pt1 = &self.pt1 - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam = (__pyx_v_5_geod__dg2rad * __pyx_v_lon2); - - /* "_geod.pyx":193 - * self.pt1.h = 0. - * self.pt2.lam = _dg2rad*lon2 - * self.pt2.phi = _dg2rad*lat2 # <<<<<<<<<<<<<< - * self.arc.pt1 = &self.pt1 - * self.arc.pt2 = &self.pt2 - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi = (__pyx_v_5_geod__dg2rad * __pyx_v_lat2); - - /* "_geod.pyx":194 - * self.pt2.lam = _dg2rad*lon2 - * self.pt2.phi = _dg2rad*lat2 - * self.arc.pt1 = &self.pt1 # <<<<<<<<<<<<<< - * self.arc.pt2 = &self.pt2 - * if self.sphere: - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt1 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt1); - - /* "_geod.pyx":195 - * self.pt2.phi = _dg2rad*lat2 - * self.arc.pt1 = &self.pt1 - * self.arc.pt2 = &self.pt2 # <<<<<<<<<<<<<< - * if self.sphere: - * proj_sp_inv(&self.arc) - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.pt2 = (&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2); - } - __pyx_L6:; - - /* "_geod.pyx":196 - * self.arc.pt1 = &self.pt1 - * self.arc.pt2 = &self.pt2 - * if self.sphere: # <<<<<<<<<<<<<< - * proj_sp_inv(&self.arc) - * else: - */ - __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__sphere); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_1) { - - /* "_geod.pyx":197 - * self.arc.pt2 = &self.pt2 - * if self.sphere: - * proj_sp_inv(&self.arc) # <<<<<<<<<<<<<< - * else: - * proj_in_inv(&self.arc) - */ - proj_sp_inv((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); - goto __pyx_L7; - } - /*else*/ { - - /* "_geod.pyx":199 - * proj_sp_inv(&self.arc) - * else: - * proj_in_inv(&self.arc) # <<<<<<<<<<<<<< - * # distance increment. - * del_s = self.arc.S/(npts+1) - */ - proj_in_inv((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); - } - __pyx_L7:; - - /* "_geod.pyx":201 - * proj_in_inv(&self.arc) - * # distance increment. - * del_s = self.arc.S/(npts+1) # <<<<<<<<<<<<<< - * # initialize output tuples. - * lats = () - */ - __pyx_t_3 = (__pyx_v_npts + 1); - if (unlikely(__pyx_t_3 == 0)) { - PyErr_Format(PyExc_ZeroDivisionError, "float division"); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_v_del_s = (((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.S / __pyx_t_3); - - /* "_geod.pyx":203 - * del_s = self.arc.S/(npts+1) - * # initialize output tuples. - * lats = () # <<<<<<<<<<<<<< - * lons = () - * # loop over intermediate points, compute lat/lons. - */ - __Pyx_INCREF(((PyObject *)__pyx_empty_tuple)); - __pyx_v_lats = __pyx_empty_tuple; - - /* "_geod.pyx":204 - * # initialize output tuples. - * lats = () - * lons = () # <<<<<<<<<<<<<< - * # loop over intermediate points, compute lat/lons. - * for i from 1 <= i < npts+1: - */ - __Pyx_INCREF(((PyObject *)__pyx_empty_tuple)); - __pyx_v_lons = __pyx_empty_tuple; - - /* "_geod.pyx":206 - * lons = () - * # loop over intermediate points, compute lat/lons. - * for i from 1 <= i < npts+1: # <<<<<<<<<<<<<< - * self.arc.S = i*del_s - * if self.sphere: - */ - __pyx_t_3 = (__pyx_v_npts + 1); - for (__pyx_v_i = 1; __pyx_v_i < __pyx_t_3; __pyx_v_i++) { - - /* "_geod.pyx":207 - * # loop over intermediate points, compute lat/lons. - * for i from 1 <= i < npts+1: - * self.arc.S = i*del_s # <<<<<<<<<<<<<< - * if self.sphere: - * proj_sp_fwd(&self.arc) - */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc.S = (__pyx_v_i * __pyx_v_del_s); - - /* "_geod.pyx":208 - * for i from 1 <= i < npts+1: - * self.arc.S = i*del_s - * if self.sphere: # <<<<<<<<<<<<<< - * proj_sp_fwd(&self.arc) - * else: - */ - __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__sphere); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_1) { - - /* "_geod.pyx":209 - * self.arc.S = i*del_s - * if self.sphere: - * proj_sp_fwd(&self.arc) # <<<<<<<<<<<<<< - * else: - * proj_in_fwd(&self.arc) - */ - proj_sp_fwd((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); - goto __pyx_L10; - } - /*else*/ { - - /* "_geod.pyx":211 - * proj_sp_fwd(&self.arc) - * else: - * proj_in_fwd(&self.arc) # <<<<<<<<<<<<<< - * if radians: - * lats = lats + (self.pt2.phi,) - */ - proj_in_fwd((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->arc)); - } - __pyx_L10:; - - /* "_geod.pyx":212 - * else: - * proj_in_fwd(&self.arc) - * if radians: # <<<<<<<<<<<<<< - * lats = lats + (self.pt2.phi,) - * lons = lons + (self.pt2.lam.v,) - */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_1) { - - /* "_geod.pyx":213 - * proj_in_fwd(&self.arc) - * if radians: - * lats = lats + (self.pt2.phi,) # <<<<<<<<<<<<<< - * lons = lons + (self.pt2.lam.v,) - * else: - */ - __pyx_t_2 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(((PyObject *)__pyx_v_lats), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_2)); - __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; - __Pyx_DECREF(((PyObject *)__pyx_v_lats)); - __pyx_v_lats = __pyx_t_2; - __pyx_t_2 = 0; - - /* "_geod.pyx":214 - * if radians: - * lats = lats + (self.pt2.phi,) - * lons = lons + (self.pt2.lam.v,) # <<<<<<<<<<<<<< - * else: - * lats = lats + (_rad2dg*self.pt2.phi,) - */ - __pyx_t_2 = PyFloat_FromDouble(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__v); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_2)); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_v_lons), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; - __Pyx_DECREF(((PyObject *)__pyx_v_lons)); - __pyx_v_lons = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L11; - } - /*else*/ { - - /* "_geod.pyx":216 - * lons = lons + (self.pt2.lam.v,) - * else: - * lats = lats + (_rad2dg*self.pt2.phi,) # <<<<<<<<<<<<<< - * lons = lons + (_rad2dg*self.pt2.lam,) - * return lons, lats - */ - __pyx_t_4 = PyFloat_FromDouble((__pyx_v_5_geod__rad2dg * ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.phi)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_2)); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_v_lats), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; - __Pyx_DECREF(((PyObject *)__pyx_v_lats)); - __pyx_v_lats = __pyx_t_4; - __pyx_t_4 = 0; - - /* "_geod.pyx":217 - * else: - * lats = lats + (_rad2dg*self.pt2.phi,) - * lons = lons + (_rad2dg*self.pt2.lam,) # <<<<<<<<<<<<<< - * return lons, lats - */ - __pyx_t_4 = PyFloat_FromDouble((__pyx_v_5_geod__rad2dg * ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->pt2.lam)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_2)); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_v_lons), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; - __Pyx_DECREF(((PyObject *)__pyx_v_lons)); - __pyx_v_lons = __pyx_t_4; - __pyx_t_4 = 0; - } - __pyx_L11:; - } - - /* "_geod.pyx":218 - * lats = lats + (_rad2dg*self.pt2.phi,) - * lons = lons + (_rad2dg*self.pt2.lam,) - * return lons, lats # <<<<<<<<<<<<<< - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - __Pyx_INCREF(((PyObject *)__pyx_v_lons)); - PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_lons)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_lons)); - __Pyx_INCREF(((PyObject *)__pyx_v_lats)); - PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_v_lats)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_lats)); - __pyx_r = ((PyObject *)__pyx_t_4); - __pyx_t_4 = 0; - goto __pyx_L0; - - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("_geod.Geod._npts", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_lats); - __Pyx_XDECREF(__pyx_v_lons); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_tp_new_5_geod_Geod(PyTypeObject *t, PyObject *a, PyObject *k) { - PyObject *o = (*t->tp_alloc)(t, 0); - if (!o) return 0; - if (__pyx_pf_5_geod_4Geod___cinit__(o, a, k) < 0) { - Py_DECREF(o); o = 0; - } - return o; -} - -static void __pyx_tp_dealloc_5_geod_Geod(PyObject *o) { - (*Py_TYPE(o)->tp_free)(o); -} - -static PyMethodDef __pyx_methods_5_geod_Geod[] = { - {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__pyx_pf_5_geod_4Geod_1__reduce__, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5_geod_4Geod_1__reduce__)}, - {__Pyx_NAMESTR("_fwd"), (PyCFunction)__pyx_pf_5_geod_4Geod_2_fwd, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}, - {__Pyx_NAMESTR("_inv"), (PyCFunction)__pyx_pf_5_geod_4Geod_3_inv, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5_geod_4Geod_3_inv)}, - {__Pyx_NAMESTR("_npts"), (PyCFunction)__pyx_pf_5_geod_4Geod_4_npts, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5_geod_4Geod_4_npts)}, - {0, 0, 0, 0} -}; - -static PyNumberMethods __pyx_tp_as_number_Geod = { - 0, /*nb_add*/ - 0, /*nb_subtract*/ - 0, /*nb_multiply*/ - #if PY_MAJOR_VERSION < 3 - 0, /*nb_divide*/ - #endif - 0, /*nb_remainder*/ - 0, /*nb_divmod*/ - 0, /*nb_power*/ - 0, /*nb_negative*/ - 0, /*nb_positive*/ - 0, /*nb_absolute*/ - 0, /*nb_nonzero*/ - 0, /*nb_invert*/ - 0, /*nb_lshift*/ - 0, /*nb_rshift*/ - 0, /*nb_and*/ - 0, /*nb_xor*/ - 0, /*nb_or*/ - #if PY_MAJOR_VERSION < 3 - 0, /*nb_coerce*/ - #endif - 0, /*nb_int*/ - #if PY_MAJOR_VERSION < 3 - 0, /*nb_long*/ - #else - 0, /*reserved*/ - #endif - 0, /*nb_float*/ - #if PY_MAJOR_VERSION < 3 - 0, /*nb_oct*/ - #endif - #if PY_MAJOR_VERSION < 3 - 0, /*nb_hex*/ - #endif - 0, /*nb_inplace_add*/ - 0, /*nb_inplace_subtract*/ - 0, /*nb_inplace_multiply*/ - #if PY_MAJOR_VERSION < 3 - 0, /*nb_inplace_divide*/ - #endif - 0, /*nb_inplace_remainder*/ - 0, /*nb_inplace_power*/ - 0, /*nb_inplace_lshift*/ - 0, /*nb_inplace_rshift*/ - 0, /*nb_inplace_and*/ - 0, /*nb_inplace_xor*/ - 0, /*nb_inplace_or*/ - 0, /*nb_floor_divide*/ - 0, /*nb_true_divide*/ - 0, /*nb_inplace_floor_divide*/ - 0, /*nb_inplace_true_divide*/ - #if PY_VERSION_HEX >= 0x02050000 - 0, /*nb_index*/ - #endif -}; - -static PySequenceMethods __pyx_tp_as_sequence_Geod = { - 0, /*sq_length*/ - 0, /*sq_concat*/ - 0, /*sq_repeat*/ - 0, /*sq_item*/ - 0, /*sq_slice*/ - 0, /*sq_ass_item*/ - 0, /*sq_ass_slice*/ - 0, /*sq_contains*/ - 0, /*sq_inplace_concat*/ - 0, /*sq_inplace_repeat*/ -}; - -static PyMappingMethods __pyx_tp_as_mapping_Geod = { - 0, /*mp_length*/ - 0, /*mp_subscript*/ - 0, /*mp_ass_subscript*/ -}; - -static PyBufferProcs __pyx_tp_as_buffer_Geod = { - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getreadbuffer*/ - #endif - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getwritebuffer*/ - #endif - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getsegcount*/ - #endif - #if PY_MAJOR_VERSION < 3 - 0, /*bf_getcharbuffer*/ - #endif - #if PY_VERSION_HEX >= 0x02060000 - 0, /*bf_getbuffer*/ - #endif - #if PY_VERSION_HEX >= 0x02060000 - 0, /*bf_releasebuffer*/ - #endif -}; - -static PyTypeObject __pyx_type_5_geod_Geod = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("_geod.Geod"), /*tp_name*/ - sizeof(struct __pyx_obj_5_geod_Geod), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_5_geod_Geod, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - 0, /*tp_repr*/ - &__pyx_tp_as_number_Geod, /*tp_as_number*/ - &__pyx_tp_as_sequence_Geod, /*tp_as_sequence*/ - &__pyx_tp_as_mapping_Geod, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - &__pyx_tp_as_buffer_Geod, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_methods_5_geod_Geod, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_5_geod_Geod, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif -}; - -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; - -#if PY_MAJOR_VERSION >= 3 -static struct PyModuleDef __pyx_moduledef = { - PyModuleDef_HEAD_INIT, - __Pyx_NAMESTR("_geod"), - 0, /* m_doc */ - -1, /* m_size */ - __pyx_methods /* m_methods */, - NULL, /* m_reload */ - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_kp_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 0}, - {&__pyx_kp_s_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 0, 1, 0}, - {&__pyx_kp_s_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 0, 1, 0}, - {&__pyx_n_s__RuntimeError, __pyx_k__RuntimeError, sizeof(__pyx_k__RuntimeError), 0, 0, 1, 1}, - {&__pyx_n_s____class__, __pyx_k____class__, sizeof(__pyx_k____class__), 0, 0, 1, 1}, - {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1}, - {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1}, - {&__pyx_n_s___doublesize, __pyx_k___doublesize, sizeof(__pyx_k___doublesize), 0, 0, 1, 1}, - {&__pyx_n_s__a, __pyx_k__a, sizeof(__pyx_k__a), 0, 0, 1, 1}, - {&__pyx_n_s__az, __pyx_k__az, sizeof(__pyx_k__az), 0, 0, 1, 1}, - {&__pyx_n_s__degrees, __pyx_k__degrees, sizeof(__pyx_k__degrees), 0, 0, 1, 1}, - {&__pyx_n_s__dist, __pyx_k__dist, sizeof(__pyx_k__dist), 0, 0, 1, 1}, - {&__pyx_n_s__es, __pyx_k__es, sizeof(__pyx_k__es), 0, 0, 1, 1}, - {&__pyx_n_s__f, __pyx_k__f, sizeof(__pyx_k__f), 0, 0, 1, 1}, - {&__pyx_n_s__lat1, __pyx_k__lat1, sizeof(__pyx_k__lat1), 0, 0, 1, 1}, - {&__pyx_n_s__lat2, __pyx_k__lat2, sizeof(__pyx_k__lat2), 0, 0, 1, 1}, - {&__pyx_n_s__lats, __pyx_k__lats, sizeof(__pyx_k__lats), 0, 0, 1, 1}, - {&__pyx_n_s__lats1, __pyx_k__lats1, sizeof(__pyx_k__lats1), 0, 0, 1, 1}, - {&__pyx_n_s__lats2, __pyx_k__lats2, sizeof(__pyx_k__lats2), 0, 0, 1, 1}, - {&__pyx_n_s__lon1, __pyx_k__lon1, sizeof(__pyx_k__lon1), 0, 0, 1, 1}, - {&__pyx_n_s__lon2, __pyx_k__lon2, sizeof(__pyx_k__lon2), 0, 0, 1, 1}, - {&__pyx_n_s__lons, __pyx_k__lons, sizeof(__pyx_k__lons), 0, 0, 1, 1}, - {&__pyx_n_s__lons1, __pyx_k__lons1, sizeof(__pyx_k__lons1), 0, 0, 1, 1}, - {&__pyx_n_s__lons2, __pyx_k__lons2, sizeof(__pyx_k__lons2), 0, 0, 1, 1}, - {&__pyx_n_s__math, __pyx_k__math, sizeof(__pyx_k__math), 0, 0, 1, 1}, - {&__pyx_n_s__npts, __pyx_k__npts, sizeof(__pyx_k__npts), 0, 0, 1, 1}, - {&__pyx_n_s__radians, __pyx_k__radians, sizeof(__pyx_k__radians), 0, 0, 1, 1}, - {&__pyx_n_s__sphere, __pyx_k__sphere, sizeof(__pyx_k__sphere), 0, 0, 1, 1}, - {&__pyx_n_s__v, __pyx_k__v, sizeof(__pyx_k__v), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -static int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants"); - - /* "_geod.pyx":75 - * # process data in buffer - * if not buflenlons == buflenlats == buflenaz == buflend: - * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< - * ndim = buflenlons//_doublesize - * lonsdata = londata - */ - __pyx_k_tuple_4 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_4)); - __Pyx_INCREF(((PyObject *)__pyx_kp_s_3)); - PyTuple_SET_ITEM(__pyx_k_tuple_4, 0, ((PyObject *)__pyx_kp_s_3)); - __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_3)); - __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_4)); - - /* "_geod.pyx":137 - * # process data in buffer - * if not buflenlons == buflenlats == buflenaz == buflend: - * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< - * ndim = buflenlons//_doublesize - * lonsdata = londata - */ - __pyx_k_tuple_6 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_6)); - __Pyx_INCREF(((PyObject *)__pyx_kp_s_3)); - PyTuple_SET_ITEM(__pyx_k_tuple_6, 0, ((PyObject *)__pyx_kp_s_3)); - __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_3)); - __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_6)); - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - return 0; - __pyx_L1_error:; - return -1; -} - -#if PY_MAJOR_VERSION < 3 -PyMODINIT_FUNC init_geod(void); /*proto*/ -PyMODINIT_FUNC init_geod(void) -#else -PyMODINIT_FUNC PyInit__geod(void); /*proto*/ -PyMODINIT_FUNC PyInit__geod(void) -#endif -{ - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - double __pyx_t_4; - __Pyx_RefNannyDeclarations - #if CYTHON_REFNANNY - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); - if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); - } - #endif - __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit__geod(void)"); - if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #ifdef __pyx_binding_PyCFunctionType_USED - if (__pyx_binding_PyCFunctionType_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ - PyEval_InitThreads(); - #endif - #endif - /*--- Module creation code ---*/ - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4(__Pyx_NAMESTR("_geod"), __pyx_methods, 0, 0, PYTHON_API_VERSION); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - #if PY_MAJOR_VERSION < 3 - Py_INCREF(__pyx_m); - #endif - __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); - if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - /*--- Initialize various global constants etc. ---*/ - if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_module_is_main__geod) { - if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - } - /*--- Builtin init code ---*/ - if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Constants init code ---*/ - if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Global init code ---*/ - /*--- Variable export code ---*/ - /*--- Function export code ---*/ - /*--- Type init code ---*/ - if (PyType_Ready(&__pyx_type_5_geod_Geod) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__Pyx_SetAttrString(__pyx_m, "Geod", (PyObject *)&__pyx_type_5_geod_Geod) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_ptype_5_geod_Geod = &__pyx_type_5_geod_Geod; - /*--- Type import code ---*/ - /*--- Variable import code ---*/ - /*--- Function import code ---*/ - /*--- Execution code ---*/ - - /* "_geod.pyx":1 - * import math # <<<<<<<<<<<<<< - * - * cdef double _dg2rad, _rad2dg - */ - __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__math), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetAttr(__pyx_m, __pyx_n_s__math, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "_geod.pyx":5 - * cdef double _dg2rad, _rad2dg - * - * _dg2rad = math.radians(1.) # <<<<<<<<<<<<<< - * _rad2dg = math.degrees(1.) - * _doublesize = sizeof(double) - */ - __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__math); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__radians); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyFloat_FromDouble(1.); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_3)); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; - __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_5_geod__dg2rad = __pyx_t_4; - - /* "_geod.pyx":6 - * - * _dg2rad = math.radians(1.) - * _rad2dg = math.degrees(1.) # <<<<<<<<<<<<<< - * _doublesize = sizeof(double) - * - */ - __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__math); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__degrees); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyFloat_FromDouble(1.); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_2)); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; - __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_5_geod__rad2dg = __pyx_t_4; - - /* "_geod.pyx":7 - * _dg2rad = math.radians(1.) - * _rad2dg = math.degrees(1.) - * _doublesize = sizeof(double) # <<<<<<<<<<<<<< - * - * cdef extern from "Python.h": - */ - __pyx_t_1 = __Pyx_PyInt_FromSize_t((sizeof(double))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetAttr(__pyx_m, __pyx_n_s___doublesize, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "_geod.pyx":59 - * return (self.__class__,(initstring,)) - * - * def _fwd(self, lons, lats, az, dist, radians=False): # <<<<<<<<<<<<<< - * cdef Py_ssize_t buflenlons, buflenlats, buflenaz, buflend, ndim, i - * cdef double *lonsdata, *latsdata, *azdata, *distdata - */ - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_k_2 = __pyx_t_1; - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "_geod.pyx":116 - * azdata[i] = _rad2dg*self.arc.az21 - * - * def _inv(self, object lons1, object lats1, object lons2, object lats2, radians=False): # <<<<<<<<<<<<<< - * """ - * inverse transformation - return forward and back azimuths, plus distance - */ - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_k_5 = __pyx_t_1; - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "_geod.pyx":175 - * azdata[i] = self.arc.S - * - * def _npts(self, double lon1, double lat1, double lon2, double lat2, int npts, radians=False): # <<<<<<<<<<<<<< - * """ - * given initial and terminus lat/lon, find npts intermediate points.""" - */ - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_k_8 = __pyx_t_1; - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "_geod.pyx":1 - * import math # <<<<<<<<<<<<<< - * - * cdef double _dg2rad, _rad2dg - */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_1)); - if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - if (__pyx_m) { - __Pyx_AddTraceback("init _geod", __pyx_clineno, __pyx_lineno, __pyx_filename); - Py_DECREF(__pyx_m); __pyx_m = 0; - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init _geod"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if PY_MAJOR_VERSION < 3 - return; - #else - return __pyx_m; - #endif -} - -/* Runtime support code */ - -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule((char *)modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif /* CYTHON_REFNANNY */ - -static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) { - PyObject *result; - result = PyObject_GetAttr(dict, name); - if (!result) { - if (dict != __pyx_b) { - PyErr_Clear(); - result = PyObject_GetAttr(__pyx_b, name); - } - if (!result) { - PyErr_SetObject(PyExc_NameError, name); - } - } - return result; -} - -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%s() takes %s %"PY_FORMAT_SIZE_T"d positional argument%s (%"PY_FORMAT_SIZE_T"d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); -} - -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AS_STRING(kw_name)); - #endif -} - -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - } else { - #if PY_MAJOR_VERSION < 3 - if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key))) { - #else - if (unlikely(!PyUnicode_CheckExact(key)) && unlikely(!PyUnicode_Check(key))) { - #endif - goto invalid_keyword_type; - } else { - for (name = first_kw_arg; *name; name++) { - #if PY_MAJOR_VERSION >= 3 - if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) && - PyUnicode_Compare(**name, key) == 0) break; - #else - if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) && - _PyString_Eq(**name, key)) break; - #endif - } - if (*name) { - values[name-argnames] = value; - } else { - /* unexpected keyword found */ - for (name=argnames; name != first_kw_arg; name++) { - if (**name == key) goto arg_passed_twice; - #if PY_MAJOR_VERSION >= 3 - if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) && - PyUnicode_Compare(**name, key) == 0) goto arg_passed_twice; - #else - if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) && - _PyString_Eq(**name, key)) goto arg_passed_twice; - #endif - } - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - } - } - } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, **name); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%s() got an unexpected keyword argument '%s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - return -1; -} - -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -} - -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { - PyThreadState *tstate = PyThreadState_GET(); - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -} - - -#if PY_MAJOR_VERSION < 3 -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { - /* cause is unused */ - Py_XINCREF(type); - Py_XINCREF(value); - Py_XINCREF(tb); - /* First, check the traceback argument, replacing None with NULL. */ - if (tb == Py_None) { - Py_DECREF(tb); - tb = 0; - } - else if (tb != NULL && !PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto raise_error; - } - /* Next, replace a missing value with None */ - if (value == NULL) { - value = Py_None; - Py_INCREF(value); - } - #if PY_VERSION_HEX < 0x02050000 - if (!PyClass_Check(type)) - #else - if (!PyType_Check(type)) - #endif - { - /* Raising an instance. The value should be a dummy. */ - if (value != Py_None) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto raise_error; - } - /* Normalize to raise , */ - Py_DECREF(value); - value = type; - #if PY_VERSION_HEX < 0x02050000 - if (PyInstance_Check(type)) { - type = (PyObject*) ((PyInstanceObject*)type)->in_class; - Py_INCREF(type); - } - else { - type = 0; - PyErr_SetString(PyExc_TypeError, - "raise: exception must be an old-style class or instance"); - goto raise_error; - } - #else - type = (PyObject*) Py_TYPE(type); - Py_INCREF(type); - if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto raise_error; - } - #endif - } - - __Pyx_ErrRestore(type, value, tb); - return; -raise_error: - Py_XDECREF(value); - Py_XDECREF(type); - Py_XDECREF(tb); - return; -} - -#else /* Python 3+ */ - -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { - if (tb == Py_None) { - tb = 0; - } else if (tb && !PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto bad; - } - if (value == Py_None) - value = 0; - - if (PyExceptionInstance_Check(type)) { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto bad; - } - value = type; - type = (PyObject*) Py_TYPE(value); - } else if (!PyExceptionClass_Check(type)) { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto bad; - } - - if (cause) { - PyObject *fixed_cause; - if (PyExceptionClass_Check(cause)) { - fixed_cause = PyObject_CallObject(cause, NULL); - if (fixed_cause == NULL) - goto bad; - } - else if (PyExceptionInstance_Check(cause)) { - fixed_cause = cause; - Py_INCREF(fixed_cause); - } - else { - PyErr_SetString(PyExc_TypeError, - "exception causes must derive from " - "BaseException"); - goto bad; - } - if (!value) { - value = PyObject_CallObject(type, NULL); - } - PyException_SetCause(value, fixed_cause); - } - - PyErr_SetObject(type, value); - - if (tb) { - PyThreadState *tstate = PyThreadState_GET(); - PyObject* tmp_tb = tstate->curexc_traceback; - if (tb != tmp_tb) { - Py_INCREF(tb); - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_tb); - } - } - -bad: - return; -} -#endif - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level) { - PyObject *py_import = 0; - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - py_import = __Pyx_GetAttrString(__pyx_b, "__import__"); - if (!py_import) - goto bad; - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - #if PY_VERSION_HEX >= 0x02050000 - { - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - } - #else - if (level>0) { - PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); - goto bad; - } - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, NULL); - #endif -bad: - Py_XDECREF(empty_list); - Py_XDECREF(py_import); - Py_XDECREF(empty_dict); - return module; -} - -static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) { - const unsigned char neg_one = (unsigned char)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(unsigned char) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(unsigned char)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to unsigned char" : - "value too large to convert to unsigned char"); - } - return (unsigned char)-1; - } - return (unsigned char)val; - } - return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x); -} - -static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) { - const unsigned short neg_one = (unsigned short)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(unsigned short) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(unsigned short)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to unsigned short" : - "value too large to convert to unsigned short"); - } - return (unsigned short)-1; - } - return (unsigned short)val; - } - return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x); -} - -static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) { - const unsigned int neg_one = (unsigned int)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(unsigned int) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(unsigned int)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to unsigned int" : - "value too large to convert to unsigned int"); - } - return (unsigned int)-1; - } - return (unsigned int)val; - } - return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x); -} - -static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) { - const char neg_one = (char)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(char) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(char)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to char" : - "value too large to convert to char"); - } - return (char)-1; - } - return (char)val; - } - return (char)__Pyx_PyInt_AsLong(x); -} - -static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) { - const short neg_one = (short)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(short) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(short)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to short" : - "value too large to convert to short"); - } - return (short)-1; - } - return (short)val; - } - return (short)__Pyx_PyInt_AsLong(x); -} - -static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) { - const int neg_one = (int)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(int) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(int)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to int" : - "value too large to convert to int"); - } - return (int)-1; - } - return (int)val; - } - return (int)__Pyx_PyInt_AsLong(x); -} - -static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) { - const signed char neg_one = (signed char)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(signed char) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(signed char)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to signed char" : - "value too large to convert to signed char"); - } - return (signed char)-1; - } - return (signed char)val; - } - return (signed char)__Pyx_PyInt_AsSignedLong(x); -} - -static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) { - const signed short neg_one = (signed short)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(signed short) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(signed short)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to signed short" : - "value too large to convert to signed short"); - } - return (signed short)-1; - } - return (signed short)val; - } - return (signed short)__Pyx_PyInt_AsSignedLong(x); -} - -static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) { - const signed int neg_one = (signed int)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(signed int) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(signed int)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to signed int" : - "value too large to convert to signed int"); - } - return (signed int)-1; - } - return (signed int)val; - } - return (signed int)__Pyx_PyInt_AsSignedLong(x); -} - -static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) { - const int neg_one = (int)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (sizeof(int) < sizeof(long)) { - long val = __Pyx_PyInt_AsLong(x); - if (unlikely(val != (long)(int)val)) { - if (!unlikely(val == -1 && PyErr_Occurred())) { - PyErr_SetString(PyExc_OverflowError, - (is_unsigned && unlikely(val < 0)) ? - "can't convert negative value to int" : - "value too large to convert to int"); - } - return (int)-1; - } - return (int)val; - } - return (int)__Pyx_PyInt_AsLong(x); -} - -static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) { - const unsigned long neg_one = (unsigned long)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_VERSION_HEX < 0x03000000 - if (likely(PyInt_Check(x))) { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to unsigned long"); - return (unsigned long)-1; - } - return (unsigned long)val; - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to unsigned long"); - return (unsigned long)-1; - } - return (unsigned long)PyLong_AsUnsignedLong(x); - } else { - return (unsigned long)PyLong_AsLong(x); - } - } else { - unsigned long val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (unsigned long)-1; - val = __Pyx_PyInt_AsUnsignedLong(tmp); - Py_DECREF(tmp); - return val; - } -} - -static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) { - const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_VERSION_HEX < 0x03000000 - if (likely(PyInt_Check(x))) { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to unsigned PY_LONG_LONG"); - return (unsigned PY_LONG_LONG)-1; - } - return (unsigned PY_LONG_LONG)val; - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to unsigned PY_LONG_LONG"); - return (unsigned PY_LONG_LONG)-1; - } - return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); - } else { - return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x); - } - } else { - unsigned PY_LONG_LONG val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (unsigned PY_LONG_LONG)-1; - val = __Pyx_PyInt_AsUnsignedLongLong(tmp); - Py_DECREF(tmp); - return val; - } -} - -static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) { - const long neg_one = (long)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_VERSION_HEX < 0x03000000 - if (likely(PyInt_Check(x))) { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long)-1; - } - return (long)val; - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long)-1; - } - return (long)PyLong_AsUnsignedLong(x); - } else { - return (long)PyLong_AsLong(x); - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (long)-1; - val = __Pyx_PyInt_AsLong(tmp); - Py_DECREF(tmp); - return val; - } -} - -static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) { - const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_VERSION_HEX < 0x03000000 - if (likely(PyInt_Check(x))) { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to PY_LONG_LONG"); - return (PY_LONG_LONG)-1; - } - return (PY_LONG_LONG)val; - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to PY_LONG_LONG"); - return (PY_LONG_LONG)-1; - } - return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); - } else { - return (PY_LONG_LONG)PyLong_AsLongLong(x); - } - } else { - PY_LONG_LONG val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (PY_LONG_LONG)-1; - val = __Pyx_PyInt_AsLongLong(tmp); - Py_DECREF(tmp); - return val; - } -} - -static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) { - const signed long neg_one = (signed long)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_VERSION_HEX < 0x03000000 - if (likely(PyInt_Check(x))) { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to signed long"); - return (signed long)-1; - } - return (signed long)val; - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to signed long"); - return (signed long)-1; - } - return (signed long)PyLong_AsUnsignedLong(x); - } else { - return (signed long)PyLong_AsLong(x); - } - } else { - signed long val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (signed long)-1; - val = __Pyx_PyInt_AsSignedLong(tmp); - Py_DECREF(tmp); - return val; - } -} - -static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) { - const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_VERSION_HEX < 0x03000000 - if (likely(PyInt_Check(x))) { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to signed PY_LONG_LONG"); - return (signed PY_LONG_LONG)-1; - } - return (signed PY_LONG_LONG)val; - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to signed PY_LONG_LONG"); - return (signed PY_LONG_LONG)-1; - } - return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x); - } else { - return (signed PY_LONG_LONG)PyLong_AsLongLong(x); - } - } else { - signed PY_LONG_LONG val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (signed PY_LONG_LONG)-1; - val = __Pyx_PyInt_AsSignedLongLong(tmp); - Py_DECREF(tmp); - return val; - } -} - -static int __Pyx_check_binary_version(void) { - char ctversion[4], rtversion[4]; - PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); - PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); - if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { - char message[200]; - PyOS_snprintf(message, sizeof(message), - "compiletime version %s of module '%.100s' " - "does not match runtime version %s", - ctversion, __Pyx_MODULE_NAME, rtversion); - #if PY_VERSION_HEX < 0x02050000 - return PyErr_Warn(NULL, message); - #else - return PyErr_WarnEx(NULL, message, 1); - #endif - } - return 0; -} - -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" - -static void __Pyx_AddTraceback(const char *funcname, int __pyx_clineno, - int __pyx_lineno, const char *__pyx_filename) { - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - PyObject *py_globals = 0; - PyCodeObject *py_code = 0; - PyFrameObject *py_frame = 0; - - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(__pyx_filename); - #else - py_srcfile = PyUnicode_FromString(__pyx_filename); - #endif - if (!py_srcfile) goto bad; - if (__pyx_clineno) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_globals = PyModule_GetDict(__pyx_m); - if (!py_globals) goto bad; - py_code = PyCode_New( - 0, /*int argcount,*/ - #if PY_MAJOR_VERSION >= 3 - 0, /*int kwonlyargcount,*/ - #endif - 0, /*int nlocals,*/ - 0, /*int stacksize,*/ - 0, /*int flags,*/ - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - __pyx_lineno, /*int firstlineno,*/ - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - if (!py_code) goto bad; - py_frame = PyFrame_New( - PyThreadState_GET(), /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - py_globals, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - py_frame->f_lineno = __pyx_lineno; - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { - while (t->p) { - #if PY_MAJOR_VERSION < 3 - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - #else /* Python 3+ has unicode identifiers */ - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif - if (!*t->p) - return -1; - ++t; - } - return 0; -} - -/* Type Conversion Functions */ - -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} - -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { - PyNumberMethods *m; - const char *name = NULL; - PyObject *res = NULL; -#if PY_VERSION_HEX < 0x03000000 - if (PyInt_Check(x) || PyLong_Check(x)) -#else - if (PyLong_Check(x)) -#endif - return Py_INCREF(x), x; - m = Py_TYPE(x)->tp_as_number; -#if PY_VERSION_HEX < 0x03000000 - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = PyNumber_Long(x); - } -#else - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Long(x); - } -#endif - if (res) { -#if PY_VERSION_HEX < 0x03000000 - if (!PyInt_Check(res) && !PyLong_Check(res)) { -#else - if (!PyLong_Check(res)) { -#endif - PyErr_Format(PyExc_TypeError, - "__%s__ returned non-%s (type %.200s)", - name, name, Py_TYPE(res)->tp_name); - Py_DECREF(res); - return NULL; - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} - -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject* x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} - -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { -#if PY_VERSION_HEX < 0x02050000 - if (ival <= LONG_MAX) - return PyInt_FromLong((long)ival); - else { - unsigned char *bytes = (unsigned char *) &ival; - int one = 1; int little = (int)*(unsigned char*)&one; - return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); - } -#else - return PyInt_FromSize_t(ival); -#endif -} - -static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) { - unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x); - if (unlikely(val == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred())) { - return (size_t)-1; - } else if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) { - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to size_t"); - return (size_t)-1; - } - return (size_t)val; -} - - -#endif /* Py_PYTHON_H */ diff --git a/src/_geod.pyx b/src/_geod.pyx deleted file mode 100644 index e703a2064..000000000 --- a/src/_geod.pyx +++ /dev/null @@ -1,218 +0,0 @@ -import math - -cdef double _dg2rad, _rad2dg - -_dg2rad = math.radians(1.) -_rad2dg = math.degrees(1.) -_doublesize = sizeof(double) - -cdef extern from "Python.h": - int PyObject_AsWriteBuffer(object, void **rbuf, Py_ssize_t *len) - -cdef extern from "project.h": - # Earth's elliptical constants. - # Element a units, typically meters, defines the units for - # all other length elements. - ctypedef struct PROJ_ELLIPS: - double a # semi-major axis or sphere radius - double f # ellpsoid flattening, if == 0 then sphere - double es # eccentricity squared, if == 0 then sphere - double one_es # 1-es - # 3D Geographic coordinate - ctypedef struct PROJ_PT_LPH: - double lam # longitude in radians - double phi # latitude in radians - double h # height above the ellpsoid - # Geodesic line structure - # Azimuths in radians clockwise from North. Distance units the - # same as element a in structure ellps. - ctypedef struct PROJ_LINE: - PROJ_PT_LPH *pt1 # pointer to geographic coord of first location - double az12 # azimuth from pt1 to pt2 (forward) - PROJ_PT_LPH *pt2 # pointer to geographic coord of second location - double az21 # azimuth from pt2 to pt1 (back) - double S # geodetic distance between points - PROJ_ELLIPS *E # pointer to ellpsoid constants - void proj_sp_inv(PROJ_LINE * A) - void proj_sp_fwd(PROJ_LINE * A) - void proj_in_fwd(PROJ_LINE * A) - void proj_in_inv(PROJ_LINE * A) - -cdef class Geod: - cdef PROJ_LINE arc - cdef PROJ_ELLIPS ellps - cdef PROJ_PT_LPH pt1, pt2 - - def __cinit__(self, object a, object f, object es, object sphere): - self.sphere = sphere - self.ellps.a = a - self.ellps.f = f - self.ellps.es = es - self.ellps.one_es = 1.-es - self.arc.E = &self.ellps - - def __reduce__(self): - """special method that allows pyproj.Geod instance to be pickled""" - initstring = '+a=%s +f=%s +es=%s' % (self.a, self.f, self.es) - return (self.__class__,(initstring,)) - - def _fwd(self, lons, lats, az, dist, radians=False): - cdef Py_ssize_t buflenlons, buflenlats, buflenaz, buflend, ndim, i - cdef double *lonsdata, *latsdata, *azdata, *distdata - cdef void *londata, *latdata, *azdat, *distdat - cdef int err - # if buffer api is supported, get pointer to data buffers. - if PyObject_AsWriteBuffer(lons, &londata, &buflenlons) <> 0: - raise RuntimeError - if PyObject_AsWriteBuffer(lats, &latdata, &buflenlats) <> 0: - raise RuntimeError - if PyObject_AsWriteBuffer(az, &azdat, &buflenaz) <> 0: - raise RuntimeError - if PyObject_AsWriteBuffer(dist, &distdat, &buflend) <> 0: - raise RuntimeError - # process data in buffer - if not buflenlons == buflenlats == buflenaz == buflend: - raise RuntimeError("Buffer lengths not the same") - ndim = buflenlons//_doublesize - lonsdata = londata - latsdata = latdata - azdata = azdat - distdata = distdat - for i from 0 <= i < ndim: - if radians: - self.pt1.lam = lonsdata[i] - self.pt1.phi = latsdata[i] - self.pt1.h = 0. - self.arc.pt1 = &self.pt1 - self.arc.az12 = azdata[i] - self.arc.S = distdata[i] - else: - self.pt1.lam = _dg2rad*lonsdata[i] - self.pt1.phi = _dg2rad*latsdata[i] - self.pt1.h = 0. - self.arc.pt1 = &self.pt1 - self.arc.az12 = _dg2rad*azdata[i] - self.arc.S = distdata[i] -# Computes the location of the second point in the structure -# based on the first point's location and the distance and -# forward azumuth - if self.sphere: - proj_sp_fwd(&self.arc) - else: - proj_in_fwd(&self.arc) - if radians: - self.pt2.lam = self.arc.pt2.lam - self.pt2.phi = self.arc.pt2.phi - lonsdata[i] = self.pt2.lam - latsdata[i] = self.pt2.phi - azdata[i] = self.arc.az21 - else: - self.pt2.lam = _rad2dg*self.arc.pt2.lam - self.pt2.phi = _rad2dg*self.arc.pt2.phi - lonsdata[i] = self.pt2.lam - latsdata[i] = self.pt2.phi - azdata[i] = _rad2dg*self.arc.az21 - - def _inv(self, object lons1, object lats1, object lons2, object lats2, radians=False): - """ - inverse transformation - return forward and back azimuths, plus distance - between an initial and terminus lat/lon pair. - if radians=True, lons/lats are radians instead of degrees. - """ - cdef Py_ssize_t buflenlons, buflenlats, buflenaz, buflend, ndim, i - cdef double *lonsdata, *latsdata, *azdata, *distdata - cdef void *londata, *latdata, *azdat, *distdat - cdef int err - # if buffer api is supported, get pointer to data buffers. - if PyObject_AsWriteBuffer(lons1, &londata, &buflenlons) <> 0: - raise RuntimeError - if PyObject_AsWriteBuffer(lats1, &latdata, &buflenlats) <> 0: - raise RuntimeError - if PyObject_AsWriteBuffer(lons2, &azdat, &buflenaz) <> 0: - raise RuntimeError - if PyObject_AsWriteBuffer(lats2, &distdat, &buflend) <> 0: - raise RuntimeError - # process data in buffer - if not buflenlons == buflenlats == buflenaz == buflend: - raise RuntimeError("Buffer lengths not the same") - ndim = buflenlons//_doublesize - lonsdata = londata - latsdata = latdata - azdata = azdat - distdata = distdat - errmsg = 'undefined inverse geodesic (may be an antipodal point)' - for i from 0 <= i < ndim: - if radians: - self.pt1.lam = lonsdata[i] - self.pt1.phi = latsdata[i] - self.pt1.h = 0. - self.pt2.lam = azdata[i] - self.pt2.phi = distdata[i] - self.arc.pt1 = &self.pt1 - self.arc.pt2 = &self.pt2 - else: - self.pt1.lam = _dg2rad*lonsdata[i] - self.pt1.phi = _dg2rad*latsdata[i] - self.pt1.h = 0. - self.pt2.lam = _dg2rad*azdata[i] - self.pt2.phi = _dg2rad*distdata[i] - self.arc.pt1 = &self.pt1 - self.arc.pt2 = &self.pt2 -# Computes distance, forward and back azimuths in structure -# for the two end points of the geodesic line - if self.sphere: - proj_sp_inv(&self.arc) - else: - proj_in_inv(&self.arc) - if radians: - lonsdata[i] = self.arc.az12 - latsdata[i] = self.arc.az21 - else: - lonsdata[i] = _rad2dg*self.arc.az12 - latsdata[i] = _rad2dg*self.arc.az21 - azdata[i] = self.arc.S - - def _npts(self, double lon1, double lat1, double lon2, double lat2, int npts, radians=False): - """ - given initial and terminus lat/lon, find npts intermediate points.""" - cdef int i - cdef double del_s - if radians: - self.pt1.lam = lon1 - self.pt1.phi = lat1 - self.pt1.h = 0. - self.pt2.lam = lon2 - self.pt2.phi = lat2 - self.arc.pt1 = &self.pt1 - self.arc.pt2 = &self.pt2 - else: - self.pt1.lam = _dg2rad*lon1 - self.pt1.phi = _dg2rad*lat1 - self.pt1.h = 0. - self.pt2.lam = _dg2rad*lon2 - self.pt2.phi = _dg2rad*lat2 - self.arc.pt1 = &self.pt1 - self.arc.pt2 = &self.pt2 - if self.sphere: - proj_sp_inv(&self.arc) - else: - proj_in_inv(&self.arc) - # distance increment. - del_s = self.arc.S/(npts+1) - # initialize output tuples. - lats = () - lons = () - # loop over intermediate points, compute lat/lons. - for i from 1 <= i < npts+1: - self.arc.S = i*del_s - if self.sphere: - proj_sp_fwd(&self.arc) - else: - proj_in_fwd(&self.arc) - if radians: - lats = lats + (self.pt2.phi,) - lons = lons + (self.pt2.lam.v,) - else: - lats = lats + (_rad2dg*self.pt2.phi,) - lons = lons + (_rad2dg*self.pt2.lam,) - return lons, lats From 726bf6358bd19495dd7e4a6f3e2aeb87e0e6ccda Mon Sep 17 00:00:00 2001 From: Jeff Whitaker Date: Tue, 20 Dec 2011 10:11:43 -0700 Subject: [PATCH 10/14] remove obsolete files. --- src/pj_open_lib.c.orig | 191 ----------------------------------------- src/pycompat.h | 7 -- 2 files changed, 198 deletions(-) delete mode 100644 src/pj_open_lib.c.orig delete mode 100644 src/pycompat.h diff --git a/src/pj_open_lib.c.orig b/src/pj_open_lib.c.orig deleted file mode 100644 index 3f0f7c865..000000000 --- a/src/pj_open_lib.c.orig +++ /dev/null @@ -1,191 +0,0 @@ -/****************************************************************************** - * $Id: pj_open_lib.c,v 1.9 2007/07/06 14:58:03 fwarmerdam Exp $ - * - * Project: PROJ.4 - * Purpose: Implementation of pj_open_lib(), and pj_set_finder(). These - * provide a standard interface for opening projections support - * data files. - * Author: Gerald Evenden, Frank Warmerdam - * - ****************************************************************************** - * Copyright (c) 1995, Gerald Evenden - * Copyright (c) 2002, Frank Warmerdam - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - ****************************************************************************** - * - * $Log: pj_open_lib.c,v $ - * Revision 1.9 2007/07/06 14:58:03 fwarmerdam - * improve searchpath clearning with pj_set_searchpath() - * - * Revision 1.8 2007/03/11 17:03:18 fwarmerdam - * support drive letter prefixes on win32 and related fixes (bug 1499) - * - * Revision 1.7 2006/11/17 22:16:30 mloskot - * Uploaded PROJ.4 port for Windows CE. - * - * Revision 1.6 2004/09/16 15:14:01 fwarmerdam - * * src/pj_open_lib.c: added pj_set_searchpath() provided by Eric Miller. - * - * Revision 1.5 2002/12/14 20:15:30 warmerda - * updated headers - * - */ - -#define PJ_LIB__ -#include -#include -#include -#include - -PJ_CVSID("$Id: pj_open_lib.c,v 1.9 2007/07/06 14:58:03 fwarmerdam Exp $"); - -static const char *(*pj_finder)(const char *) = NULL; -static int path_count = 0; -static char **search_path = NULL; -static char * proj_lib_name = -#ifdef PROJ_LIB -PROJ_LIB; -#else -0; -#endif - -/************************************************************************/ -/* pj_set_finder() */ -/************************************************************************/ - -void pj_set_finder( const char *(*new_finder)(const char *) ) - -{ - pj_finder = new_finder; -} - -/************************************************************************/ -/* pj_set_searchpath() */ -/* */ -/* Path control for callers that can't practically provide */ -/* pj_set_finder() style callbacks. Call with (0,NULL) as args */ -/* to clear the searchpath set. */ -/************************************************************************/ - -void pj_set_searchpath ( int count, const char **path ) -{ - int i; - - if (path_count > 0 && search_path != NULL) - { - for (i = 0; i < path_count; i++) - { - pj_dalloc(search_path[i]); - } - pj_dalloc(search_path); - path_count = 0; - search_path = NULL; - } - - if( count > 0 ) - { - search_path = pj_malloc(sizeof *search_path * count); - for (i = 0; i < count; i++) - { - search_path[i] = pj_malloc(strlen(path[i]) + 1); - strcpy(search_path[i], path[i]); - } - } - - path_count = count; -} - -/************************************************************************/ -/* pj_open_lib() */ -/************************************************************************/ - -FILE * -pj_open_lib(char *name, char *mode) { - char fname[MAX_PATH_FILENAME+1]; - const char *sysname; - FILE *fid; - int n = 0; - int i; -#ifdef WIN32 - static const char dir_chars[] = "/\\"; -#else - static const char dir_chars[] = "/"; -#endif - -#ifndef _WIN32_WCE - - /* check if ~/name */ - if (*name == '~' && strchr(dir_chars,name[1]) ) - if (sysname = getenv("HOME")) { - (void)strcpy(fname, sysname); - fname[n = strlen(fname)] = DIR_CHAR; - fname[++n] = '\0'; - (void)strcpy(fname+n, name + 1); - sysname = fname; - } else - return NULL; - - /* or fixed path: /name, ./name or ../name */ - else if (strchr(dir_chars,*name) - || (*name == '.' && strchr(dir_chars,name[1])) - || (!strncmp(name, "..", 2) && strchr(dir_chars,name[2])) - || (name[1] == ':' && strchr(dir_chars,name[2])) ) - sysname = name; - - /* or try to use application provided file finder */ - else if( pj_finder != NULL && pj_finder( name ) != NULL ) - sysname = pj_finder( name ); - - /* or is environment PROJ_LIB defined */ - else if ((sysname = getenv("PROJ_LIB")) || (sysname = proj_lib_name)) { - (void)strcpy(fname, sysname); - fname[n = strlen(fname)] = DIR_CHAR; - fname[++n] = '\0'; - (void)strcpy(fname+n, name); - sysname = fname; - } else /* just try it bare bones */ - sysname = name; - - if (fid = fopen(sysname, mode)) - errno = 0; - - /* If none of those work and we have a search path, try it */ - if (!fid && path_count > 0) - { - for (i = 0; fid == NULL && i < path_count; i++) - { - sprintf(fname, "%s%c%s", search_path[i], DIR_CHAR, name); - sysname = fname; - fid = fopen (sysname, mode); - } - if (fid) - errno = 0; - } - - if( getenv( "PROJ_DEBUG" ) != NULL ) - fprintf( stderr, "pj_open_lib(%s): call fopen(%s) - %s\n", - name, sysname, - fid == NULL ? "failed" : "succeeded" ); - - return(fid); -#else - return NULL; -#endif /* _WIN32_WCE */ -} diff --git a/src/pycompat.h b/src/pycompat.h deleted file mode 100644 index df28c383d..000000000 --- a/src/pycompat.h +++ /dev/null @@ -1,7 +0,0 @@ -#include "Python.h" - -/* Suggested by M. v. Loewis: http://mail.python.org/pipermail/python-dev/2006-March/062561.html */ - -#if (PY_VERSION_HEX < 0x02050000) -typedef int Py_ssize_t; -#endif From a61b92548b93248a7417c9bb70529b08eec1333e Mon Sep 17 00:00:00 2001 From: Jeff Whitaker Date: Tue, 20 Dec 2011 10:17:17 -0700 Subject: [PATCH 11/14] update --- Changelog | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Changelog b/Changelog index 568d2f9ac..43c49ee73 100644 --- a/Changelog +++ b/Changelog @@ -1,4 +1,6 @@ version 1.0.3 (not yet released) + * update pyproj source from pyproj.googlecode.com. Includes + new more accurate code for geodesic computations. * bug fixes for celestial projections, and non-standard sphere radii (https://github.com/matplotlib/basemap/pull/6). * fix bug in drawparallels that results in 'KeyError' when drawing From d76b798294cd67dfb6339d1457d8049560f15e22 Mon Sep 17 00:00:00 2001 From: Jeff Whitaker Date: Tue, 20 Dec 2011 10:17:58 -0700 Subject: [PATCH 12/14] add geodesic dir --- MANIFEST.in | 1 + 1 file changed, 1 insertion(+) diff --git a/MANIFEST.in b/MANIFEST.in index 57560b6e9..1e07ffc15 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -11,6 +11,7 @@ include Changelog include setup.py include nad2bin.c include src/* +include geodesic/* include examples/allskymap.py include examples/allskymap_cr_example.py include examples/plothighsandlows.py From 675ac252293028527512212e997207a9c2679798 Mon Sep 17 00:00:00 2001 From: Jeff Whitaker Date: Tue, 20 Dec 2011 10:18:50 -0700 Subject: [PATCH 13/14] remove un-needed files. --- geodesic/proj_gforward.c | 57 ---------------- geodesic/proj_ginverse.c | 58 ---------------- geodesic/proj_pt_fwd.c | 139 --------------------------------------- geodesic/proj_pt_inv.c | 99 ---------------------------- 4 files changed, 353 deletions(-) delete mode 100644 geodesic/proj_gforward.c delete mode 100644 geodesic/proj_ginverse.c delete mode 100644 geodesic/proj_pt_fwd.c delete mode 100644 geodesic/proj_pt_inv.c diff --git a/geodesic/proj_gforward.c b/geodesic/proj_gforward.c deleted file mode 100644 index 7ea93daa7..000000000 --- a/geodesic/proj_gforward.c +++ /dev/null @@ -1,57 +0,0 @@ -/* -** Copyright (c) 2009 Gerald I. Evenden -*/ -static const char - PROJ_ID[] = "$Id: proj_gforward.c,v 5.1 2009/04/30 20:47:47 gie Exp gie $"; -/* -** Permission is hereby granted, free of charge, to any person obtaining -** a copy of this software and associated documentation files (the -** "Software"), to deal in the Software without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Software, and to -** permit persons to whom the Software is furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be -** included in all copies or substantial portions of the Software. -** -** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -/** @file proj_gforward.c - * @brief compute the inverse geodesic - * @author Gerald I. Evenden - */ -#include -#include -/** - * @brief Forward geodesic computation - elliptical earth - * @param A pointer to geodesic line stucturei - * @return 0 if OK, != 0 if error detected - * - * This is the preferred entry to geodesic computation routines. - * It will automatically test that point 1 is present and that - * A->S > 0.. - */ -int proj_gforward(PROJ_LINE * A) { - - if (A->pt1 == NULL || A->S <= 0 || A->E == NULL) - return 1; - if (A->E->f) /* ellipsoid earth */ - proj_in_fwd(A); - else /* spherical earth */ - proj_sp_fwd(A); - return 0; -} - -/* - * $Log: proj_gforward.c,v $ - * Revision 5.1 2009/04/30 20:47:47 gie - * *** empty log message *** - * -*/ diff --git a/geodesic/proj_ginverse.c b/geodesic/proj_ginverse.c deleted file mode 100644 index cd27abd2c..000000000 --- a/geodesic/proj_ginverse.c +++ /dev/null @@ -1,58 +0,0 @@ -/* -** Copyright (c) 2009 Gerald I. Evenden -*/ -static const char - PROJ_ID[] = "$Id: proj_ginverse.c,v 5.1 2009/04/30 20:47:47 gie Exp gie $"; -/* -** Permission is hereby granted, free of charge, to any person obtaining -** a copy of this software and associated documentation files (the -** "Software"), to deal in the Software without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Software, and to -** permit persons to whom the Software is furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be -** included in all copies or substantial portions of the Software. -** -** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -/** @file proj_ginverse.c - * @brief compute the inverse geodesic - * @author Gerald I. Evenden - */ -#include -#include -/** - * @brief Inverse geodesic computation - elliptical earth - * @param A pointer to geodesic line stucture - * @return 0 if OK else !=0 - * @author Gerald I. Evenden - * - * Determines the geodesic distance between A->pt1 and A-pt2 - * and the forward azimuth and back azimuths for each point. - * - * Preferred entry for geodesic computations. - */ -int proj_ginverse(PROJ_LINE * A) { - if (A->pt1 == NULL || A->pt2 == NULL || A->E == NULL) - return 1; - if (A->E->f) /* ellipsoid earth */ - proj_in_inv(A); - else /* spherical earth */ - proj_sp_inv(A); - return 0; -} - -/* - * $Log: proj_ginverse.c,v $ - * Revision 5.1 2009/04/30 20:47:47 gie - * *** empty log message *** - * -*/ diff --git a/geodesic/proj_pt_fwd.c b/geodesic/proj_pt_fwd.c deleted file mode 100644 index c06228d96..000000000 --- a/geodesic/proj_pt_fwd.c +++ /dev/null @@ -1,139 +0,0 @@ -/* -** Copyright (c) 2009 Gerald I. Evenden -*/ -static const char - PROG_ID[] = "$Id: proj_pt_fwd.c,v 5.1 2009/04/30 20:47:47 gie Exp gie $"; -/* -** Permission is hereby granted, free of charge, to any person obtaining -** a copy of this software and associated documentation files (the -** "Software"), to deal in the Software without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Software, and to -** permit persons to whom the Software is furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be -** included in all copies or substantial portions of the Software. -** -** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -/** - * @file proj_pt_fwd.c - * @brief Thomas Forward geodesic function - * @author Gerald I. Evenden - */ -#include -#include -# define MERI_TOL 1e-9 -/** - * @brief Forward geodesic function - * @param Arc pointer to geodetic line structure - * - * Procedure determins point point 2 and azimuth at distance - * and azimuth from pt1 upon an ellipsoidal Earth. - * - * Based upon "Spherical Geodesics, Reference Systems, & Local - * Geometry", USNOO SP-138, 1970, Paul Thomas. - */ -void proj_pt_fwd(PROJ_LINE * Arc) { - double d, sind, u, V, X, ds, cosds, sinds, ss, de, al12, f2, f4, f, onef; - double th1, costh1, sinth1, sina12, cosa12, M, N, c1, c2, D, P, s1, al21, - phi2; - int merid, signS; - - f4 = 0.5 * (f2 = 0.5 * (f = Arc->E->f)); - onef = 1. - f; - al12 = proj_adjlon(Arc->az12); /* reduce to +- 0-PI */ - signS = fabs(al12) > M_PI_2 ? 1 : 0; - th1 = atan(onef * tan(Arc->pt1->phi)); - costh1 = cos(th1); - sinth1 = sin(th1); - if ((merid = fabs(sina12 = sin(al12)) < MERI_TOL)) { - sina12 = 0.; - cosa12 = fabs(al12) < M_PI_2 ? 1. : -1.; - M = 0.; - } else { - cosa12 = cos(al12); - M = costh1 * sina12; - } - N = costh1 * cosa12; - if (merid) { - c1 = 0.; - c2 = f4; - D = 1. - c2; - D *= D; - P = c2 / D; - } else { - c1 = f * M; - c2 = f4 * (1. - M * M); - D = (1. - c2) * (1. - c2 - c1 * M); - P = (1. + .5 * c1 * M) * c2 / D; - } - if (merid) - s1 = M_PI_2 - th1; - else { - s1 = (fabs(M) >= 1.) ? 0. : acos(M); - s1 = sinth1 / sin(s1); - s1 = (fabs(s1) >= 1.) ? 0. : acos(s1); - } - d = Arc->S / (D * Arc->E->a); - if (signS) - d = -d; - u = 2. * (s1 - d); - V = cos(u + d); - X = c2 * c2 * (sind = sin(d)) * cos(d) * (2. * V * V - 1.); - ds = d + X - 2. * P * V * (1. - 2. * P * cos(u)) * sind; - ss = s1 + s1 - ds; - cosds = cos(ds); - sinds = sin(ds); - if (signS) - sinds = -sinds; - al21 = N * cosds - sinth1 * sinds; - if (merid) { - phi2 = atan(tan(M_PI_2 + s1 - ds) / onef); - if (al21 > 0.) { - al21 = M_PI; - if (signS) - de = M_PI; - else { - phi2 = -phi2; - de = 0.; - } - } else { - al21 = 0.; - if (signS) { - phi2 = -phi2; - de = 0; - } else - de = M_PI; - } - } else { - al21 = atan(M / al21); - if (al21 > 0.) - al21 += M_PI; - if (al12 < 0.) - al21 -= M_PI; - Arc->az21 = proj_adjlon(al21); - Arc->pt2->phi = atan(-(sinth1 * cosds + N * sinds) * sin(al21) / - (onef * M)); - de = atan2(sinds * sina12, (costh1 * cosds - sinth1 * sinds * cosa12)); - if (signS) - de += c1 * ((1. - c2) * ds + c2 * sinds * cos(ss)); - else - de -= c1 * ((1. - c2) * ds - c2 * sinds * cos(ss)); - } - Arc->pt2->lam = proj_adjlon(Arc->pt1->lam + de); -} - -/* - * $Log: proj_pt_fwd.c,v $ - * Revision 5.1 2009/04/30 20:47:47 gie - * *** empty log message *** - * -*/ diff --git a/geodesic/proj_pt_inv.c b/geodesic/proj_pt_inv.c deleted file mode 100644 index 0c6f6f3e5..000000000 --- a/geodesic/proj_pt_inv.c +++ /dev/null @@ -1,99 +0,0 @@ -/* -** Copyright (c) 2009 Gerald I. Evenden -*/ -static const char - PROG_ID[] = "$Id: proj_pt_inv.c,v 5.1 2009/04/30 20:47:47 gie Exp gie $"; -/* -** Permission is hereby granted, free of charge, to any person obtaining -** a copy of this software and associated documentation files (the -** "Software"), to deal in the Software without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Software, and to -** permit persons to whom the Software is furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be -** included in all copies or substantial portions of the Software. -** -** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -/** - * @file proj_pt_inv.c - * @brief Thomas Inverse Geodetic Function - * @author Gerald I. Evenden - */ -#include -#include -# define DTOL 1e-12 -/** - * @brief Inverse geodesic function - * @param Arc pointer to geodetic line structure - * - * Procedure determins distance and forward/back azimuth between - * points pt1 and pt2 in stucture Arc based upon an ellipsoidal - * Earth. - * - * Based upon "Spherical Geodesics, Reference Systems, & Local - * Geometry", USNOO SP-138, 1970, Paul Thomas. - */ -void proj_pt_inv(PROJ_LINE * Arc) { - double th1, th2, thm, dthm, dlamm, dlam, sindlamm, costhm, sinthm, cosdthm, - sindthm, L, E, cosd, d, X, Y, T, sind, tandlammp, u, v, D, A, B, f2, f4, - f64, onef; - - f4 = 0.5 * (f2 = 0.5 * (onef = Arc->E->f)); - f64 = 0.25 * f4 * f4; - onef = 1. - onef; - th1 = atan(onef * tan(Arc->pt1->phi)); - th2 = atan(onef * tan(Arc->pt2->phi)); - thm = .5 * (th1 + th2); - dthm = .5 * (th2 - th1); - dlamm = .5 * (dlam = proj_adjlon(Arc->pt2->lam - Arc->pt1->lam)); - if (fabs(dlam) < DTOL && fabs(dthm) < DTOL) { // pt1 == pt2 - Arc->az12 = Arc->az21 = Arc->S = 0.; - return; - } - sindlamm = sin(dlamm); - costhm = cos(thm); - sinthm = sin(thm); - cosdthm = cos(dthm); - sindthm = sin(dthm); - L = sindthm * sindthm + (cosdthm * cosdthm - sinthm * sinthm) - * sindlamm * sindlamm; - d = acos(cosd = 1 - L - L); - E = cosd + cosd; - sind = sin(d); - Y = sinthm * cosdthm; - Y *= (Y + Y) / (1. - L); - T = sindthm * costhm; - T *= (T + T) / L; - X = Y + T; - Y -= T; - T = d / sind; - D = 4. * T * T; - A = D * E; - B = D + D; - Arc->S = sind * (T - f4 * (T * X - Y) + - f64 * (X * (A + (T - .5 * (A - E)) * X) - - Y * (B + E * Y) + D * X * Y)); - tandlammp = tan(.5 * (dlam - .25 * (Y + Y - E * (4. - X)) * - (f2 * T + f64 * (32. * T - (20. * T - A) - * X - (B + 4.) * Y)) * tan(dlam))); - u = atan2(sindthm, (tandlammp * costhm)); - v = atan2(cosdthm, (tandlammp * sinthm)); - Arc->az12 = proj_adjlon((2 * M_PI) + v - u); - Arc->az21 = proj_adjlon((2 * M_PI) - v - u); -} - -/* - * $Log: proj_pt_inv.c,v $ - * Revision 5.1 2009/04/30 20:47:47 gie - * *** empty log message *** - * -*/ From 7afa6c77f37ac99a33e1ace692c9c649feb82607 Mon Sep 17 00:00:00 2001 From: Jeff Whitaker Date: Tue, 20 Dec 2011 10:58:17 -0700 Subject: [PATCH 14/14] remove _pyproj.pxi, move into _proj.pyx --- geodesic/_geod.c | 2 +- src/_proj.c | 741 +++++++++++++++++++++-------------------------- src/_proj.pyx | 46 ++- src/_pyproj.pxi | 64 ---- 4 files changed, 370 insertions(+), 483 deletions(-) delete mode 100644 src/_pyproj.pxi diff --git a/geodesic/_geod.c b/geodesic/_geod.c index e4d8a4576..7ff0342f4 100644 --- a/geodesic/_geod.c +++ b/geodesic/_geod.c @@ -1,4 +1,4 @@ -/* Generated by Cython 0.15.1 on Tue Dec 20 08:28:53 2011 */ +/* Generated by Cython 0.15.1 on Tue Dec 20 10:52:25 2011 */ #define PY_SSIZE_T_CLEAN #include "Python.h" diff --git a/src/_proj.c b/src/_proj.c index b9cc28743..c403343f3 100644 --- a/src/_proj.c +++ b/src/_proj.c @@ -1,4 +1,4 @@ -/* Generated by Cython 0.15.1 on Fri Dec 16 10:36:42 2011 */ +/* Generated by Cython 0.15.1 on Tue Dec 20 10:56:14 2011 */ #define PY_SSIZE_T_CLEAN #include "Python.h" @@ -232,9 +232,7 @@ #include #define __PYX_HAVE___proj #define __PYX_HAVE_API___proj -#include "stdlib.h" #include "math.h" -#include "geodesic.h" #include "proj_api.h" #ifdef _OPENMP #include @@ -319,14 +317,13 @@ static const char *__pyx_filename; static const char *__pyx_f[] = { "_proj.pyx", - "_pyproj.pxi", }; /*--- Type declarations ---*/ struct __pyx_obj_5_proj_Proj; struct __pyx_opt_args_5_proj__strencode; -/* "_proj.pyx":297 +/* "_proj.pyx":335 * yy[i] = yy[i]*_rad2dg * * cdef _strencode(pystr,encoding='ascii'): # <<<<<<<<<<<<<< @@ -338,7 +335,7 @@ struct __pyx_opt_args_5_proj__strencode { PyObject *encoding; }; -/* "_proj.pyx":13 +/* "_proj.pyx":51 * pj_set_searchpath(1, &searchpath) * * cdef class Proj: # <<<<<<<<<<<<<< @@ -463,6 +460,8 @@ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ /* Module declarations from '_proj' */ static PyTypeObject *__pyx_ptype_5_proj_Proj = 0; +static double __pyx_v_5_proj__dg2rad; +static double __pyx_v_5_proj__rad2dg; static PyObject *__pyx_f_5_proj__strencode(PyObject *, struct __pyx_opt_args_5_proj__strencode *__pyx_optional_args); /*proto*/ #define __Pyx_MODULE_NAME "_proj" int __pyx_module_is_main__proj = 0; @@ -487,8 +486,6 @@ static char __pyx_k__math[] = "math"; static char __pyx_k___proj[] = "_proj"; static char __pyx_k__ascii[] = "ascii"; static char __pyx_k__encode[] = "encode"; -static char __pyx_k___dg2rad[] = "_dg2rad"; -static char __pyx_k___rad2dg[] = "_rad2dg"; static char __pyx_k__degrees[] = "degrees"; static char __pyx_k__radians[] = "radians"; static char __pyx_k____main__[] = "__main__"; @@ -513,10 +510,8 @@ static PyObject *__pyx_n_s____class__; static PyObject *__pyx_n_s____main__; static PyObject *__pyx_n_s____test__; static PyObject *__pyx_n_s____version__; -static PyObject *__pyx_n_s___dg2rad; static PyObject *__pyx_n_s___doublesize; static PyObject *__pyx_n_s___proj; -static PyObject *__pyx_n_s___rad2dg; static PyObject *__pyx_n_s___transform; static PyObject *__pyx_n_s__ascii; static PyObject *__pyx_n_s__degrees; @@ -550,8 +545,8 @@ static PyObject *__pyx_k_tuple_13; static PyObject *__pyx_k_tuple_14; static PyObject *__pyx_k_tuple_16; -/* "_proj.pyx":7 - * #c_numpy.import_array() +/* "_proj.pyx":45 + * int PyObject_AsWriteBuffer(object, void **rbuf, Py_ssize_t *len) * * def set_datapath(datapath): # <<<<<<<<<<<<<< * cdef char *searchpath @@ -573,29 +568,29 @@ static PyObject *__pyx_pf_5_proj_set_datapath(PyObject *__pyx_self, PyObject *__ __Pyx_RefNannySetupContext("set_datapath"); __pyx_self = __pyx_self; - /* "_proj.pyx":9 + /* "_proj.pyx":47 * def set_datapath(datapath): * cdef char *searchpath * bytestr = _strencode(datapath) # <<<<<<<<<<<<<< * searchpath = bytestr * pj_set_searchpath(1, &searchpath) */ - __pyx_t_1 = __pyx_f_5_proj__strencode(__pyx_v_datapath, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __pyx_f_5_proj__strencode(__pyx_v_datapath, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_bytestr = __pyx_t_1; __pyx_t_1 = 0; - /* "_proj.pyx":10 + /* "_proj.pyx":48 * cdef char *searchpath * bytestr = _strencode(datapath) * searchpath = bytestr # <<<<<<<<<<<<<< * pj_set_searchpath(1, &searchpath) * */ - __pyx_t_2 = PyBytes_AsString(__pyx_v_bytestr); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyBytes_AsString(__pyx_v_bytestr); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_v_searchpath = __pyx_t_2; - /* "_proj.pyx":11 + /* "_proj.pyx":49 * bytestr = _strencode(datapath) * searchpath = bytestr * pj_set_searchpath(1, &searchpath) # <<<<<<<<<<<<<< @@ -617,7 +612,7 @@ static PyObject *__pyx_pf_5_proj_set_datapath(PyObject *__pyx_self, PyObject *__ return __pyx_r; } -/* "_proj.pyx":20 +/* "_proj.pyx":58 * cdef public object srs * * def __cinit__(self, projstring): # <<<<<<<<<<<<<< @@ -658,7 +653,7 @@ static int __pyx_pf_5_proj_4Proj___cinit__(PyObject *__pyx_v_self, PyObject *__p else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { goto __pyx_L5_argtuple_error; @@ -669,14 +664,14 @@ static int __pyx_pf_5_proj_4Proj___cinit__(PyObject *__pyx_v_self, PyObject *__p } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("_proj.Proj.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; - /* "_proj.pyx":23 + /* "_proj.pyx":61 * # setup proj initialization string. * cdef int err * self.srs = projstring # <<<<<<<<<<<<<< @@ -689,29 +684,29 @@ static int __pyx_pf_5_proj_4Proj___cinit__(PyObject *__pyx_v_self, PyObject *__p __Pyx_DECREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs); ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs = __pyx_v_projstring; - /* "_proj.pyx":24 + /* "_proj.pyx":62 * cdef int err * self.srs = projstring * bytestr = _strencode(projstring) # <<<<<<<<<<<<<< * self.pjinitstring = bytestr * # initialize projection */ - __pyx_t_1 = __pyx_f_5_proj__strencode(__pyx_v_projstring, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __pyx_f_5_proj__strencode(__pyx_v_projstring, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_v_bytestr = __pyx_t_1; __pyx_t_1 = 0; - /* "_proj.pyx":25 + /* "_proj.pyx":63 * self.srs = projstring * bytestr = _strencode(projstring) * self.pjinitstring = bytestr # <<<<<<<<<<<<<< * # initialize projection * self.projctx = pj_ctx_alloc() */ - __pyx_t_2 = PyBytes_AsString(__pyx_v_bytestr); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyBytes_AsString(__pyx_v_bytestr); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->pjinitstring = __pyx_t_2; - /* "_proj.pyx":27 + /* "_proj.pyx":65 * self.pjinitstring = bytestr * # initialize projection * self.projctx = pj_ctx_alloc() # <<<<<<<<<<<<<< @@ -720,7 +715,7 @@ static int __pyx_pf_5_proj_4Proj___cinit__(PyObject *__pyx_v_self, PyObject *__p */ ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projctx = pj_ctx_alloc(); - /* "_proj.pyx":28 + /* "_proj.pyx":66 * # initialize projection * self.projctx = pj_ctx_alloc() * self.projpj = pj_init_plus_ctx(self.projctx, self.pjinitstring) # <<<<<<<<<<<<<< @@ -729,7 +724,7 @@ static int __pyx_pf_5_proj_4Proj___cinit__(PyObject *__pyx_v_self, PyObject *__p */ ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projpj = pj_init_plus_ctx(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projctx, ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->pjinitstring); - /* "_proj.pyx":29 + /* "_proj.pyx":67 * self.projctx = pj_ctx_alloc() * self.projpj = pj_init_plus_ctx(self.projctx, self.pjinitstring) * err = pj_ctx_get_errno(self.projctx) # <<<<<<<<<<<<<< @@ -738,7 +733,7 @@ static int __pyx_pf_5_proj_4Proj___cinit__(PyObject *__pyx_v_self, PyObject *__p */ __pyx_v_err = pj_ctx_get_errno(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projctx); - /* "_proj.pyx":30 + /* "_proj.pyx":68 * self.projpj = pj_init_plus_ctx(self.projctx, self.pjinitstring) * err = pj_ctx_get_errno(self.projctx) * if err != 0: # <<<<<<<<<<<<<< @@ -748,38 +743,38 @@ static int __pyx_pf_5_proj_4Proj___cinit__(PyObject *__pyx_v_self, PyObject *__p __pyx_t_3 = (__pyx_v_err != 0); if (__pyx_t_3) { - /* "_proj.pyx":31 + /* "_proj.pyx":69 * err = pj_ctx_get_errno(self.projctx) * if err != 0: * raise RuntimeError(pj_strerrno(err)) # <<<<<<<<<<<<<< * self.proj_version = PJ_VERSION/100. * */ - __pyx_t_1 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_1)); __Pyx_GIVEREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; - __pyx_t_1 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; - /* "_proj.pyx":32 + /* "_proj.pyx":70 * if err != 0: * raise RuntimeError(pj_strerrno(err)) * self.proj_version = PJ_VERSION/100. # <<<<<<<<<<<<<< * * def __dealloc__(self): */ - __pyx_t_1 = PyFloat_FromDouble((PJ_VERSION / 100.)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyFloat_FromDouble((PJ_VERSION / 100.)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->proj_version); @@ -800,7 +795,7 @@ static int __pyx_pf_5_proj_4Proj___cinit__(PyObject *__pyx_v_self, PyObject *__p return __pyx_r; } -/* "_proj.pyx":34 +/* "_proj.pyx":72 * self.proj_version = PJ_VERSION/100. * * def __dealloc__(self): # <<<<<<<<<<<<<< @@ -813,7 +808,7 @@ static void __pyx_pf_5_proj_4Proj_1__dealloc__(PyObject *__pyx_v_self) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__dealloc__"); - /* "_proj.pyx":36 + /* "_proj.pyx":74 * def __dealloc__(self): * """destroy projection definition""" * pj_free(self.projpj) # <<<<<<<<<<<<<< @@ -822,7 +817,7 @@ static void __pyx_pf_5_proj_4Proj_1__dealloc__(PyObject *__pyx_v_self) { */ pj_free(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projpj); - /* "_proj.pyx":37 + /* "_proj.pyx":75 * """destroy projection definition""" * pj_free(self.projpj) * pj_ctx_free(self.projctx) # <<<<<<<<<<<<<< @@ -834,7 +829,7 @@ static void __pyx_pf_5_proj_4Proj_1__dealloc__(PyObject *__pyx_v_self) { __Pyx_RefNannyFinishContext(); } -/* "_proj.pyx":39 +/* "_proj.pyx":77 * pj_ctx_free(self.projctx) * * def __reduce__(self): # <<<<<<<<<<<<<< @@ -855,7 +850,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_2__reduce__(PyObject *__pyx_v_self, CYTHO int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__reduce__"); - /* "_proj.pyx":41 + /* "_proj.pyx":79 * def __reduce__(self): * """special method that allows pyproj.Proj instance to be pickled""" * return (self.__class__,(self.srs,)) # <<<<<<<<<<<<<< @@ -863,14 +858,14 @@ static PyObject *__pyx_pf_5_proj_4Proj_2__reduce__(PyObject *__pyx_v_self, CYTHO * def _fwd(self, object lons, object lats, radians=False, errcheck=False): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_INCREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs); PyTuple_SET_ITEM(__pyx_t_2, 0, ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs); __Pyx_GIVEREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs); - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); @@ -896,7 +891,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_2__reduce__(PyObject *__pyx_v_self, CYTHO return __pyx_r; } -/* "_proj.pyx":43 +/* "_proj.pyx":81 * return (self.__class__,(self.srs,)) * * def _fwd(self, object lons, object lats, radians=False, errcheck=False): # <<<<<<<<<<<<<< @@ -931,7 +926,6 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ Py_ssize_t __pyx_t_5; int __pyx_t_6; int __pyx_t_7; - double __pyx_t_8; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -961,7 +955,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lats); if (likely(values[1])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_fwd", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_fwd", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { @@ -975,7 +969,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_fwd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_fwd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { @@ -994,14 +988,14 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_fwd", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_fwd", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("_proj.Proj._fwd", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - /* "_proj.pyx":58 + /* "_proj.pyx":96 * cdef int err * # if buffer api is supported, get pointer to data buffers. * if PyObject_AsWriteBuffer(lons, &londata, &buflenx) <> 0: # <<<<<<<<<<<<<< @@ -1011,7 +1005,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lons, (&__pyx_v_londata), (&__pyx_v_buflenx)) != 0); if (__pyx_t_1) { - /* "_proj.pyx":59 + /* "_proj.pyx":97 * # if buffer api is supported, get pointer to data buffers. * if PyObject_AsWriteBuffer(lons, &londata, &buflenx) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -1019,12 +1013,12 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ * raise RuntimeError */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; - /* "_proj.pyx":60 + /* "_proj.pyx":98 * if PyObject_AsWriteBuffer(lons, &londata, &buflenx) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(lats, &latdata, &bufleny) <> 0: # <<<<<<<<<<<<<< @@ -1034,7 +1028,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lats, (&__pyx_v_latdata), (&__pyx_v_bufleny)) != 0); if (__pyx_t_1) { - /* "_proj.pyx":61 + /* "_proj.pyx":99 * raise RuntimeError * if PyObject_AsWriteBuffer(lats, &latdata, &bufleny) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -1042,12 +1036,12 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ * if buflenx != bufleny: */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L7; } __pyx_L7:; - /* "_proj.pyx":63 + /* "_proj.pyx":101 * raise RuntimeError * # process data in buffer * if buflenx != bufleny: # <<<<<<<<<<<<<< @@ -1057,42 +1051,42 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (__pyx_v_buflenx != __pyx_v_bufleny); if (__pyx_t_1) { - /* "_proj.pyx":64 + /* "_proj.pyx":102 * # process data in buffer * if buflenx != bufleny: * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< * ndim = buflenx//_doublesize * lonsdata = londata */ - __pyx_t_2 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L8; } __pyx_L8:; - /* "_proj.pyx":65 + /* "_proj.pyx":103 * if buflenx != bufleny: * raise RuntimeError("Buffer lengths not the same") * ndim = buflenx//_doublesize # <<<<<<<<<<<<<< * lonsdata = londata * latsdata = latdata */ - __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_buflenx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_buflenx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_FloorDivide(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyNumber_FloorDivide(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_ndim = __pyx_t_5; - /* "_proj.pyx":66 + /* "_proj.pyx":104 * raise RuntimeError("Buffer lengths not the same") * ndim = buflenx//_doublesize * lonsdata = londata # <<<<<<<<<<<<<< @@ -1101,7 +1095,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_lonsdata = ((double *)__pyx_v_londata); - /* "_proj.pyx":67 + /* "_proj.pyx":105 * ndim = buflenx//_doublesize * lonsdata = londata * latsdata = latdata # <<<<<<<<<<<<<< @@ -1110,7 +1104,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_latsdata = ((double *)__pyx_v_latdata); - /* "_proj.pyx":68 + /* "_proj.pyx":106 * lonsdata = londata * latsdata = latdata * for i from 0 <= i < ndim: # <<<<<<<<<<<<<< @@ -1120,7 +1114,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_5 = __pyx_v_ndim; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_5; __pyx_v_i++) { - /* "_proj.pyx":70 + /* "_proj.pyx":108 * for i from 0 <= i < ndim: * # if inputs are nan's, return big number. * if lonsdata[i] != lonsdata[i] or latsdata[i] != latsdata[i]: # <<<<<<<<<<<<<< @@ -1136,7 +1130,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } if (__pyx_t_7) { - /* "_proj.pyx":71 + /* "_proj.pyx":109 * # if inputs are nan's, return big number. * if lonsdata[i] != lonsdata[i] or latsdata[i] != latsdata[i]: * lonsdata[i]=1.e30; latsdata[i]=1.e30 # <<<<<<<<<<<<<< @@ -1146,33 +1140,33 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ (__pyx_v_lonsdata[__pyx_v_i]) = 1.e30; (__pyx_v_latsdata[__pyx_v_i]) = 1.e30; - /* "_proj.pyx":72 + /* "_proj.pyx":110 * if lonsdata[i] != lonsdata[i] or latsdata[i] != latsdata[i]: * lonsdata[i]=1.e30; latsdata[i]=1.e30 * if errcheck: # <<<<<<<<<<<<<< * raise RuntimeError('projection undefined') * continue */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_7) { - /* "_proj.pyx":73 + /* "_proj.pyx":111 * lonsdata[i]=1.e30; latsdata[i]=1.e30 * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * continue * if radians: */ - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_6), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_6), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L12; } __pyx_L12:; - /* "_proj.pyx":74 + /* "_proj.pyx":112 * if errcheck: * raise RuntimeError('projection undefined') * continue # <<<<<<<<<<<<<< @@ -1184,17 +1178,17 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } __pyx_L11:; - /* "_proj.pyx":75 + /* "_proj.pyx":113 * raise RuntimeError('projection undefined') * continue * if radians: # <<<<<<<<<<<<<< * projlonlatin.u = lonsdata[i] * projlonlatin.v = latsdata[i] */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_7) { - /* "_proj.pyx":76 + /* "_proj.pyx":114 * continue * if radians: * projlonlatin.u = lonsdata[i] # <<<<<<<<<<<<<< @@ -1203,7 +1197,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_projlonlatin.u = (__pyx_v_lonsdata[__pyx_v_i]); - /* "_proj.pyx":77 + /* "_proj.pyx":115 * if radians: * projlonlatin.u = lonsdata[i] * projlonlatin.v = latsdata[i] # <<<<<<<<<<<<<< @@ -1215,47 +1209,27 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } /*else*/ { - /* "_proj.pyx":79 + /* "_proj.pyx":117 * projlonlatin.v = latsdata[i] * else: * projlonlatin.u = _dg2rad*lonsdata[i] # <<<<<<<<<<<<<< * projlonlatin.v = _dg2rad*latsdata[i] * projxyout = pj_fwd(projlonlatin,self.projpj) */ - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyFloat_FromDouble((__pyx_v_lonsdata[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_projlonlatin.u = __pyx_t_8; + __pyx_v_projlonlatin.u = (__pyx_v_5_proj__dg2rad * (__pyx_v_lonsdata[__pyx_v_i])); - /* "_proj.pyx":80 + /* "_proj.pyx":118 * else: * projlonlatin.u = _dg2rad*lonsdata[i] * projlonlatin.v = _dg2rad*latsdata[i] # <<<<<<<<<<<<<< * projxyout = pj_fwd(projlonlatin,self.projpj) * if errcheck: */ - __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyFloat_FromDouble((__pyx_v_latsdata[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_projlonlatin.v = __pyx_t_8; + __pyx_v_projlonlatin.v = (__pyx_v_5_proj__dg2rad * (__pyx_v_latsdata[__pyx_v_i])); } __pyx_L13:; - /* "_proj.pyx":81 + /* "_proj.pyx":119 * projlonlatin.u = _dg2rad*lonsdata[i] * projlonlatin.v = _dg2rad*latsdata[i] * projxyout = pj_fwd(projlonlatin,self.projpj) # <<<<<<<<<<<<<< @@ -1264,17 +1238,17 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_projxyout = pj_fwd(__pyx_v_projlonlatin, ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projpj); - /* "_proj.pyx":82 + /* "_proj.pyx":120 * projlonlatin.v = _dg2rad*latsdata[i] * projxyout = pj_fwd(projlonlatin,self.projpj) * if errcheck: # <<<<<<<<<<<<<< * err = pj_ctx_get_errno(self.projctx) * if err != 0: */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_7) { - /* "_proj.pyx":83 + /* "_proj.pyx":121 * projxyout = pj_fwd(projlonlatin,self.projpj) * if errcheck: * err = pj_ctx_get_errno(self.projctx) # <<<<<<<<<<<<<< @@ -1283,7 +1257,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_err = pj_ctx_get_errno(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projctx); - /* "_proj.pyx":84 + /* "_proj.pyx":122 * if errcheck: * err = pj_ctx_get_errno(self.projctx) * if err != 0: # <<<<<<<<<<<<<< @@ -1293,26 +1267,26 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_7 = (__pyx_v_err != 0); if (__pyx_t_7) { - /* "_proj.pyx":85 + /* "_proj.pyx":123 * err = pj_ctx_get_errno(self.projctx) * if err != 0: * raise RuntimeError(pj_strerrno(err)) # <<<<<<<<<<<<<< * # since HUGE_VAL can be 'inf', * # change it to a real (but very large) number. */ - __pyx_t_4 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_4)); __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L15; } __pyx_L15:; @@ -1320,7 +1294,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } __pyx_L14:; - /* "_proj.pyx":89 + /* "_proj.pyx":127 * # change it to a real (but very large) number. * # also check for NaNs. * if projxyout.u == HUGE_VAL or\ # <<<<<<<<<<<<<< @@ -1330,7 +1304,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_7 = (__pyx_v_projxyout.u == HUGE_VAL); if (!__pyx_t_7) { - /* "_proj.pyx":90 + /* "_proj.pyx":128 * # also check for NaNs. * if projxyout.u == HUGE_VAL or\ * projxyout.u != projxyout.u: # <<<<<<<<<<<<<< @@ -1344,33 +1318,33 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } if (__pyx_t_6) { - /* "_proj.pyx":91 + /* "_proj.pyx":129 * if projxyout.u == HUGE_VAL or\ * projxyout.u != projxyout.u: * if errcheck: # <<<<<<<<<<<<<< * raise RuntimeError('projection undefined') * lonsdata[i] = 1.e30 */ - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_6) { - /* "_proj.pyx":92 + /* "_proj.pyx":130 * projxyout.u != projxyout.u: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * lonsdata[i] = 1.e30 * else: */ - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_7), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_7), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L17; } __pyx_L17:; - /* "_proj.pyx":93 + /* "_proj.pyx":131 * if errcheck: * raise RuntimeError('projection undefined') * lonsdata[i] = 1.e30 # <<<<<<<<<<<<<< @@ -1382,7 +1356,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } /*else*/ { - /* "_proj.pyx":95 + /* "_proj.pyx":133 * lonsdata[i] = 1.e30 * else: * lonsdata[i] = projxyout.u # <<<<<<<<<<<<<< @@ -1393,7 +1367,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } __pyx_L16:; - /* "_proj.pyx":96 + /* "_proj.pyx":134 * else: * lonsdata[i] = projxyout.u * if projxyout.v == HUGE_VAL or\ # <<<<<<<<<<<<<< @@ -1403,7 +1377,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ __pyx_t_6 = (__pyx_v_projxyout.v == HUGE_VAL); if (!__pyx_t_6) { - /* "_proj.pyx":97 + /* "_proj.pyx":135 * lonsdata[i] = projxyout.u * if projxyout.v == HUGE_VAL or\ * projxyout.u != projxyout.u: # <<<<<<<<<<<<<< @@ -1417,33 +1391,33 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } if (__pyx_t_1) { - /* "_proj.pyx":98 + /* "_proj.pyx":136 * if projxyout.v == HUGE_VAL or\ * projxyout.u != projxyout.u: * if errcheck: # <<<<<<<<<<<<<< * raise RuntimeError('projection undefined') * latsdata[i] = 1.e30 */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_1) { - /* "_proj.pyx":99 + /* "_proj.pyx":137 * projxyout.u != projxyout.u: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * latsdata[i] = 1.e30 * else: */ - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_8), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_8), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L19; } __pyx_L19:; - /* "_proj.pyx":100 + /* "_proj.pyx":138 * if errcheck: * raise RuntimeError('projection undefined') * latsdata[i] = 1.e30 # <<<<<<<<<<<<<< @@ -1455,7 +1429,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ } /*else*/ { - /* "_proj.pyx":102 + /* "_proj.pyx":140 * latsdata[i] = 1.e30 * else: * latsdata[i] = projxyout.v # <<<<<<<<<<<<<< @@ -1482,7 +1456,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_ return __pyx_r; } -/* "_proj.pyx":104 +/* "_proj.pyx":142 * latsdata[i] = projxyout.v * * def _inv(self, object x, object y, radians=False, errcheck=False): # <<<<<<<<<<<<<< @@ -1517,7 +1491,6 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ Py_ssize_t __pyx_t_5; int __pyx_t_6; int __pyx_t_7; - double __pyx_t_8; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -1547,7 +1520,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y); if (likely(values[1])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_inv", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_inv", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: if (kw_args > 0) { @@ -1561,7 +1534,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_inv") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_inv") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { @@ -1580,14 +1553,14 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_inv", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_inv", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("_proj.Proj._inv", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - /* "_proj.pyx":118 + /* "_proj.pyx":156 * cdef double *xdatab, *ydatab * # if buffer api is supported, get pointer to data buffers. * if PyObject_AsWriteBuffer(x, &xdata, &buflenx) <> 0: # <<<<<<<<<<<<<< @@ -1597,7 +1570,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_x, (&__pyx_v_xdata), (&__pyx_v_buflenx)) != 0); if (__pyx_t_1) { - /* "_proj.pyx":119 + /* "_proj.pyx":157 * # if buffer api is supported, get pointer to data buffers. * if PyObject_AsWriteBuffer(x, &xdata, &buflenx) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -1605,12 +1578,12 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ * raise RuntimeError */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; - /* "_proj.pyx":120 + /* "_proj.pyx":158 * if PyObject_AsWriteBuffer(x, &xdata, &buflenx) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(y, &ydata, &bufleny) <> 0: # <<<<<<<<<<<<<< @@ -1620,7 +1593,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_y, (&__pyx_v_ydata), (&__pyx_v_bufleny)) != 0); if (__pyx_t_1) { - /* "_proj.pyx":121 + /* "_proj.pyx":159 * raise RuntimeError * if PyObject_AsWriteBuffer(y, &ydata, &bufleny) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -1628,12 +1601,12 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ * # (for numpy/regular python arrays). */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L7; } __pyx_L7:; - /* "_proj.pyx":124 + /* "_proj.pyx":162 * # process data in buffer * # (for numpy/regular python arrays). * if buflenx != bufleny: # <<<<<<<<<<<<<< @@ -1643,42 +1616,42 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_1 = (__pyx_v_buflenx != __pyx_v_bufleny); if (__pyx_t_1) { - /* "_proj.pyx":125 + /* "_proj.pyx":163 * # (for numpy/regular python arrays). * if buflenx != bufleny: * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< * ndim = buflenx//_doublesize * xdatab = xdata */ - __pyx_t_2 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_11), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_11), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L8; } __pyx_L8:; - /* "_proj.pyx":126 + /* "_proj.pyx":164 * if buflenx != bufleny: * raise RuntimeError("Buffer lengths not the same") * ndim = buflenx//_doublesize # <<<<<<<<<<<<<< * xdatab = xdata * ydatab = ydata */ - __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_buflenx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_buflenx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_FloorDivide(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyNumber_FloorDivide(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_ndim = __pyx_t_5; - /* "_proj.pyx":127 + /* "_proj.pyx":165 * raise RuntimeError("Buffer lengths not the same") * ndim = buflenx//_doublesize * xdatab = xdata # <<<<<<<<<<<<<< @@ -1687,7 +1660,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_xdatab = ((double *)__pyx_v_xdata); - /* "_proj.pyx":128 + /* "_proj.pyx":166 * ndim = buflenx//_doublesize * xdatab = xdata * ydatab = ydata # <<<<<<<<<<<<<< @@ -1696,7 +1669,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_ydatab = ((double *)__pyx_v_ydata); - /* "_proj.pyx":129 + /* "_proj.pyx":167 * xdatab = xdata * ydatab = ydata * for i from 0 <= i < ndim: # <<<<<<<<<<<<<< @@ -1706,7 +1679,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_5 = __pyx_v_ndim; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_5; __pyx_v_i++) { - /* "_proj.pyx":131 + /* "_proj.pyx":169 * for i from 0 <= i < ndim: * # if inputs are nan's, return big number. * if xdatab[i] != xdatab[i] or ydatab[i] != ydatab[i]: # <<<<<<<<<<<<<< @@ -1722,7 +1695,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ } if (__pyx_t_7) { - /* "_proj.pyx":132 + /* "_proj.pyx":170 * # if inputs are nan's, return big number. * if xdatab[i] != xdatab[i] or ydatab[i] != ydatab[i]: * xdatab[i]=1.e30; ydatab[i]=1.e30 # <<<<<<<<<<<<<< @@ -1732,33 +1705,33 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ (__pyx_v_xdatab[__pyx_v_i]) = 1.e30; (__pyx_v_ydatab[__pyx_v_i]) = 1.e30; - /* "_proj.pyx":133 + /* "_proj.pyx":171 * if xdatab[i] != xdatab[i] or ydatab[i] != ydatab[i]: * xdatab[i]=1.e30; ydatab[i]=1.e30 * if errcheck: # <<<<<<<<<<<<<< * raise RuntimeError('projection undefined') * continue */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_7) { - /* "_proj.pyx":134 + /* "_proj.pyx":172 * xdatab[i]=1.e30; ydatab[i]=1.e30 * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * continue * projxyin.u = xdatab[i] */ - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_12), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_12), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L12; } __pyx_L12:; - /* "_proj.pyx":135 + /* "_proj.pyx":173 * if errcheck: * raise RuntimeError('projection undefined') * continue # <<<<<<<<<<<<<< @@ -1770,7 +1743,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ } __pyx_L11:; - /* "_proj.pyx":136 + /* "_proj.pyx":174 * raise RuntimeError('projection undefined') * continue * projxyin.u = xdatab[i] # <<<<<<<<<<<<<< @@ -1779,7 +1752,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_projxyin.u = (__pyx_v_xdatab[__pyx_v_i]); - /* "_proj.pyx":137 + /* "_proj.pyx":175 * continue * projxyin.u = xdatab[i] * projxyin.v = ydatab[i] # <<<<<<<<<<<<<< @@ -1788,7 +1761,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_projxyin.v = (__pyx_v_ydatab[__pyx_v_i]); - /* "_proj.pyx":138 + /* "_proj.pyx":176 * projxyin.u = xdatab[i] * projxyin.v = ydatab[i] * projlonlatout = pj_inv(projxyin,self.projpj) # <<<<<<<<<<<<<< @@ -1797,17 +1770,17 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_projlonlatout = pj_inv(__pyx_v_projxyin, ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projpj); - /* "_proj.pyx":139 + /* "_proj.pyx":177 * projxyin.v = ydatab[i] * projlonlatout = pj_inv(projxyin,self.projpj) * if errcheck: # <<<<<<<<<<<<<< * err = pj_ctx_get_errno(self.projctx) * if err != 0: */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_7) { - /* "_proj.pyx":140 + /* "_proj.pyx":178 * projlonlatout = pj_inv(projxyin,self.projpj) * if errcheck: * err = pj_ctx_get_errno(self.projctx) # <<<<<<<<<<<<<< @@ -1816,7 +1789,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ */ __pyx_v_err = pj_ctx_get_errno(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projctx); - /* "_proj.pyx":141 + /* "_proj.pyx":179 * if errcheck: * err = pj_ctx_get_errno(self.projctx) * if err != 0: # <<<<<<<<<<<<<< @@ -1826,26 +1799,26 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_7 = (__pyx_v_err != 0); if (__pyx_t_7) { - /* "_proj.pyx":142 + /* "_proj.pyx":180 * err = pj_ctx_get_errno(self.projctx) * if err != 0: * raise RuntimeError(pj_strerrno(err)) # <<<<<<<<<<<<<< * # since HUGE_VAL can be 'inf', * # change it to a real (but very large) number. */ - __pyx_t_4 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_4)); __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L14; } __pyx_L14:; @@ -1853,7 +1826,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ } __pyx_L13:; - /* "_proj.pyx":146 + /* "_proj.pyx":184 * # change it to a real (but very large) number. * # also check for NaNs. * if projlonlatout.u == HUGE_VAL or \ # <<<<<<<<<<<<<< @@ -1863,7 +1836,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_7 = (__pyx_v_projlonlatout.u == HUGE_VAL); if (!__pyx_t_7) { - /* "_proj.pyx":147 + /* "_proj.pyx":185 * # also check for NaNs. * if projlonlatout.u == HUGE_VAL or \ * projlonlatout.u != projlonlatout.u: # <<<<<<<<<<<<<< @@ -1877,33 +1850,33 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ } if (__pyx_t_6) { - /* "_proj.pyx":148 + /* "_proj.pyx":186 * if projlonlatout.u == HUGE_VAL or \ * projlonlatout.u != projlonlatout.u: * if errcheck: # <<<<<<<<<<<<<< * raise RuntimeError('projection undefined') * xdatab[i] = 1.e30 */ - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_6) { - /* "_proj.pyx":149 + /* "_proj.pyx":187 * projlonlatout.u != projlonlatout.u: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * xdatab[i] = 1.e30 * elif radians: */ - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_13), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_13), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L16; } __pyx_L16:; - /* "_proj.pyx":150 + /* "_proj.pyx":188 * if errcheck: * raise RuntimeError('projection undefined') * xdatab[i] = 1.e30 # <<<<<<<<<<<<<< @@ -1914,17 +1887,17 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ goto __pyx_L15; } - /* "_proj.pyx":151 + /* "_proj.pyx":189 * raise RuntimeError('projection undefined') * xdatab[i] = 1.e30 * elif radians: # <<<<<<<<<<<<<< * xdatab[i] = projlonlatout.u * else: */ - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_6) { - /* "_proj.pyx":152 + /* "_proj.pyx":190 * xdatab[i] = 1.e30 * elif radians: * xdatab[i] = projlonlatout.u # <<<<<<<<<<<<<< @@ -1936,28 +1909,18 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ } /*else*/ { - /* "_proj.pyx":154 + /* "_proj.pyx":192 * xdatab[i] = projlonlatout.u * else: * xdatab[i] = _rad2dg*projlonlatout.u # <<<<<<<<<<<<<< * if projlonlatout.v == HUGE_VAL or \ * projlonlatout.v != projlonlatout.v: */ - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyFloat_FromDouble(__pyx_v_projlonlatout.u); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - (__pyx_v_xdatab[__pyx_v_i]) = __pyx_t_8; + (__pyx_v_xdatab[__pyx_v_i]) = (__pyx_v_5_proj__rad2dg * __pyx_v_projlonlatout.u); } __pyx_L15:; - /* "_proj.pyx":155 + /* "_proj.pyx":193 * else: * xdatab[i] = _rad2dg*projlonlatout.u * if projlonlatout.v == HUGE_VAL or \ # <<<<<<<<<<<<<< @@ -1967,7 +1930,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ __pyx_t_6 = (__pyx_v_projlonlatout.v == HUGE_VAL); if (!__pyx_t_6) { - /* "_proj.pyx":156 + /* "_proj.pyx":194 * xdatab[i] = _rad2dg*projlonlatout.u * if projlonlatout.v == HUGE_VAL or \ * projlonlatout.v != projlonlatout.v: # <<<<<<<<<<<<<< @@ -1981,33 +1944,33 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ } if (__pyx_t_1) { - /* "_proj.pyx":157 + /* "_proj.pyx":195 * if projlonlatout.v == HUGE_VAL or \ * projlonlatout.v != projlonlatout.v: * if errcheck: # <<<<<<<<<<<<<< * raise RuntimeError('projection undefined') * ydatab[i] = 1.e30 */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_errcheck); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_1) { - /* "_proj.pyx":158 + /* "_proj.pyx":196 * projlonlatout.v != projlonlatout.v: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * ydatab[i] = 1.e30 * elif radians: */ - __pyx_t_2 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_14), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_Raise(__pyx_t_2, 0, 0, 0); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_14), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L18; } __pyx_L18:; - /* "_proj.pyx":159 + /* "_proj.pyx":197 * if errcheck: * raise RuntimeError('projection undefined') * ydatab[i] = 1.e30 # <<<<<<<<<<<<<< @@ -2018,17 +1981,17 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ goto __pyx_L17; } - /* "_proj.pyx":160 + /* "_proj.pyx":198 * raise RuntimeError('projection undefined') * ydatab[i] = 1.e30 * elif radians: # <<<<<<<<<<<<<< * ydatab[i] = projlonlatout.v * else: */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_1) { - /* "_proj.pyx":161 + /* "_proj.pyx":199 * ydatab[i] = 1.e30 * elif radians: * ydatab[i] = projlonlatout.v # <<<<<<<<<<<<<< @@ -2040,24 +2003,14 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ } /*else*/ { - /* "_proj.pyx":163 + /* "_proj.pyx":201 * ydatab[i] = projlonlatout.v * else: * ydatab[i] = _rad2dg*projlonlatout.v # <<<<<<<<<<<<<< * * # def _fwdn(self, c_numpy.ndarray lonlat, radians=False, errcheck=False): */ - __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyFloat_FromDouble(__pyx_v_projlonlatout.v); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - (__pyx_v_ydatab[__pyx_v_i]) = __pyx_t_8; + (__pyx_v_ydatab[__pyx_v_i]) = (__pyx_v_5_proj__rad2dg * __pyx_v_projlonlatout.v); } __pyx_L17:; __pyx_L9_continue:; @@ -2077,7 +2030,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_ return __pyx_r; } -/* "_proj.pyx":242 +/* "_proj.pyx":280 * # llptr[i].v = _rad2dg*projlonlatout.v * * def is_latlong(self): # <<<<<<<<<<<<<< @@ -2096,7 +2049,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO int __pyx_clineno = 0; __Pyx_RefNannySetupContext("is_latlong"); - /* "_proj.pyx":245 + /* "_proj.pyx":283 * # returns True if projection in geographic (lon/lat) coordinates * cdef int i * i = pj_is_latlong(self.projpj) # <<<<<<<<<<<<<< @@ -2105,7 +2058,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO */ __pyx_v_i = pj_is_latlong(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projpj); - /* "_proj.pyx":246 + /* "_proj.pyx":284 * cdef int i * i = pj_is_latlong(self.projpj) * if i: # <<<<<<<<<<<<<< @@ -2114,7 +2067,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO */ if (__pyx_v_i) { - /* "_proj.pyx":247 + /* "_proj.pyx":285 * i = pj_is_latlong(self.projpj) * if i: * return True # <<<<<<<<<<<<<< @@ -2122,7 +2075,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO * return False */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; @@ -2131,7 +2084,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO } /*else*/ { - /* "_proj.pyx":249 + /* "_proj.pyx":287 * return True * else: * return False # <<<<<<<<<<<<<< @@ -2139,7 +2092,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO * def is_geocent(self): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; @@ -2159,7 +2112,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO return __pyx_r; } -/* "_proj.pyx":251 +/* "_proj.pyx":289 * return False * * def is_geocent(self): # <<<<<<<<<<<<<< @@ -2178,7 +2131,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHO int __pyx_clineno = 0; __Pyx_RefNannySetupContext("is_geocent"); - /* "_proj.pyx":254 + /* "_proj.pyx":292 * # returns True if projection in geocentric (x/y) coordinates * cdef int i * i = pj_is_geocent(self.projpj) # <<<<<<<<<<<<<< @@ -2187,7 +2140,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHO */ __pyx_v_i = pj_is_geocent(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projpj); - /* "_proj.pyx":255 + /* "_proj.pyx":293 * cdef int i * i = pj_is_geocent(self.projpj) * if i: # <<<<<<<<<<<<<< @@ -2196,7 +2149,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHO */ if (__pyx_v_i) { - /* "_proj.pyx":256 + /* "_proj.pyx":294 * i = pj_is_geocent(self.projpj) * if i: * return True # <<<<<<<<<<<<<< @@ -2204,7 +2157,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHO * return False */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; @@ -2213,7 +2166,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHO } /*else*/ { - /* "_proj.pyx":258 + /* "_proj.pyx":296 * return True * else: * return False # <<<<<<<<<<<<<< @@ -2221,7 +2174,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHO * def _transform(Proj p1, Proj p2, inx, iny, inz, radians): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; @@ -2241,7 +2194,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHO return __pyx_r; } -/* "_proj.pyx":16 +/* "_proj.pyx":54 * cdef projPJ projpj * cdef projCtx projctx * cdef public object proj_version # <<<<<<<<<<<<<< @@ -2298,7 +2251,7 @@ static int __pyx_pf_5_proj_4Proj_12proj_version_2__del__(PyObject *__pyx_v_self) return __pyx_r; } -/* "_proj.pyx":18 +/* "_proj.pyx":56 * cdef public object proj_version * cdef char *pjinitstring * cdef public object srs # <<<<<<<<<<<<<< @@ -2355,7 +2308,7 @@ static int __pyx_pf_5_proj_4Proj_3srs_2__del__(PyObject *__pyx_v_self) { return __pyx_r; } -/* "_proj.pyx":260 +/* "_proj.pyx":298 * return False * * def _transform(Proj p1, Proj p2, inx, iny, inz, radians): # <<<<<<<<<<<<<< @@ -2392,8 +2345,6 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p PyObject *__pyx_t_4 = NULL; int __pyx_t_5; Py_ssize_t __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - double __pyx_t_8; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -2424,35 +2375,35 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p2); if (likely(values[1])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 2: values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__inx); if (likely(values[2])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 3: values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__iny); if (likely(values[3])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 4: values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__inz); if (likely(values[4])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 5: values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__radians); if (likely(values[5])) kw_args--; else { - __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_transform") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "_transform") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } } else if (PyTuple_GET_SIZE(__pyx_args) != 6) { goto __pyx_L5_argtuple_error; @@ -2473,16 +2424,16 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("_proj._transform", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_p1), __pyx_ptype_5_proj_Proj, 1, "p1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_p2), __pyx_ptype_5_proj_Proj, 1, "p2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_p1), __pyx_ptype_5_proj_Proj, 1, "p1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_p2), __pyx_ptype_5_proj_Proj, 1, "p2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /* "_proj.pyx":266 + /* "_proj.pyx":304 * cdef Py_ssize_t buflenx, bufleny, buflenz, npts, i * cdef int err * if PyObject_AsWriteBuffer(inx, &xdata, &buflenx) <> 0: # <<<<<<<<<<<<<< @@ -2492,7 +2443,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_inx, (&__pyx_v_xdata), (&__pyx_v_buflenx)) != 0); if (__pyx_t_1) { - /* "_proj.pyx":267 + /* "_proj.pyx":305 * cdef int err * if PyObject_AsWriteBuffer(inx, &xdata, &buflenx) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -2500,12 +2451,12 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p * raise RuntimeError */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; - /* "_proj.pyx":268 + /* "_proj.pyx":306 * if PyObject_AsWriteBuffer(inx, &xdata, &buflenx) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(iny, &ydata, &bufleny) <> 0: # <<<<<<<<<<<<<< @@ -2515,7 +2466,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_iny, (&__pyx_v_ydata), (&__pyx_v_bufleny)) != 0); if (__pyx_t_1) { - /* "_proj.pyx":269 + /* "_proj.pyx":307 * raise RuntimeError * if PyObject_AsWriteBuffer(iny, &ydata, &bufleny) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -2523,12 +2474,12 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p * if PyObject_AsWriteBuffer(inz, &zdata, &buflenz) <> 0: */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L7; } __pyx_L7:; - /* "_proj.pyx":270 + /* "_proj.pyx":308 * if PyObject_AsWriteBuffer(iny, &ydata, &bufleny) <> 0: * raise RuntimeError * if inz is not None: # <<<<<<<<<<<<<< @@ -2538,7 +2489,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_1 = (__pyx_v_inz != Py_None); if (__pyx_t_1) { - /* "_proj.pyx":271 + /* "_proj.pyx":309 * raise RuntimeError * if inz is not None: * if PyObject_AsWriteBuffer(inz, &zdata, &buflenz) <> 0: # <<<<<<<<<<<<<< @@ -2548,7 +2499,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_inz, (&__pyx_v_zdata), (&__pyx_v_buflenz)) != 0); if (__pyx_t_1) { - /* "_proj.pyx":272 + /* "_proj.pyx":310 * if inz is not None: * if PyObject_AsWriteBuffer(inz, &zdata, &buflenz) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -2556,7 +2507,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p * buflenz = bufleny */ __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L9; } __pyx_L9:; @@ -2564,7 +2515,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } /*else*/ { - /* "_proj.pyx":274 + /* "_proj.pyx":312 * raise RuntimeError * else: * buflenz = bufleny # <<<<<<<<<<<<<< @@ -2575,7 +2526,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } __pyx_L8:; - /* "_proj.pyx":275 + /* "_proj.pyx":313 * else: * buflenz = bufleny * if not (buflenx == bufleny == buflenz): # <<<<<<<<<<<<<< @@ -2589,23 +2540,23 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { - /* "_proj.pyx":276 + /* "_proj.pyx":314 * buflenz = bufleny * if not (buflenx == bufleny == buflenz): * raise RuntimeError('x,y and z must be same size') # <<<<<<<<<<<<<< * xx = xdata * yy = ydata */ - __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_16), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_16), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L10; } __pyx_L10:; - /* "_proj.pyx":277 + /* "_proj.pyx":315 * if not (buflenx == bufleny == buflenz): * raise RuntimeError('x,y and z must be same size') * xx = xdata # <<<<<<<<<<<<<< @@ -2614,7 +2565,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p */ __pyx_v_xx = ((double *)__pyx_v_xdata); - /* "_proj.pyx":278 + /* "_proj.pyx":316 * raise RuntimeError('x,y and z must be same size') * xx = xdata * yy = ydata # <<<<<<<<<<<<<< @@ -2623,7 +2574,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p */ __pyx_v_yy = ((double *)__pyx_v_ydata); - /* "_proj.pyx":279 + /* "_proj.pyx":317 * xx = xdata * yy = ydata * if inz is not None: # <<<<<<<<<<<<<< @@ -2633,7 +2584,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_2 = (__pyx_v_inz != Py_None); if (__pyx_t_2) { - /* "_proj.pyx":280 + /* "_proj.pyx":318 * yy = ydata * if inz is not None: * zz = zdata # <<<<<<<<<<<<<< @@ -2645,7 +2596,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } __pyx_L11:; - /* "_proj.pyx":281 + /* "_proj.pyx":319 * if inz is not None: * zz = zdata * npts = buflenx/8 # <<<<<<<<<<<<<< @@ -2654,22 +2605,22 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p */ __pyx_v_npts = __Pyx_div_Py_ssize_t(__pyx_v_buflenx, 8); - /* "_proj.pyx":282 + /* "_proj.pyx":320 * zz = zdata * npts = buflenx/8 * if not radians and p1.is_latlong(): # <<<<<<<<<<<<<< * for i from 0 <= i < npts: * xx[i] = xx[i]*_dg2rad */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = (!__pyx_t_2); if (__pyx_t_1) { - __pyx_t_3 = PyObject_GetAttr(((PyObject *)__pyx_v_p1), __pyx_n_s__is_latlong); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyObject_GetAttr(((PyObject *)__pyx_v_p1), __pyx_n_s__is_latlong); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = __pyx_t_2; } else { @@ -2677,7 +2628,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } if (__pyx_t_5) { - /* "_proj.pyx":283 + /* "_proj.pyx":321 * npts = buflenx/8 * if not radians and p1.is_latlong(): * for i from 0 <= i < npts: # <<<<<<<<<<<<<< @@ -2687,49 +2638,29 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_6 = __pyx_v_npts; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) { - /* "_proj.pyx":284 + /* "_proj.pyx":322 * if not radians and p1.is_latlong(): * for i from 0 <= i < npts: * xx[i] = xx[i]*_dg2rad # <<<<<<<<<<<<<< * yy[i] = yy[i]*_dg2rad * if inz is not None: */ - __pyx_t_4 = PyFloat_FromDouble((__pyx_v_xx[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_7 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - (__pyx_v_xx[__pyx_v_i]) = __pyx_t_8; + (__pyx_v_xx[__pyx_v_i]) = ((__pyx_v_xx[__pyx_v_i]) * __pyx_v_5_proj__dg2rad); - /* "_proj.pyx":285 + /* "_proj.pyx":323 * for i from 0 <= i < npts: * xx[i] = xx[i]*_dg2rad * yy[i] = yy[i]*_dg2rad # <<<<<<<<<<<<<< * if inz is not None: * err = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, zz) */ - __pyx_t_7 = PyFloat_FromDouble((__pyx_v_yy[__pyx_v_i])); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_Multiply(__pyx_t_7, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - (__pyx_v_yy[__pyx_v_i]) = __pyx_t_8; + (__pyx_v_yy[__pyx_v_i]) = ((__pyx_v_yy[__pyx_v_i]) * __pyx_v_5_proj__dg2rad); } goto __pyx_L12; } __pyx_L12:; - /* "_proj.pyx":286 + /* "_proj.pyx":324 * xx[i] = xx[i]*_dg2rad * yy[i] = yy[i]*_dg2rad * if inz is not None: # <<<<<<<<<<<<<< @@ -2739,7 +2670,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_5 = (__pyx_v_inz != Py_None); if (__pyx_t_5) { - /* "_proj.pyx":287 + /* "_proj.pyx":325 * yy[i] = yy[i]*_dg2rad * if inz is not None: * err = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, zz) # <<<<<<<<<<<<<< @@ -2751,7 +2682,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } /*else*/ { - /* "_proj.pyx":289 + /* "_proj.pyx":327 * err = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, zz) * else: * err = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, NULL) # <<<<<<<<<<<<<< @@ -2762,7 +2693,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } __pyx_L15:; - /* "_proj.pyx":290 + /* "_proj.pyx":328 * else: * err = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, NULL) * if err != 0: # <<<<<<<<<<<<<< @@ -2772,46 +2703,46 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_5 = (__pyx_v_err != 0); if (__pyx_t_5) { - /* "_proj.pyx":291 + /* "_proj.pyx":329 * err = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, NULL) * if err != 0: * raise RuntimeError(pj_strerrno(err)) # <<<<<<<<<<<<<< * if not radians and p2.is_latlong(): * for i from 0 <= i < npts: */ - __pyx_t_4 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_4)); __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L16; } __pyx_L16:; - /* "_proj.pyx":292 + /* "_proj.pyx":330 * if err != 0: * raise RuntimeError(pj_strerrno(err)) * if not radians and p2.is_latlong(): # <<<<<<<<<<<<<< * for i from 0 <= i < npts: * xx[i] = xx[i]*_rad2dg */ - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_t_1 = (!__pyx_t_5); if (__pyx_t_1) { - __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_p2), __pyx_n_s__is_latlong); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_p2), __pyx_n_s__is_latlong); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_2 = __pyx_t_5; } else { @@ -2819,7 +2750,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p } if (__pyx_t_2) { - /* "_proj.pyx":293 + /* "_proj.pyx":331 * raise RuntimeError(pj_strerrno(err)) * if not radians and p2.is_latlong(): * for i from 0 <= i < npts: # <<<<<<<<<<<<<< @@ -2829,43 +2760,23 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_t_6 = __pyx_v_npts; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) { - /* "_proj.pyx":294 + /* "_proj.pyx":332 * if not radians and p2.is_latlong(): * for i from 0 <= i < npts: * xx[i] = xx[i]*_rad2dg # <<<<<<<<<<<<<< * yy[i] = yy[i]*_rad2dg * */ - __pyx_t_3 = PyFloat_FromDouble((__pyx_v_xx[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - (__pyx_v_xx[__pyx_v_i]) = __pyx_t_8; + (__pyx_v_xx[__pyx_v_i]) = ((__pyx_v_xx[__pyx_v_i]) * __pyx_v_5_proj__rad2dg); - /* "_proj.pyx":295 + /* "_proj.pyx":333 * for i from 0 <= i < npts: * xx[i] = xx[i]*_rad2dg * yy[i] = yy[i]*_rad2dg # <<<<<<<<<<<<<< * * cdef _strencode(pystr,encoding='ascii'): */ - __pyx_t_7 = PyFloat_FromDouble((__pyx_v_yy[__pyx_v_i])); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___rad2dg); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyNumber_Multiply(__pyx_t_7, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - (__pyx_v_yy[__pyx_v_i]) = __pyx_t_8; + (__pyx_v_yy[__pyx_v_i]) = ((__pyx_v_yy[__pyx_v_i]) * __pyx_v_5_proj__rad2dg); } goto __pyx_L17; } @@ -2876,7 +2787,6 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("_proj._transform", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -2885,7 +2795,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p return __pyx_r; } -/* "_proj.pyx":297 +/* "_proj.pyx":335 * yy[i] = yy[i]*_rad2dg * * cdef _strencode(pystr,encoding='ascii'): # <<<<<<<<<<<<<< @@ -2914,7 +2824,7 @@ static PyObject *__pyx_f_5_proj__strencode(PyObject *__pyx_v_pystr, struct __pyx } } - /* "_proj.pyx":299 + /* "_proj.pyx":337 * cdef _strencode(pystr,encoding='ascii'): * # encode a string into bytes. If already bytes, do nothing. * try: # <<<<<<<<<<<<<< @@ -2928,7 +2838,7 @@ static PyObject *__pyx_f_5_proj__strencode(PyObject *__pyx_v_pystr, struct __pyx __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "_proj.pyx":300 + /* "_proj.pyx":338 * # encode a string into bytes. If already bytes, do nothing. * try: * return pystr.encode(encoding) # <<<<<<<<<<<<<< @@ -2936,14 +2846,14 @@ static PyObject *__pyx_f_5_proj__strencode(PyObject *__pyx_v_pystr, struct __pyx * return pystr # already bytes? */ __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = PyObject_GetAttr(__pyx_v_pystr, __pyx_n_s__encode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_t_4 = PyObject_GetAttr(__pyx_v_pystr, __pyx_n_s__encode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_5)); __Pyx_INCREF(__pyx_v_encoding); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_encoding); __Pyx_GIVEREF(__pyx_v_encoding); - __pyx_t_6 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_t_6 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; @@ -2966,7 +2876,7 @@ static PyObject *__pyx_f_5_proj__strencode(PyObject *__pyx_v_pystr, struct __pyx __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "_proj.pyx":301 + /* "_proj.pyx":339 * try: * return pystr.encode(encoding) * except AttributeError: # <<<<<<<<<<<<<< @@ -2975,12 +2885,12 @@ static PyObject *__pyx_f_5_proj__strencode(PyObject *__pyx_v_pystr, struct __pyx __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError); if (__pyx_t_7) { __Pyx_AddTraceback("_proj._strencode", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} + if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} __Pyx_GOTREF(__pyx_t_6); __Pyx_GOTREF(__pyx_t_5); __Pyx_GOTREF(__pyx_t_4); - /* "_proj.pyx":302 + /* "_proj.pyx":340 * return pystr.encode(encoding) * except AttributeError: * return pystr # already bytes? # <<<<<<<<<<<<<< @@ -3308,10 +3218,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1}, {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1}, {&__pyx_n_s____version__, __pyx_k____version__, sizeof(__pyx_k____version__), 0, 0, 1, 1}, - {&__pyx_n_s___dg2rad, __pyx_k___dg2rad, sizeof(__pyx_k___dg2rad), 0, 0, 1, 1}, {&__pyx_n_s___doublesize, __pyx_k___doublesize, sizeof(__pyx_k___doublesize), 0, 0, 1, 1}, {&__pyx_n_s___proj, __pyx_k___proj, sizeof(__pyx_k___proj), 0, 0, 1, 1}, - {&__pyx_n_s___rad2dg, __pyx_k___rad2dg, sizeof(__pyx_k___rad2dg), 0, 0, 1, 1}, {&__pyx_n_s___transform, __pyx_k___transform, sizeof(__pyx_k___transform), 0, 0, 1, 1}, {&__pyx_n_s__ascii, __pyx_k__ascii, sizeof(__pyx_k__ascii), 0, 0, 1, 1}, {&__pyx_n_s__degrees, __pyx_k__degrees, sizeof(__pyx_k__degrees), 0, 0, 1, 1}, @@ -3334,8 +3242,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {0, 0, 0, 0, 0, 0, 0} }; static int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_AttributeError = __Pyx_GetName(__pyx_b, __pyx_n_s__AttributeError); if (!__pyx_builtin_AttributeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_builtin_AttributeError = __Pyx_GetName(__pyx_b, __pyx_n_s__AttributeError); if (!__pyx_builtin_AttributeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;} return 0; __pyx_L1_error:; return -1; @@ -3345,126 +3253,126 @@ static int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants"); - /* "_proj.pyx":64 + /* "_proj.pyx":102 * # process data in buffer * if buflenx != bufleny: * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< * ndim = buflenx//_doublesize * lonsdata = londata */ - __pyx_k_tuple_4 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_4 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_4)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_3)); PyTuple_SET_ITEM(__pyx_k_tuple_4, 0, ((PyObject *)__pyx_kp_s_3)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_3)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_4)); - /* "_proj.pyx":73 + /* "_proj.pyx":111 * lonsdata[i]=1.e30; latsdata[i]=1.e30 * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * continue * if radians: */ - __pyx_k_tuple_6 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_6 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_6)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_5)); PyTuple_SET_ITEM(__pyx_k_tuple_6, 0, ((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_6)); - /* "_proj.pyx":92 + /* "_proj.pyx":130 * projxyout.u != projxyout.u: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * lonsdata[i] = 1.e30 * else: */ - __pyx_k_tuple_7 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_7 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_7)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_5)); PyTuple_SET_ITEM(__pyx_k_tuple_7, 0, ((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_7)); - /* "_proj.pyx":99 + /* "_proj.pyx":137 * projxyout.u != projxyout.u: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * latsdata[i] = 1.e30 * else: */ - __pyx_k_tuple_8 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_8 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_8)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_5)); PyTuple_SET_ITEM(__pyx_k_tuple_8, 0, ((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_8)); - /* "_proj.pyx":125 + /* "_proj.pyx":163 * # (for numpy/regular python arrays). * if buflenx != bufleny: * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< * ndim = buflenx//_doublesize * xdatab = xdata */ - __pyx_k_tuple_11 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_11 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_11)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_3)); PyTuple_SET_ITEM(__pyx_k_tuple_11, 0, ((PyObject *)__pyx_kp_s_3)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_3)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_11)); - /* "_proj.pyx":134 + /* "_proj.pyx":172 * xdatab[i]=1.e30; ydatab[i]=1.e30 * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * continue * projxyin.u = xdatab[i] */ - __pyx_k_tuple_12 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_12 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_12)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_5)); PyTuple_SET_ITEM(__pyx_k_tuple_12, 0, ((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_12)); - /* "_proj.pyx":149 + /* "_proj.pyx":187 * projlonlatout.u != projlonlatout.u: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * xdatab[i] = 1.e30 * elif radians: */ - __pyx_k_tuple_13 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_13 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_13)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_5)); PyTuple_SET_ITEM(__pyx_k_tuple_13, 0, ((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_13)); - /* "_proj.pyx":158 + /* "_proj.pyx":196 * projlonlatout.v != projlonlatout.v: * if errcheck: * raise RuntimeError('projection undefined') # <<<<<<<<<<<<<< * ydatab[i] = 1.e30 * elif radians: */ - __pyx_k_tuple_14 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_14 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_14)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_5)); PyTuple_SET_ITEM(__pyx_k_tuple_14, 0, ((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_5)); __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_14)); - /* "_proj.pyx":276 + /* "_proj.pyx":314 * buflenz = bufleny * if not (buflenx == bufleny == buflenz): * raise RuntimeError('x,y and z must be same size') # <<<<<<<<<<<<<< * xx = xdata * yy = ydata */ - __pyx_k_tuple_16 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_k_tuple_16 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_k_tuple_16)); __Pyx_INCREF(((PyObject *)__pyx_kp_s_15)); PyTuple_SET_ITEM(__pyx_k_tuple_16, 0, ((PyObject *)__pyx_kp_s_15)); @@ -3495,6 +3403,7 @@ PyMODINIT_FUNC PyInit__proj(void) PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; + double __pyx_t_4; __Pyx_RefNannyDeclarations #if CYTHON_REFNANNY __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); @@ -3545,161 +3454,165 @@ PyMODINIT_FUNC PyInit__proj(void) /*--- Variable export code ---*/ /*--- Function export code ---*/ /*--- Type init code ---*/ - if (PyType_Ready(&__pyx_type_5_proj_Proj) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__Pyx_SetAttrString(__pyx_m, "Proj", (PyObject *)&__pyx_type_5_proj_Proj) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyType_Ready(&__pyx_type_5_proj_Proj) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (__Pyx_SetAttrString(__pyx_m, "Proj", (PyObject *)&__pyx_type_5_proj_Proj) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __pyx_ptype_5_proj_Proj = &__pyx_type_5_proj_Proj; /*--- Type import code ---*/ /*--- Variable import code ---*/ /*--- Function import code ---*/ /*--- Execution code ---*/ - /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":1 + /* "_proj.pyx":4 + * #c_numpy.import_array() + * * import math # <<<<<<<<<<<<<< * - * _dg2rad = math.radians(1.) + * cdef double _dg2rad, _rad2dg */ - __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__math), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__math), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetAttr(__pyx_m, __pyx_n_s__math, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_s__math, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":3 - * import math + /* "_proj.pyx":8 + * cdef double _dg2rad, _rad2dg * * _dg2rad = math.radians(1.) # <<<<<<<<<<<<<< * _rad2dg = math.degrees(1.) * _doublesize = sizeof(double) */ - __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__math); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__math); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__radians); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__radians); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyFloat_FromDouble(1.); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyFloat_FromDouble(1.); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_s___dg2rad, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_5_proj__dg2rad = __pyx_t_4; - /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":4 + /* "_proj.pyx":9 * * _dg2rad = math.radians(1.) * _rad2dg = math.degrees(1.) # <<<<<<<<<<<<<< * _doublesize = sizeof(double) * __version__ = "1.9.0" */ - __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__math); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__math); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__degrees); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__degrees); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyFloat_FromDouble(1.); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyFloat_FromDouble(1.); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_2)); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_s___rad2dg, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_5_proj__rad2dg = __pyx_t_4; - /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":5 + /* "_proj.pyx":10 * _dg2rad = math.radians(1.) * _rad2dg = math.degrees(1.) * _doublesize = sizeof(double) # <<<<<<<<<<<<<< * __version__ = "1.9.0" * */ - __pyx_t_1 = __Pyx_PyInt_FromSize_t((sizeof(double))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyInt_FromSize_t((sizeof(double))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetAttr(__pyx_m, __pyx_n_s___doublesize, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_s___doublesize, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":6 + /* "_proj.pyx":11 * _rad2dg = math.degrees(1.) * _doublesize = sizeof(double) * __version__ = "1.9.0" # <<<<<<<<<<<<<< * - * cdef extern from "stdlib.h": + * cdef extern from "math.h": */ - if (PyObject_SetAttr(__pyx_m, __pyx_n_s____version__, ((PyObject *)__pyx_kp_s_17)) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_s____version__, ((PyObject *)__pyx_kp_s_17)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /* "_proj.pyx":7 - * #c_numpy.import_array() + /* "_proj.pyx":45 + * int PyObject_AsWriteBuffer(object, void **rbuf, Py_ssize_t *len) * * def set_datapath(datapath): # <<<<<<<<<<<<<< * cdef char *searchpath * bytestr = _strencode(datapath) */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5_proj_set_datapath, NULL, __pyx_n_s___proj); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5_proj_set_datapath, NULL, __pyx_n_s___proj); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetAttr(__pyx_m, __pyx_n_s__set_datapath, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_s__set_datapath, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_proj.pyx":43 + /* "_proj.pyx":81 * return (self.__class__,(self.srs,)) * * def _fwd(self, object lons, object lats, radians=False, errcheck=False): # <<<<<<<<<<<<<< * """ * forward transformation - lons,lats to x,y (done in place). */ - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_1 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_2 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_proj.pyx":104 + /* "_proj.pyx":142 * latsdata[i] = projxyout.v * * def _inv(self, object x, object y, radians=False, errcheck=False): # <<<<<<<<<<<<<< * """ * inverse transformation - x,y to lons,lats (done in place). */ - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_9 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_k_10 = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_proj.pyx":260 + /* "_proj.pyx":298 * return False * * def _transform(Proj p1, Proj p2, inx, iny, inz, radians): # <<<<<<<<<<<<<< * # private function to call pj_transform * cdef void *xdata, *ydata, *zdata */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5_proj_1_transform, NULL, __pyx_n_s___proj); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5_proj_1_transform, NULL, __pyx_n_s___proj); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetAttr(__pyx_m, __pyx_n_s___transform, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyObject_SetAttr(__pyx_m, __pyx_n_s___transform, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "_proj.pyx":1 - * # Make changes to this file, not the c-wrappers that Pyrex generates. # <<<<<<<<<<<<<< + * #cimport c_numpy # <<<<<<<<<<<<<< + * #c_numpy.import_array() * - * include "_pyproj.pxi" */ __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_1)); diff --git a/src/_proj.pyx b/src/_proj.pyx index 96a2aaac0..baecb4809 100644 --- a/src/_proj.pyx +++ b/src/_proj.pyx @@ -1,15 +1,53 @@ -# Make changes to this file, not the c-wrappers that Pyrex generates. - -include "_pyproj.pxi" #cimport c_numpy #c_numpy.import_array() +import math + +cdef double _dg2rad, _rad2dg + +_dg2rad = math.radians(1.) +_rad2dg = math.degrees(1.) +_doublesize = sizeof(double) +__version__ = "1.9.0" + +cdef extern from "math.h": + cdef enum: + HUGE_VAL + FP_NAN + +cdef extern from "proj_api.h": + ctypedef struct projUV: + double u + double v + ctypedef void *projPJ + ctypedef void *projCtx + projPJ pj_init_plus(char *) + projPJ pj_init_plus_ctx(projCtx, char *) + projUV pj_fwd(projUV, projPJ) + projUV pj_inv(projUV, projPJ) + int pj_transform(projPJ src, projPJ dst, long point_count, int point_offset, + double *x, double *y, double *z) + int pj_is_latlong(projPJ) + int pj_is_geocent(projPJ) + char *pj_strerrno(int) + void pj_ctx_free( projCtx ) + int pj_ctx_get_errno( projCtx ) + projCtx pj_ctx_alloc() + projCtx pj_get_default_ctx() + void pj_free(projPJ) + void pj_set_searchpath ( int count, char **path ) + cdef enum: + PJ_VERSION + +cdef extern from "Python.h": + int PyObject_AsWriteBuffer(object, void **rbuf, Py_ssize_t *len) + def set_datapath(datapath): cdef char *searchpath bytestr = _strencode(datapath) searchpath = bytestr pj_set_searchpath(1, &searchpath) - + cdef class Proj: cdef projPJ projpj cdef projCtx projctx diff --git a/src/_pyproj.pxi b/src/_pyproj.pxi deleted file mode 100644 index 96580a40e..000000000 --- a/src/_pyproj.pxi +++ /dev/null @@ -1,64 +0,0 @@ -import math - -_dg2rad = math.radians(1.) -_rad2dg = math.degrees(1.) -_doublesize = sizeof(double) -__version__ = "1.9.0" - -cdef extern from "stdlib.h": - ctypedef long size_t - void *malloc(size_t size) - void free(void *ptr) - -cdef extern from "math.h": - cdef enum: - HUGE_VAL - FP_NAN - -cdef extern from "geodesic.h": - ctypedef struct projUV: - double u - double v - ctypedef struct GEODESIC_T: - double A - projUV p1, p2 - double ALPHA12 - double ALPHA21 - double DIST - double ONEF, FLAT, FLAT2, FLAT4, FLAT64 - int ELLIPSE - double FR_METER, TO_METER, del_alpha - int n_alpha, n_S - double th1,costh1,sinth1,sina12,cosa12,M,N,c1,c2,D,P,s1 - int merid, signS - GEODESIC_T *GEOD_init_plus(char *args, GEODESIC_T *g) - void geod_for(GEODESIC_T *g) - void geod_pre(GEODESIC_T *g) - int geod_inv(GEODESIC_T *g) - -cdef extern from "proj_api.h": - ctypedef void *projPJ - ctypedef void *projCtx - projPJ pj_init_plus(char *) - projPJ pj_init_plus_ctx(projCtx, char *) - projUV pj_fwd(projUV, projPJ) - projUV pj_inv(projUV, projPJ) - int pj_transform(projPJ src, projPJ dst, long point_count, int point_offset, - double *x, double *y, double *z) - int pj_is_latlong(projPJ) - int pj_is_geocent(projPJ) - char *pj_strerrno(int) - void pj_ctx_free( projCtx ) - int pj_ctx_get_errno( projCtx ) - projCtx pj_ctx_alloc() - projCtx pj_get_default_ctx() - void pj_free(projPJ) - void pj_set_searchpath ( int count, char **path ) - cdef enum: - PJ_VERSION - -#cdef extern from "pycompat.h": -# ctypedef int Py_ssize_t - -cdef extern from "Python.h": - int PyObject_AsWriteBuffer(object, void **rbuf, Py_ssize_t *len)