[python-pyproj] 01/34: Imported Upstream version 1.9.3

Sebastiaan Couwenberg sebastic at moszumanska.debian.org
Sun Mar 1 03:36:58 UTC 2015


This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to branch master
in repository python-pyproj.

commit 4e63545f9f3714c0d9704d2e80c36db9cf9aee6e
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Sun Apr 6 14:23:32 2014 +0200

    Imported Upstream version 1.9.3
---
 Changelog                         |   23 +-
 LICENSE_geographiclib             |    3 +
 MANIFEST.in                       |    9 +-
 PKG-INFO                          |    6 +-
 README                            |  450 +--
 README.html                       |  482 ---
 _geod.c                           | 4298 --------------------------
 _geod.pyx                         |  175 --
 _proj.c                           | 5563 +++++++++++++++++++++++++---------
 _proj.pyx                         |  262 +-
 _pyproj.pxi                       |   59 -
 create_docs.sh                    |    2 +
 docs/api-objects.txt              |   21 +
 docs/class-tree.html              |  120 +
 docs/crarr.png                    |  Bin 0 -> 340 bytes
 docs/epydoc.css                   |  322 ++
 docs/epydoc.js                    |  293 ++
 docs/help.html                    |  262 ++
 docs/identifier-index.html        |  228 ++
 docs/index.html                   |  440 +++
 docs/module-tree.html             |  100 +
 docs/pyproj-module.html           |  440 +++
 docs/pyproj-pysrc.html            |  969 ++++++
 docs/pyproj.Geod-class.html       |  529 ++++
 docs/pyproj.Proj-class.html       |  417 +++
 docs/redirect.html                |   38 +
 lib/pyproj/__init__.py            |  503 +++-
 lib/pyproj/data/FL                |  Bin 8840 -> 0 bytes
 lib/pyproj/data/IGNF              |  422 +--
 lib/pyproj/data/MD                |  Bin 3528 -> 0 bytes
 lib/pyproj/data/TN                |  Bin 4392 -> 0 bytes
 lib/pyproj/data/WI                |  Bin 6728 -> 0 bytes
 lib/pyproj/data/WO                |  Bin 11080 -> 0 bytes
 lib/pyproj/data/alaska            |  Bin 1053896 -> 0 bytes
 lib/pyproj/data/conus             |  Bin 264392 -> 0 bytes
 lib/pyproj/data/epsg              | 6005 +++++++++++++++++++++----------------
 lib/pyproj/data/esri.extra        |    4 -
 lib/pyproj/data/hawaii            |  Bin 451976 -> 0 bytes
 lib/pyproj/data/null              |  Bin 200 -> 0 bytes
 lib/pyproj/data/other.extra       |    4 +
 lib/pyproj/data/proj_outIGNF.dist |   26 +-
 lib/pyproj/data/prvi              |  Bin 26696 -> 0 bytes
 lib/pyproj/data/stgeorge          |  Bin 59176 -> 0 bytes
 lib/pyproj/data/stlrnc            |  Bin 26696 -> 0 bytes
 lib/pyproj/data/stpaul            |  Bin 7016 -> 0 bytes
 lib/pyproj/data/td_out.dist       |   11 +
 lib/pyproj/data/test27            |   13 +-
 lib/pyproj/data/test83            |   13 +-
 lib/pyproj/data/testIGNF          |   19 +-
 lib/pyproj/data/testdatumfile     |   38 +-
 lib/pyproj/data/testntv2          |   13 +-
 lib/pyproj/data/testvarious       |  284 +-
 lib/pyproj/data/tv_out.dist       |  153 +-
 lib/pyproj/datadir.py             |    6 +
 nad2bin.c                         |  415 ++-
 setup-proj.py                     |   59 +
 setup.py                          |    9 +-
 setupegg.py                       |    6 -
 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                     |   78 +-
 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                  |  703 +++++
 src/PJ_igh.c                      |  190 ++
 src/PJ_imw_p.c                    |   12 +-
 src/PJ_isea.c                     | 1134 +++++++
 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_natearth.c                 |   77 +
 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                    |  278 +-
 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                  |   10 +-
 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/aasincos.c                    |   12 +-
 src/biveval.c                     |  128 +-
 src/dmstor.c                      |    9 +-
 src/emess.h                       |    4 -
 src/geod.c                        |  245 --
 src/geod_for.c                    |  110 -
 src/geod_interface.c              |   34 +
 src/geod_interface.h              |   45 +
 src/geod_inv.c                    |   59 -
 src/geod_set.c                    |  123 +-
 src/geodesic.c                    | 1461 +++++++++
 src/geodesic.h                    |  231 +-
 src/hypot.c                       |   36 +
 src/mk_cheby.c                    |   12 +-
 src/nad_init.c                    |  175 +-
 src/org_proj4_PJ.h                |  135 +
 src/pj_apply_gridshift.c          |  170 +-
 src/pj_apply_vgridshift.c         |  208 ++
 src/pj_auth.c                     |   14 +-
 src/pj_ctx.c                      |  179 ++
 src/pj_datum_set.c                |   29 +-
 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_gc_reader.c                |  221 ++
 src/pj_gridcatalog.c              |  282 ++
 src/pj_gridinfo.c                 |  330 +-
 src/pj_gridlist.c                 |  110 +-
 src/pj_init.c                     |  611 ++--
 src/pj_initcache.c                |  124 +-
 src/pj_inv.c                      |    8 +-
 src/pj_list.c                     |    2 +-
 src/pj_list.h                     |    6 +
 src/{PJ_aitoff.c => pj_log.c}     |   85 +-
 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_release.c                  |    2 +-
 src/pj_strerrno.c                 |    7 +-
 src/pj_transform.c                |  316 +-
 src/pj_utils.c                    |   77 +-
 src/proj_api.h                    |   32 +-
 src/proj_etmerc.c                 |  252 ++
 src/proj_mdist.c                  |    6 +-
 src/proj_rouss.c                  |    4 +-
 src/projects.h                    |  169 +-
 src/vector1.c                     |    2 +-
 test/geodtest.py                  |   27 +-
 test/test_datum.py                |   13 +-
 171 files changed, 21083 insertions(+), 11669 deletions(-)

diff --git a/Changelog b/Changelog
index 3ddbb48..9290df0 100644
--- a/Changelog
+++ b/Changelog
@@ -1,4 +1,25 @@
-changes since 1.8.8
+1.9.3 (svn revision 327)
+ * Geod now uses C code adapted from geographiclib now included in proj4 source,
+   instead of pure python code directly from geographiclib.
+ * make radians=True work with Geod.npts (issue 47).
+ * allow PROJ_DIR env var to control location of proj data (issue 40).
+1.9.2 (svn revision 301)
+ * updated proj4 src to 4.8.0 - includes two new map projections (natearth and
+   isea).
+1.9.1 (svn revision 285)
+ * restore compatibility with python 2.4/2.5, which was broken by the addition
+   of the geographiclib geodesic module (issue 36).
+1.9.0 (svn revision 282)
+ * use pure python geographiclib for geodesic computation codes instead of
+ proj4.
+ * don't use global variable pj_errno for return codes, use pj_ctx_get_errno
+   instead.
+ * use new projCtx structure for thread safety in proj lib.
+ * update C source and data from proj4 svn (r2140).
+ * add pj_list and pj_ellps module level variables (a dict mapping short
+   names to longer descriptions, e.g. 
+   pyproj.pj_list['aea'] = 'Albers Equal Area').
+1.8.9 (svn revision 222)
  * Python 3 now supported.
  * allow 'EPSG' init (as well as 'epsg'). This only worked on case-insensitive
    filesystems previously. Fixes issue 6.
diff --git a/LICENSE_geographiclib b/LICENSE_geographiclib
new file mode 100644
index 0000000..abd09e5
--- /dev/null
+++ b/LICENSE_geographiclib
@@ -0,0 +1,3 @@
+ Copyright (c) Charles Karney (2011) <charles at karney.com> and licensed
+ under the MIT/X11 License.  For more information, see
+ http://geographiclib.sourceforge.net/
diff --git a/MANIFEST.in b/MANIFEST.in
index 6d6c205..05ebe62 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,17 +1,15 @@
 include README
-include README.html
 include MANIFEST.in
 include LICENSE_proj4
+include LICENSE_geographiclib
 include Changelog
-include setupegg.py
+include create_docs.sh
 include _proj.pyx
-include _geod.pyx
 include _proj.c
-include _geod.c
-include _pyproj.pxi
 include nad2bin.c
 include src/*.c
 include src/*.h
+include setup-proj.py
 include lib/pyproj/*py
 include lib/pyproj/data/*
 include datumgrid/*.lla
@@ -22,3 +20,4 @@ include test/datum_shift.py
 include test/test_transform.py
 include test/geodtest.py
 include test/test_datum.py
+recursive-include docs *
diff --git a/PKG-INFO b/PKG-INFO
index a23a72f..e6904d5 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,11 +1,11 @@
-Metadata-Version: 1.0
+Metadata-Version: 1.1
 Name: pyproj
-Version: 1.8.9
+Version: 1.9.3
 Summary: Python interface to PROJ.4 library
 Home-page: http://code.google.com/p/pyproj
 Author: Jeff Whitaker
 Author-email: jeffrey.s.whitaker at noaa.gov
-License: ['OSI Approved']
+License: OSI Approved
 Download-URL: http://python.org/pypi/pyproj
 Description: 
         Performs cartographic transformations between geographic (lat/lon)
diff --git a/README b/README
index d7a16b6..7ced097 100644
--- a/README
+++ b/README
@@ -1,447 +1,11 @@
-Help on package pyproj:
+To install:
 
-NAME
-    pyproj
+python setup.py build
+python setup.py install
 
-DESCRIPTION
-    Pyrex wrapper to provide python interfaces to
-    PROJ.4 (http://proj.maptools.org) functions.
-    
-    Performs cartographic transformations and geodetic computations.
-    
-    The Proj class can convert from geographic (longitude,latitude)
-    to native map projection (x,y) coordinates and vice versa, or
-    from one map projection coordinate system directly to another.
-    
-    The Geod class can perform forward and inverse geodetic, or
-    Great Circle, computations.  The forward computation involves
-    determining latitude, longitude and back azimuth of a terminus
-    point given the latitude and longitude of an initial point, plus
-    azimuth and distance. The inverse computation involves
-    determining the forward and back azimuths and distance given the
-    latitudes and longitudes of an initial and terminus point.
-    
-    Input coordinates can be given as python arrays, lists/tuples,
-    scalars or numpy/Numeric/numarray arrays. Optimized for objects
-    that support the Python buffer protocol (regular python and
-    numpy array objects).
-    
-    Download: http://code.google.com/p/pyproj/downloads/list
-    
-    Requirements: python 2.4 or higher.
-    
-    Example scripts are in 'test' subdirectory of source distribution.
-    The 'test()' function will run the examples in the docstrings.
-    
-    Contact:  Jeffrey Whitaker <jeffrey.s.whitaker at noaa.gov
-    
-    copyright (c) 2006 by Jeffrey Whitaker.
-    
-    Permission to use, copy, modify, and distribute this software
-    and its documentation for any purpose and without fee is hereby
-    granted, provided that the above copyright notice appear in all
-    copies and that both the copyright notice and this permission
-    notice appear in supporting documentation. THE AUTHOR DISCLAIMS
-    ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT
-    SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-    CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-    NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-    CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+To use installed proj lib (and data files), use setup-proj.py instead
+and set PROJ_DIR env var to point to location of proj installation.
 
-PACKAGE CONTENTS
-    _geod
-    _proj
+Docs at http://pyproj.googlecode.com/svn/trunk/docs/index.html
 
-CLASSES
-    _geod.Geod(__builtin__.object)
-        Geod
-    _proj.Proj(__builtin__.object)
-        Proj
-    
-    class Geod(_geod.Geod)
-     |  performs forward and inverse geodetic, or Great Circle,
-     |  computations.  The forward computation (using the 'fwd' method)
-     |  involves determining latitude, longitude and back azimuth of a
-     |  terminus point given the latitude and longitude of an initial
-     |  point, plus azimuth and distance. The inverse computation (using
-     |  the 'inv' method) involves determining the forward and back
-     |  azimuths and distance given the latitudes and longitudes of an
-     |  initial and terminus point.
-     |  
-     |  Method resolution order:
-     |      Geod
-     |      _geod.Geod
-     |      __builtin__.object
-     |  
-     |  Methods defined here:
-     |  
-     |  fwd(self, lons, lats, az, dist, radians=False)
-     |      forward transformation - Returns longitudes, latitudes and back
-     |      azimuths of terminus points given longitudes (lons) and
-     |      latitudes (lats) of initial points, plus forward azimuths (az)
-     |      and distances (dist).
-     |      
-     |      Works with numpy and regular python array objects, python
-     |      sequences and scalars.
-     |      
-     |      if radians=True, lons/lats and azimuths are radians instead of
-     |      degrees. Distances are in meters.
-     |  
-     |  inv(self, lons1, lats1, lons2, lats2, radians=False)
-     |      inverse transformation - Returns forward and back azimuths, plus
-     |      distances between initial points (specified by lons1, lats1) and
-     |      terminus points (specified by lons2, lats2).
-     |      
-     |      Works with numpy and regular python array objects, python
-     |      sequences and scalars.
-     |      
-     |      if radians=True, lons/lats and azimuths are radians instead of
-     |      degrees. Distances are in meters.
-     |  
-     |  npts(self, lon1, lat1, lon2, lat2, npts, radians=False)
-     |      Given a single initial point and terminus point (specified by
-     |      python floats lon1,lat1 and lon2,lat2), returns a list of
-     |      longitude/latitude pairs describing npts equally spaced
-     |      intermediate points along the geodesic between the initial and
-     |      terminus points.
-     |      
-     |      if radians=True, lons/lats are radians instead of degrees.
-     |      
-     |      Example usage:
-     |      
-     |      >>> from pyproj import Geod
-     |      >>> g = Geod(ellps='clrk66') # Use Clarke 1966 ellipsoid.
-     |      >>> # specify the lat/lons of Boston and Portland.
-     |      >>> boston_lat = 42.+(15./60.); boston_lon = -71.-(7./60.)
-     |      >>> portland_lat = 45.+(31./60.); portland_lon = -123.-(41./60.)
-     |      >>> # find ten equally spaced points between Boston and Portland.
-     |      >>> lonlats = g.npts(boston_lon,boston_lat,portland_lon,portland_lat,10)
-     |      >>> for lon,lat in lonlats: print '%6.3f  %7.3f' % (lat, lon)
-     |      43.528  -75.414
-     |      44.637  -79.883
-     |      45.565  -84.512
-     |      46.299  -89.279
-     |      46.830  -94.156
-     |      47.149  -99.112
-     |      47.251  -104.106
-     |      47.136  -109.100
-     |      46.805  -114.051
-     |      46.262  -118.924
-     |  
-     |  ----------------------------------------------------------------------
-     |  Static methods defined here:
-     |  
-     |  __new__(self, initparams=None, **kwargs)
-     |      initialize a Geod class instance.
-     |      
-     |      Geodetic parameters for specifying the ellipsoid or sphere to
-     |      use must either be given in a dictionary 'initparams' or as
-     |      keyword arguments. Following is a list of the ellipsoids that
-     |      may be defined using the 'ellps' keyword:
-     |      
-     |         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 (r=6370997)
-     |      
-     |      The parameters of the ellipsoid may also be set directly using
-     |      the 'a' (semi-major or equatorial axis radius) keyword, and
-     |      any one of the following keywords: 'b' (semi-minor,
-     |      or polar axis radius), 'e' (eccentricity), 'es' (eccentricity
-     |      squared), 'f' (flattening), or 'rf' (reciprocal flattening).
-     |      
-     |      See the proj documentation (http://proj.maptools.org) for more
-     |      information about specifying ellipsoid parameters (specifically,
-     |      the chapter 'Specifying the Earth's figure' in the main Proj
-     |      users manual).
-     |      
-     |      Example usage:
-     |      
-     |      >>> from pyproj import Geod
-     |      >>> g = Geod(ellps='clrk66') # Use Clarke 1966 ellipsoid.
-     |      >>> # specify the lat/lons of some cities.
-     |      >>> boston_lat = 42.+(15./60.); boston_lon = -71.-(7./60.)
-     |      >>> portland_lat = 45.+(31./60.); portland_lon = -123.-(41./60.)
-     |      >>> newyork_lat = 40.+(47./60.); newyork_lon = -73.-(58./60.)
-     |      >>> london_lat = 51.+(32./60.); london_lon = -(5./60.)
-     |      >>> # compute forward and back azimuths, plus distance
-     |      >>> # between Boston and Portland.
-     |      >>> az12,az21,dist = g.inv(boston_lon,boston_lat,portland_lon,portland_lat)
-     |      >>> print "%7.3f %6.3f %12.3f" % (az12,az21,dist)
-     |      -66.531 75.654  4164192.708
-     |      >>> # compute latitude, longitude and back azimuth of Portland,
-     |      >>> # given Boston lat/lon, forward azimuth and distance to Portland.
-     |      >>> endlon, endlat, backaz = g.fwd(boston_lon, boston_lat, az12, dist)
-     |      >>> print "%6.3f  %6.3f %13.3f" % (endlat,endlon,backaz)
-     |      45.517  -123.683        75.654
-     |      >>> # compute the azimuths, distances from New York to several
-     |      >>> # cities (pass a list)
-     |      >>> lons1 = 3*[newyork_lon]; lats1 = 3*[newyork_lat]
-     |      >>> lons2 = [boston_lon, portland_lon, london_lon]
-     |      >>> lats2 = [boston_lat, portland_lat, london_lat]
-     |      >>> az12,az21,dist = g.inv(lons1,lats1,lons2,lats2)
-     |      >>> for faz,baz,d in zip(az12,az21,dist): print "%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
-     |  
-     |  ----------------------------------------------------------------------
-     |  Data descriptors defined here:
-     |  
-     |  __dict__
-     |      dictionary for instance variables (if defined)
-     |  
-     |  __weakref__
-     |      list of weak references to the object (if defined)
-     |  
-     |  ----------------------------------------------------------------------
-     |  Methods inherited from _geod.Geod:
-     |  
-     |  __reduce__(...)
-     |      special method that allows pyproj.Geod instance to be pickled
-     |  
-     |  ----------------------------------------------------------------------
-     |  Data descriptors inherited from _geod.Geod:
-     |  
-     |  geodparams
-     |  
-     |  proj_version
-    
-    class Proj(_proj.Proj)
-     |  performs cartographic transformations (converts from
-     |  longitude,latitude to native map projection x,y coordinates and
-     |  vice versa) using proj (http://proj.maptools.org/)
-     |  
-     |  A Proj class instance is initialized with proj map projection
-     |  control parameter key/value pairs. The key/value pairs can
-     |  either be passed in a dictionary, or as keyword arguments,
-     |  or as a proj4 string (compatible with the proj command). See
-     |  http://www.remotesensing.org/geotiff/proj_list for examples of
-     |  key/value pairs defining different map projections.
-     |  
-     |  Calling a Proj class instance with the arguments lon, lat will
-     |  convert lon/lat (in degrees) to x/y native map projection
-     |  coordinates (in meters).  If optional keyword 'inverse' is True
-     |  (default is False), the inverse transformation from x/y to
-     |  lon/lat is performed. If optional keyword 'radians' is True
-     |  (default is False) lon/lat are interpreted as radians instead of
-     |  degrees. If optional keyword 'errcheck' is True (default is
-     |  False) an exception is raised if the transformation is invalid.
-     |  If errcheck=False and the transformation is invalid, no
-     |  exception is raised and 1.e30 is returned. If the optional keyword
-     |  'preserve_units' is True, the units in map projection coordinates
-     |  are not forced to be meters.
-     |  
-     |  Works with numpy and regular python array objects, python
-     |  sequences and scalars.
-     |  
-     |  Method resolution order:
-     |      Proj
-     |      _proj.Proj
-     |      __builtin__.object
-     |  
-     |  Methods defined here:
-     |  
-     |  __call__(self, *args, **kw)
-     |      Calling a Proj class instance with the arguments lon, lat will
-     |      convert lon/lat (in degrees) to x/y native map projection
-     |      coordinates (in meters).  If optional keyword 'inverse' is True
-     |      (default is False), the inverse transformation from x/y to
-     |      lon/lat is performed.  If optional keyword 'radians' is True
-     |      (default is False) the units of lon/lat are radians instead of
-     |      degrees. If optional keyword 'errcheck' is True (default is
-     |      False) an exception is raised if the transformation is invalid.
-     |      If errcheck=False and the transformation is invalid, no
-     |      exception is raised and 1.e30 is returned.
-     |      
-     |      Instead of calling with lon, lat, a single ndarray of
-     |      shape n,2 may be used, and one of the same shape will
-     |      be returned; this is more efficient.
-     |      
-     |      Inputs should be doubles (they will be cast to doubles if they
-     |      are not, causing a slight performance hit).
-     |      
-     |      Works with numpy and regular python array objects, python
-     |      sequences and scalars, but is fastest for array objects.
-     |  
-     |  is_geocent(self)
-     |      returns True if projection in geocentric (x/y) coordinates
-     |  
-     |  is_latlong(self)
-     |      returns True if projection in geographic (lon/lat) coordinates
-     |  
-     |  ----------------------------------------------------------------------
-     |  Static methods defined here:
-     |  
-     |  __new__(self, projparams=None, **kwargs)
-     |      initialize a Proj class instance.
-     |      
-     |      Proj4 projection control parameters must either be given in a
-     |      dictionary 'projparams' or as keyword arguments. See the proj
-     |      documentation (http://proj.maptools.org) for more information
-     |      about specifying projection parameters.
-     |      
-     |      Example usage:
-     |      
-     |      >>> from pyproj import Proj
-     |      >>> p = Proj(proj='utm',zone=10,ellps='WGS84') # use kwargs
-     |      >>> x,y = p(-120.108, 34.36116666)
-     |      >>> print 'x=%9.3f y=%11.3f' % (x,y)
-     |      x=765975.641 y=3805993.134
-     |      >>> print 'lon=%8.3f lat=%5.3f' % p(x,y,inverse=True)
-     |      lon=-120.108 lat=34.361
-     |      >>> # do 3 cities at a time in a tuple (Fresno, LA, SF)
-     |      >>> lons = (-119.72,-118.40,-122.38)
-     |      >>> lats = (36.77, 33.93, 37.62 )
-     |      >>> x,y = p(lons, lats)
-     |      >>> print 'x: %9.3f %9.3f %9.3f' % x
-     |      x: 792763.863 925321.537 554714.301
-     |      >>> print 'y: %9.3f %9.3f %9.3f' % y
-     |      y: 4074377.617 3763936.941 4163835.303
-     |      >>> lons, lats = p(x, y, inverse=True) # inverse transform
-     |      >>> print 'lons: %8.3f %8.3f %8.3f' % lons
-     |      lons: -119.720 -118.400 -122.380
-     |      >>> print 'lats: %8.3f %8.3f %8.3f' % lats
-     |      lats:   36.770   33.930   37.620
-     |      >>> p2 = Proj('+proj=utm +zone=10 +ellps=WGS84') # use proj4 string
-     |      >>> x,y = p2(-120.108, 34.36116666)
-     |      >>> print 'x=%9.3f y=%11.3f' % (x,y)
-     |      x=765975.641 y=3805993.134
-     |  
-     |  ----------------------------------------------------------------------
-     |  Data descriptors defined here:
-     |  
-     |  __dict__
-     |      dictionary for instance variables (if defined)
-     |  
-     |  __weakref__
-     |      list of weak references to the object (if defined)
-     |  
-     |  ----------------------------------------------------------------------
-     |  Methods inherited from _proj.Proj:
-     |  
-     |  __reduce__(...)
-     |      special method that allows pyproj.Proj instance to be pickled
-     |  
-     |  ----------------------------------------------------------------------
-     |  Data descriptors inherited from _proj.Proj:
-     |  
-     |  proj_version
-     |  
-     |  srs
-
-FUNCTIONS
-    set_datapath(...)
-    
-    test()
-        run the examples in the docstrings using the doctest module
-    
-    transform(p1, p2, x, y, z=None, radians=False)
-        x2, y2, z2 = transform(p1, p2, x1, y1, z1, radians=False)
-        
-        Transform points between two coordinate systems defined by the
-        Proj instances p1 and p2.
-        
-        The points x1,y1,z1 in the coordinate system defined by p1 are
-        transformed to x2,y2,z2 in the coordinate system defined by p2.
-        
-        z1 is optional, if it is not set it is assumed to be zero (and
-        only x2 and y2 are returned).
-        
-        In addition to converting between cartographic and geographic
-        projection coordinates, this function can take care of datum
-        shifts (which cannot be done using the __call__ method of the
-        Proj instances). It also allows for one of the coordinate
-        systems to be geographic (proj = 'latlong').
-        
-        If optional keyword 'radians' is True (default is False) and p1
-        is defined in geographic coordinate (pj.is_latlong() is True),
-        x1,y1 is interpreted as radians instead of the default degrees.
-        Similarly, if p2 is defined in geographic coordinates and
-        radians=True, x2, y2 are returned in radians instead of degrees.
-        if p1.is_latlong() and p2.is_latlong() both are False, the
-        radians keyword has no effect.
-        
-        x,y and z can be numpy or regular python arrays, python
-        lists/tuples or scalars. Arrays are fastest.  For projections in
-        geocentric coordinates, values of x and y are given in meters.
-        z is always meters.
-        
-        Example usage:
-        
-        >>> # projection 1: UTM zone 15, grs80 ellipse, NAD83 datum
-        >>> # (defined by epsg code 26915)
-        >>> p1 = Proj(init='epsg:26915')
-        >>> # projection 2: UTM zone 15, clrk66 ellipse, NAD27 datum
-        >>> p2 = Proj(init='epsg:26715')
-        >>> # find x,y of Jefferson City, MO.
-        >>> x1, y1 = p1(-92.199881,38.56694)
-        >>> # transform this point to projection 2 coordinates.
-        >>> x2, y2 = transform(p1,p2,x1,y1)
-        >>> print '%9.3f %11.3f' % (x1,y1)
-        569704.566 4269024.671
-        >>> print '%9.3f %11.3f' % (x2,y2)
-        569706.333 4268817.680
-        >>> print '%8.3f %5.3f' % p2(x2,y2,inverse=True)
-         -92.200 38.567
-        >>> # process 3 points at a time in a tuple
-        >>> lats = (38.83,39.32,38.75) # Columbia, KC and StL Missouri
-        >>> lons = (-92.22,-94.72,-90.37)
-        >>> x1, y1 = p1(lons,lats)
-        >>> x2, y2 = transform(p1,p2,x1,y1)
-        >>> xy = x1+y1
-        >>> print '%9.3f %9.3f %9.3f %11.3f %11.3f %11.3f' % xy
-        567703.344 351730.944 728553.093 4298200.739 4353698.725 4292319.005
-        >>> xy = x2+y2
-        >>> print '%9.3f %9.3f %9.3f %11.3f %11.3f %11.3f' % xy
-        567705.072 351727.113 728558.917 4297993.157 4353490.111 4292111.678
-        >>> lons, lats = p2(x2,y2,inverse=True)
-        >>> xy = lons+lats
-        >>> print '%8.3f %8.3f %8.3f %5.3f %5.3f %5.3f' % xy
-         -92.220  -94.720  -90.370 38.830 39.320 38.750
-
-DATA
-    __version__ = '1.8.8'
-
-VERSION
-    1.8.8
+Report bugs/ask questions at http://code.google.com/p/pyproj/issues/list
diff --git a/README.html b/README.html
deleted file mode 100644
index 08f9387..0000000
--- a/README.html
+++ /dev/null
@@ -1,482 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html><head><title>Python: package pyproj</title>
-</head><body bgcolor="#f0f0f8">
-
-<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="heading">
-<tr bgcolor="#7799ee">
-<td valign=bottom> <br>
-<font color="#ffffff" face="helvetica, arial"> <br><big><big><strong>pyproj</strong></big></big> (version 1.8.7)</font></td
-><td align=right valign=bottom
-><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:/usr/local/lib/python2.5/site-packages/pyproj/__init__.py">/usr/local/lib/python2.5/site-packages/pyproj/__init__.py</a></font></td></tr></table>
-    <p><tt>Pyrex wrapper to provide python interfaces to<br>
-PROJ.4 (<a href="http://proj.maptools.org">http://proj.maptools.org</a>) functions.<br>
- <br>
-Performs cartographic transformations and geodetic computations.<br>
- <br>
-The <a href="#Proj">Proj</a> class can convert from geographic (longitude,latitude)<br>
-to native map projection (x,y) coordinates and vice versa, or<br>
-from one map projection coordinate system directly to another.<br>
- <br>
-The <a href="#Geod">Geod</a> class can perform forward and inverse geodetic, or<br>
-Great Circle, computations.  The forward computation involves<br>
-determining latitude, longitude and back azimuth of a terminus<br>
-point given the latitude and longitude of an initial point, plus<br>
-azimuth and distance. The inverse computation involves<br>
-determining the forward and back azimuths and distance given the<br>
-latitudes and longitudes of an initial and terminus point.<br>
- <br>
-Input coordinates can be given as python arrays, lists/tuples,<br>
-scalars or numpy/Numeric/numarray arrays. Optimized for objects<br>
-that support the Python buffer protocol (regular python and<br>
-numpy array objects).<br>
- <br>
-Download: <a href="http://code.google.com/p/pyproj/downloads/list">http://code.google.com/p/pyproj/downloads/list</a><br>
- <br>
-Requirements: python 2.4 or higher.<br>
- <br>
-Example scripts are in 'test' subdirectory of source distribution.<br>
-The '<a href="#-test">test</a>()' function will run the examples in the docstrings.<br>
- <br>
-Contact:  Jeffrey Whitaker <jeffrey.s.whitaker at noaa.gov<br>
- <br>
-copyright (c) 2006 by Jeffrey Whitaker.<br>
- <br>
-Permission to use, copy, modify, and distribute this software<br>
-and its documentation for any purpose and without fee is hereby<br>
-granted, provided that the above copyright notice appear in all<br>
-copies and that both the copyright notice and this permission<br>
-notice appear in supporting documentation. THE AUTHOR DISCLAIMS<br>
-ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL<br>
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT<br>
-SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR<br>
-CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM<br>
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,<br>
-NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN<br>
-CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</tt></p>
-<p>
-<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
-<tr bgcolor="#aa55cc">
-<td colspan=3 valign=bottom> <br>
-<font color="#ffffff" face="helvetica, arial"><big><strong>Package Contents</strong></big></font></td></tr>
-    
-<tr><td bgcolor="#aa55cc"><tt>      </tt></td><td> </td>
-<td width="100%"><table width="100%" summary="list"><tr><td width="25%" valign=top><a href="pyproj._geod.html">_geod</a><br>
-</td><td width="25%" valign=top><a href="pyproj._proj.html">_proj</a><br>
-</td><td width="25%" valign=top></td><td width="25%" valign=top></td></tr></table></td></tr></table><p>
-<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
-<tr bgcolor="#ee77aa">
-<td colspan=3 valign=bottom> <br>
-<font color="#ffffff" face="helvetica, arial"><big><strong>Classes</strong></big></font></td></tr>
-    
-<tr><td bgcolor="#ee77aa"><tt>      </tt></td><td> </td>
-<td width="100%"><dl>
-<dt><font face="helvetica, arial">_geod.Geod(<a href="__builtin__.html#object">__builtin__.object</a>)
-</font></dt><dd>
-<dl>
-<dt><font face="helvetica, arial"><a href="pyproj.html#Geod">Geod</a>
-</font></dt></dl>
-</dd>
-<dt><font face="helvetica, arial">_proj.Proj(<a href="__builtin__.html#object">__builtin__.object</a>)
-</font></dt><dd>
-<dl>
-<dt><font face="helvetica, arial"><a href="pyproj.html#Proj">Proj</a>
-</font></dt></dl>
-</dd>
-</dl>
- <p>
-<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
-<tr bgcolor="#ffc8d8">
-<td colspan=3 valign=bottom> <br>
-<font color="#000000" face="helvetica, arial"><a name="Geod">class <strong>Geod</strong></a>(_geod.Geod)</font></td></tr>
-    
-<tr bgcolor="#ffc8d8"><td rowspan=2><tt>   </tt></td>
-<td colspan=2><tt>performs forward and inverse geodetic, or Great Circle,<br>
-computations.  The forward computation (using the 'fwd' method)<br>
-involves determining latitude, longitude and back azimuth of a<br>
-terminus point given the latitude and longitude of an initial<br>
-point, plus azimuth and distance. The inverse computation (using<br>
-the 'inv' method) involves determining the forward and back<br>
-azimuths and distance given the latitudes and longitudes of an<br>
-initial and terminus point.<br> </tt></td></tr>
-<tr><td> </td>
-<td width="100%"><dl><dt>Method resolution order:</dt>
-<dd><a href="pyproj.html#Geod">Geod</a></dd>
-<dd>_geod.Geod</dd>
-<dd><a href="__builtin__.html#object">__builtin__.object</a></dd>
-</dl>
-<hr>
-Methods defined here:<br>
-<dl><dt><a name="Geod-fwd"><strong>fwd</strong></a>(self, lons, lats, az, dist, radians<font color="#909090">=False</font>)</dt><dd><tt>forward transformation - Returns longitudes, latitudes and back<br>
-azimuths of terminus points given longitudes (lons) and<br>
-latitudes (lats) of initial points, plus forward azimuths (az)<br>
-and distances (dist).<br>
- <br>
-Works with numpy and regular python array objects, python<br>
-sequences and scalars.<br>
- <br>
-if radians=True, lons/lats and azimuths are radians instead of<br>
-degrees. Distances are in meters.</tt></dd></dl>
-
-<dl><dt><a name="Geod-inv"><strong>inv</strong></a>(self, lons1, lats1, lons2, lats2, radians<font color="#909090">=False</font>)</dt><dd><tt>inverse transformation - Returns forward and back azimuths, plus<br>
-distances between initial points (specified by lons1, lats1) and<br>
-terminus points (specified by lons2, lats2).<br>
- <br>
-Works with numpy and regular python array objects, python<br>
-sequences and scalars.<br>
- <br>
-if radians=True, lons/lats and azimuths are radians instead of<br>
-degrees. Distances are in meters.</tt></dd></dl>
-
-<dl><dt><a name="Geod-npts"><strong>npts</strong></a>(self, lon1, lat1, lon2, lat2, npts, radians<font color="#909090">=False</font>)</dt><dd><tt>Given a single initial point and terminus point (specified by<br>
-python floats lon1,lat1 and lon2,lat2), returns a list of<br>
-longitude/latitude pairs describing npts equally spaced<br>
-intermediate points along the geodesic between the initial and<br>
-terminus points.<br>
- <br>
-if radians=True, lons/lats are radians instead of degrees.<br>
- <br>
-Example usage:<br>
- <br>
->>> from pyproj import <a href="#Geod">Geod</a><br>
->>> g = <a href="#Geod">Geod</a>(ellps='clrk66') # Use Clarke 1966 ellipsoid.<br>
->>> # specify the lat/lons of Boston and Portland.<br>
->>> boston_lat = 42.+(15./60.); boston_lon = -71.-(7./60.)<br>
->>> portland_lat = 45.+(31./60.); portland_lon = -123.-(41./60.)<br>
->>> # find ten equally spaced points between Boston and Portland.<br>
->>> lonlats = g.<a href="#Geod-npts">npts</a>(boston_lon,boston_lat,portland_lon,portland_lat,10)<br>
->>> for lon,lat in lonlats: print '%6.3f  %7.3f' % (lat, lon)<br>
-43.528  -75.414<br>
-44.637  -79.883<br>
-45.565  -84.512<br>
-46.299  -89.279<br>
-46.830  -94.156<br>
-47.149  -99.112<br>
-47.251  -104.106<br>
-47.136  -109.100<br>
-46.805  -114.051<br>
-46.262  -118.924</tt></dd></dl>
-
-<hr>
-Static methods defined here:<br>
-<dl><dt><a name="Geod-__new__"><strong>__new__</strong></a>(self, initparams<font color="#909090">=None</font>, **kwargs)</dt><dd><tt>initialize a <a href="#Geod">Geod</a> class instance.<br>
- <br>
-Geodetic parameters for specifying the ellipsoid<br>
-can be given in a dictionary 'initparams', as keyword arguments, <br>
-or as as proj4 geod initialization string.<br>
-Following is a list of the ellipsoids that may be defined using the <br>
-'ellps' keyword:<br>
- <br>
-   MERIT a=6378137.0      rf=298.257       MERIT 1983<br>
-   SGS85 a=6378136.0      rf=298.257       Soviet Geodetic System 85<br>
-   GRS80 a=6378137.0      rf=298.257222101 GRS 1980(IUGG, 1980)<br>
-   IAU76 a=6378140.0      rf=298.257       IAU 1976<br>
-    airy a=6377563.396    b=6356256.910    Airy 1830<br>
-  APL4.9 a=6378137.0.     rf=298.25        Appl. Physics. 1965<br>
-   NWL9D a=6378145.0.     rf=298.25        Naval Weapons Lab., 1965<br>
-mod_airy a=6377340.189    b=6356034.446    Modified Airy<br>
-  andrae a=6377104.43     rf=300.0         Andrae 1876 (Den., Iclnd.)<br>
- aust_SA a=6378160.0      rf=298.25        Australian Natl & S. Amer. 1969<br>
-   GRS67 a=6378160.0      rf=298.2471674270 GRS 67(IUGG 1967)<br>
-  bessel a=6377397.155    rf=299.1528128   Bessel 1841<br>
-bess_nam a=6377483.865    rf=299.1528128   Bessel 1841 (Namibia)<br>
-  clrk66 a=6378206.4      b=6356583.8      Clarke 1866<br>
-  clrk80 a=6378249.145    rf=293.4663      Clarke 1880 mod.<br>
-     CPM a=6375738.7      rf=334.29        Comm. des Poids et Mesures 1799<br>
-  delmbr a=6376428.       rf=311.5         Delambre 1810 (Belgium)<br>
- engelis a=6378136.05     rf=298.2566      Engelis 1985<br>
- evrst30 a=6377276.345    rf=300.8017      Everest 1830<br>
- evrst48 a=6377304.063    rf=300.8017      Everest 1948<br>
- evrst56 a=6377301.243    rf=300.8017      Everest 1956<br>
- evrst69 a=6377295.664    rf=300.8017      Everest 1969<br>
- evrstSS a=6377298.556    rf=300.8017      Everest (Sabah & Sarawak)<br>
- fschr60 a=6378166.       rf=298.3         Fischer (Mercury Datum) 1960<br>
-fschr60m a=6378155.       rf=298.3         Modified Fischer 1960<br>
- fschr68 a=6378150.       rf=298.3         Fischer 1968<br>
- helmert a=6378200.       rf=298.3         Helmert 1906<br>
-   hough a=6378270.0      rf=297.          Hough<br>
-    intl a=6378388.0      rf=297.          International 1909 (Hayford)<br>
-   krass a=6378245.0      rf=298.3         Krassovsky, 1942<br>
-   kaula a=6378163.       rf=298.24        Kaula 1961<br>
-   lerch a=6378139.       rf=298.257       Lerch 1979<br>
-   mprts a=6397300.       rf=191.          Maupertius 1738<br>
-new_intl a=6378157.5      b=6356772.2      New International 1967<br>
- plessis a=6376523.       b=6355863.       Plessis 1817 (France)<br>
-  SEasia a=6378155.0      b=6356773.3205   Southeast Asia<br>
- walbeck a=6376896.0      b=6355834.8467   Walbeck<br>
-   WGS60 a=6378165.0      rf=298.3         WGS 60<br>
-   WGS66 a=6378145.0      rf=298.25        WGS 66<br>
-   WGS72 a=6378135.0      rf=298.26        WGS 72<br>
-   WGS84 a=6378137.0      rf=298.257223563 WGS 84<br>
-  sphere a=6370997.0      b=6370997.0      Normal Sphere (r=6370997)<br>
- <br>
-The parameters of the ellipsoid may also be set directly using<br>
-the 'a' (semi-major or equatorial axis radius) keyword, and<br>
-any one of the following keywords: 'b' (semi-minor,<br>
-or polar axis radius), 'e' (eccentricity), 'es' (eccentricity<br>
-squared), 'f' (flattening), or 'rf' (reciprocal flattening).<br>
- <br>
-See the proj documentation (<a href="http://proj.maptools.org">http://proj.maptools.org</a>) for more<br>
-information about specifying ellipsoid parameters (specifically,<br>
-the chapter 'Specifying the Earth's figure' in the main <a href="#Proj">Proj</a><br>
-users manual).<br>
- <br>
-Example usage:<br>
- <br>
->>> from pyproj import <a href="#Geod">Geod</a><br>
->>> g = <a href="#Geod">Geod</a>(ellps='clrk66') # Use Clarke 1966 ellipsoid.<br>
->>> # specify the lat/lons of some cities.<br>
->>> boston_lat = 42.+(15./60.); boston_lon = -71.-(7./60.)<br>
->>> portland_lat = 45.+(31./60.); portland_lon = -123.-(41./60.)<br>
->>> newyork_lat = 40.+(47./60.); newyork_lon = -73.-(58./60.)<br>
->>> london_lat = 51.+(32./60.); london_lon = -(5./60.)<br>
->>> # compute forward and back azimuths, plus distance<br>
->>> # between Boston and Portland.<br>
->>> az12,az21,dist = g.<a href="#Geod-inv">inv</a>(boston_lon,boston_lat,portland_lon,portland_lat)<br>
->>> print "%7.3f %6.3f %12.3f" % (az12,az21,dist)<br>
--66.531 75.654  4164192.708<br>
->>> # compute latitude, longitude and back azimuth of Portland,<br>
->>> # given Boston lat/lon, forward azimuth and distance to Portland.<br>
->>> endlon, endlat, backaz = g.<a href="#Geod-fwd">fwd</a>(boston_lon, boston_lat, az12, dist)<br>
->>> print "%6.3f  %6.3f %13.3f" % (endlat,endlon,backaz)<br>
-45.517  -123.683        75.654<br>
->>> # compute the azimuths, distances from New York to several<br>
->>> # cities (pass a list)<br>
->>> lons1 = 3*[newyork_lon]; lats1 = 3*[newyork_lat]<br>
->>> lons2 = [boston_lon, portland_lon, london_lon]<br>
->>> lats2 = [boston_lat, portland_lat, london_lat]<br>
->>> az12,az21,dist = g.<a href="#Geod-inv">inv</a>(lons1,lats1,lons2,lats2)<br>
->>> for faz,baz,d in zip(az12,az21,dist): print "%7.3f %7.3f %9.3f" % (faz,baz,d)<br>
- 54.663 -123.448 288303.720<br>
--65.463  79.342 4013037.318<br>
- 51.254 -71.576 5579916.649<br>
->>> g2 = <a href="#Geod">Geod</a>('+ellps=clrk66') # use proj4 style initialization string<br>
->>> az12,az21,dist = g2.<a href="#Geod-inv">inv</a>(boston_lon,boston_lat,portland_lon,portland_lat)<br>
->>> print "%7.3f %6.3f %12.3f" % (az12,az21,dist)<br>
--66.531 75.654  4164192.708</tt></dd></dl>
-
-<hr>
-Data descriptors defined here:<br>
-<dl><dt><strong>__dict__</strong></dt>
-<dd><tt>dictionary for instance variables (if defined)</tt></dd>
-</dl>
-<dl><dt><strong>__weakref__</strong></dt>
-<dd><tt>list of weak references to the object (if defined)</tt></dd>
-</dl>
-<hr>
-Methods inherited from _geod.Geod:<br>
-<dl><dt><a name="Geod-__reduce__"><strong>__reduce__</strong></a>(...)</dt><dd><tt>special method that allows pyproj.<a href="#Geod">Geod</a> instance to be pickled</tt></dd></dl>
-
-<hr>
-Data descriptors inherited from _geod.Geod:<br>
-<dl><dt><strong>geodstring</strong></dt>
-</dl>
-<dl><dt><strong>proj_version</strong></dt>
-</dl>
-</td></tr></table> <p>
-<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
-<tr bgcolor="#ffc8d8">
-<td colspan=3 valign=bottom> <br>
-<font color="#000000" face="helvetica, arial"><a name="Proj">class <strong>Proj</strong></a>(_proj.Proj)</font></td></tr>
-    
-<tr bgcolor="#ffc8d8"><td rowspan=2><tt>   </tt></td>
-<td colspan=2><tt>performs cartographic transformations (converts from<br>
-longitude,latitude to native map projection x,y coordinates and<br>
-vice versa) using proj (<a href="http://proj.maptools.org/">http://proj.maptools.org/</a>)<br>
- <br>
-A <a href="#Proj">Proj</a> class instance is initialized with proj map projection<br>
-control parameter key/value pairs. The key/value pairs can<br>
-either be passed in a dictionary, or as keyword arguments,<br>
-or as a proj4 string (compatible with the proj command). See<br>
-<a href="http://www.remotesensing.org/geotiff/proj_list">http://www.remotesensing.org/geotiff/proj_list</a> for examples of<br>
-key/value pairs defining different map projections.<br>
- <br>
-Calling a <a href="#Proj">Proj</a> class instance with the arguments lon, lat will<br>
-convert lon/lat (in degrees) to x/y native map projection<br>
-coordinates (in meters).  If optional keyword 'inverse' is True<br>
-(default is False), the inverse transformation from x/y to<br>
-lon/lat is performed. If optional keyword 'radians' is True<br>
-(default is False) lon/lat are interpreted as radians instead of<br>
-degrees. If optional keyword 'errcheck' is True (default is<br>
-False) an exception is raised if the transformation is invalid.<br>
-If errcheck=False and the transformation is invalid, no<br>
-exception is raised and 1.e30 is returned. If the optional keyword<br>
-'preserve_units' is True, the units in map projection coordinates<br>
-are not forced to be meters.<br>
- <br>
-Works with numpy and regular python array objects, python<br>
-sequences and scalars.<br> </tt></td></tr>
-<tr><td> </td>
-<td width="100%"><dl><dt>Method resolution order:</dt>
-<dd><a href="pyproj.html#Proj">Proj</a></dd>
-<dd>_proj.Proj</dd>
-<dd><a href="__builtin__.html#object">__builtin__.object</a></dd>
-</dl>
-<hr>
-Methods defined here:<br>
-<dl><dt><a name="Proj-__call__"><strong>__call__</strong></a>(self, *args, **kw)</dt><dd><tt>Calling a <a href="#Proj">Proj</a> class instance with the arguments lon, lat will<br>
-convert lon/lat (in degrees) to x/y native map projection<br>
-coordinates (in meters).  If optional keyword 'inverse' is True<br>
-(default is False), the inverse transformation from x/y to<br>
-lon/lat is performed.  If optional keyword 'radians' is True<br>
-(default is False) the units of lon/lat are radians instead of<br>
-degrees. If optional keyword 'errcheck' is True (default is<br>
-False) an exception is raised if the transformation is invalid.<br>
-If errcheck=False and the transformation is invalid, no<br>
-exception is raised and 1.e30 is returned.<br>
- <br>
-Instead of calling with lon, lat, a single ndarray of<br>
-shape n,2 may be used, and one of the same shape will<br>
-be returned; this is more efficient.<br>
- <br>
-Inputs should be doubles (they will be cast to doubles if they<br>
-are not, causing a slight performance hit).<br>
- <br>
-Works with numpy and regular python array objects, python<br>
-sequences and scalars, but is fastest for array objects.</tt></dd></dl>
-
-<dl><dt><a name="Proj-is_geocent"><strong>is_geocent</strong></a>(self)</dt><dd><tt>returns True if projection in geocentric (x/y) coordinates</tt></dd></dl>
-
-<dl><dt><a name="Proj-is_latlong"><strong>is_latlong</strong></a>(self)</dt><dd><tt>returns True if projection in geographic (lon/lat) coordinates</tt></dd></dl>
-
-<hr>
-Static methods defined here:<br>
-<dl><dt><a name="Proj-__new__"><strong>__new__</strong></a>(self, projparams<font color="#909090">=None</font>, preserve_units<font color="#909090">=False</font>, **kwargs)</dt><dd><tt>initialize a <a href="#Proj">Proj</a> class instance.<br>
- <br>
-Proj4 projection control parameters must either be given in a<br>
-dictionary 'projparams' or as keyword arguments. See the proj<br>
-documentation (<a href="http://proj.maptools.org">http://proj.maptools.org</a>) for more information<br>
-about specifying projection parameters.<br>
- <br>
-Example usage:<br>
- <br>
->>> from pyproj import <a href="#Proj">Proj</a><br>
->>> p = <a href="#Proj">Proj</a>(proj='utm',zone=10,ellps='WGS84') # use kwargs<br>
->>> x,y = p(-120.108, 34.36116666)<br>
->>> print 'x=%9.3f y=%11.3f' % (x,y)<br>
-x=765975.641 y=3805993.134<br>
->>> print 'lon=%8.3f lat=%5.3f' % p(x,y,inverse=True)<br>
-lon=-120.108 lat=34.361<br>
->>> # do 3 cities at a time in a tuple (Fresno, LA, SF)<br>
->>> lons = (-119.72,-118.40,-122.38)<br>
->>> lats = (36.77, 33.93, 37.62 )<br>
->>> x,y = p(lons, lats)<br>
->>> print 'x: %9.3f %9.3f %9.3f' % x<br>
-x: 792763.863 925321.537 554714.301<br>
->>> print 'y: %9.3f %9.3f %9.3f' % y<br>
-y: 4074377.617 3763936.941 4163835.303<br>
->>> lons, lats = p(x, y, inverse=True) # inverse transform<br>
->>> print 'lons: %8.3f %8.3f %8.3f' % lons<br>
-lons: -119.720 -118.400 -122.380<br>
->>> print 'lats: %8.3f %8.3f %8.3f' % lats<br>
-lats:   36.770   33.930   37.620<br>
->>> p2 = <a href="#Proj">Proj</a>('+proj=utm +zone=10 +ellps=WGS84') # use proj4 string<br>
->>> x,y = p2(-120.108, 34.36116666)<br>
->>> print 'x=%9.3f y=%11.3f' % (x,y)<br>
-x=765975.641 y=3805993.134<br>
->>> p = <a href="#Proj">Proj</a>(init="epsg:32667")<br>
->>> print 'x=%12.3f y=%12.3f (meters)' % p(-114.057222, 51.045)<br>
-x=-1783486.760 y= 6193833.196 (meters)<br>
->>> p = <a href="#Proj">Proj</a>("+init=epsg:32667",preserve_units=True)<br>
->>> print 'x=%12.3f y=%12.3f (feet)' % p(-114.057222, 51.045)<br>
-x=-5851322.810 y=20320934.409 (feet)</tt></dd></dl>
-
-<hr>
-Data descriptors defined here:<br>
-<dl><dt><strong>__dict__</strong></dt>
-<dd><tt>dictionary for instance variables (if defined)</tt></dd>
-</dl>
-<dl><dt><strong>__weakref__</strong></dt>
-<dd><tt>list of weak references to the object (if defined)</tt></dd>
-</dl>
-<hr>
-Methods inherited from _proj.Proj:<br>
-<dl><dt><a name="Proj-__reduce__"><strong>__reduce__</strong></a>(...)</dt><dd><tt>special method that allows pyproj.<a href="#Proj">Proj</a> instance to be pickled</tt></dd></dl>
-
-<hr>
-Data descriptors inherited from _proj.Proj:<br>
-<dl><dt><strong>proj_version</strong></dt>
-</dl>
-<dl><dt><strong>srs</strong></dt>
-</dl>
-</td></tr></table></td></tr></table><p>
-<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
-<tr bgcolor="#eeaa77">
-<td colspan=3 valign=bottom> <br>
-<font color="#ffffff" face="helvetica, arial"><big><strong>Functions</strong></big></font></td></tr>
-    
-<tr><td bgcolor="#eeaa77"><tt>      </tt></td><td> </td>
-<td width="100%"><dl><dt><a name="-set_datapath"><strong>set_datapath</strong></a>(...)</dt></dl>
- <dl><dt><a name="-test"><strong>test</strong></a>()</dt><dd><tt>run the examples in the docstrings using the doctest module</tt></dd></dl>
- <dl><dt><a name="-transform"><strong>transform</strong></a>(p1, p2, x, y, z<font color="#909090">=None</font>, radians<font color="#909090">=False</font>)</dt><dd><tt>x2, y2, z2 = <a href="#-transform">transform</a>(p1, p2, x1, y1, z1, radians=False)<br>
- <br>
-Transform points between two coordinate systems defined by the<br>
-<a href="#Proj">Proj</a> instances p1 and p2.<br>
- <br>
-The points x1,y1,z1 in the coordinate system defined by p1 are<br>
-transformed to x2,y2,z2 in the coordinate system defined by p2.<br>
- <br>
-z1 is optional, if it is not set it is assumed to be zero (and<br>
-only x2 and y2 are returned).<br>
- <br>
-In addition to converting between cartographic and geographic<br>
-projection coordinates, this function can take care of datum<br>
-shifts (which cannot be done using the __call__ method of the<br>
-<a href="#Proj">Proj</a> instances). It also allows for one of the coordinate<br>
-systems to be geographic (proj = 'latlong').<br>
- <br>
-If optional keyword 'radians' is True (default is False) and p1<br>
-is defined in geographic coordinate (pj.is_latlong() is True),<br>
-x1,y1 is interpreted as radians instead of the default degrees.<br>
-Similarly, if p2 is defined in geographic coordinates and<br>
-radians=True, x2, y2 are returned in radians instead of degrees.<br>
-if p1.is_latlong() and p2.is_latlong() both are False, the<br>
-radians keyword has no effect.<br>
- <br>
-x,y and z can be numpy or regular python arrays, python<br>
-lists/tuples or scalars. Arrays are fastest.  For projections in<br>
-geocentric coordinates, values of x and y are given in meters.<br>
-z is always meters.<br>
- <br>
-Example usage:<br>
- <br>
->>> # projection 1: UTM zone 15, grs80 ellipse, NAD83 datum<br>
->>> # (defined by epsg code 26915)<br>
->>> p1 = <a href="#Proj">Proj</a>(init='epsg:26915')<br>
->>> # projection 2: UTM zone 15, clrk66 ellipse, NAD27 datum<br>
->>> p2 = <a href="#Proj">Proj</a>(init='epsg:26715')<br>
->>> # find x,y of Jefferson City, MO.<br>
->>> x1, y1 = p1(-92.199881,38.56694)<br>
->>> # transform this point to projection 2 coordinates.<br>
->>> x2, y2 = <a href="#-transform">transform</a>(p1,p2,x1,y1)<br>
->>> print '%9.3f %11.3f' % (x1,y1)<br>
-569704.566 4269024.671<br>
->>> print '%9.3f %11.3f' % (x2,y2)<br>
-569706.333 4268817.680<br>
->>> print '%8.3f %5.3f' % p2(x2,y2,inverse=True)<br>
- -92.200 38.567<br>
->>> # process 3 points at a time in a tuple<br>
->>> lats = (38.83,39.32,38.75) # Columbia, KC and StL Missouri<br>
->>> lons = (-92.22,-94.72,-90.37)<br>
->>> x1, y1 = p1(lons,lats)<br>
->>> x2, y2 = <a href="#-transform">transform</a>(p1,p2,x1,y1)<br>
->>> xy = x1+y1<br>
->>> print '%9.3f %9.3f %9.3f %11.3f %11.3f %11.3f' % xy<br>
-567703.344 351730.944 728553.093 4298200.739 4353698.725 4292319.005<br>
->>> xy = x2+y2<br>
->>> print '%9.3f %9.3f %9.3f %11.3f %11.3f %11.3f' % xy<br>
-567705.072 351727.113 728558.917 4297993.157 4353490.111 4292111.678<br>
->>> lons, lats = p2(x2,y2,inverse=True)<br>
->>> xy = lons+lats<br>
->>> print '%8.3f %8.3f %8.3f %5.3f %5.3f %5.3f' % xy<br>
- -92.220  -94.720  -90.370 38.830 39.320 38.750</tt></dd></dl>
-</td></tr></table><p>
-<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
-<tr bgcolor="#55aa55">
-<td colspan=3 valign=bottom> <br>
-<font color="#ffffff" face="helvetica, arial"><big><strong>Data</strong></big></font></td></tr>
-    
-<tr><td bgcolor="#55aa55"><tt>      </tt></td><td> </td>
-<td width="100%"><strong>__version__</strong> = '1.8.7'<br>
-<strong>pyproj_datadir</strong> = '/usr/local/lib/python2.5/site-packages/pyproj/data'</td></tr></table>
-</body></html>
diff --git a/_geod.c b/_geod.c
deleted file mode 100644
index dc9bac9..0000000
--- a/_geod.c
+++ /dev/null
@@ -1,4298 +0,0 @@
-/* Generated by Cython 0.14.1 on Fri Mar  4 16:35:00 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 <stddef.h> /* 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)   PyInt_AsLong(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_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
-
-#ifdef __cplusplus
-#define __PYX_EXTERN_C extern "C"
-#else
-#define __PYX_EXTERN_C extern
-#endif
-
-#if defined(WIN32) || defined(MS_WINDOWS)
-#define _USE_MATH_DEFINES
-#endif
-#include <math.h>
-#define __PYX_HAVE_API___geod
-#include "stdlib.h"
-#include "math.h"
-#include "geodesic.h"
-#include "proj_api.h"
-
-#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_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",
-  "_pyproj.pxi",
-};
-
-/* Type declarations */
-
-/* "_geod.pyx":170
- *         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"
- * 
- * cdef class Geod:             # <<<<<<<<<<<<<<
- *     cdef GEODESIC_T geodesic_t
- *     cdef public object geodstring
- */
-
-struct __pyx_obj_5_geod_Geod {
-  PyObject_HEAD
-  GEODESIC_T geodesic_t;
-  PyObject *geodstring;
-  PyObject *proj_version;
-  char *geodinitstring;
-};
-
-#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) {
-    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;
-  }
-  #define __Pyx_RefNannySetupContext(name)           void *__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_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r);} } while(0)
-#else
-  #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_XDECREF(r) Py_XDECREF(r)
-#endif /* CYTHON_REFNANNY */
-#define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);} } while(0)
-#define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r);} } while(0)
-
-static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*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); /*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); /*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 void __Pyx_AddTraceback(const char *funcname); /*proto*/
-
-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*/
-#define __Pyx_MODULE_NAME "_geod"
-static 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.8.9";
-static char __pyx_k__u[] = "u";
-static char __pyx_k__v[] = "v";
-static char __pyx_k__az[] = "az";
-static char __pyx_k__p1[] = "p1";
-static char __pyx_k__p2[] = "p2";
-static char __pyx_k__DIST[] = "DIST";
-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__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__ALPHA12[] = "ALPHA12";
-static char __pyx_k__ALPHA21[] = "ALPHA21";
-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__";
-static char __pyx_k____test__[] = "__test__";
-static char __pyx_k____class__[] = "__class__";
-static char __pyx_k__ValueError[] = "ValueError";
-static char __pyx_k__geodesic_t[] = "geodesic_t";
-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__proj_version[] = "proj_version";
-static char __pyx_k__AttributeError[] = "AttributeError";
-static char __pyx_k__geodinitstring[] = "geodinitstring";
-static PyObject *__pyx_kp_s_10;
-static PyObject *__pyx_kp_s_2;
-static PyObject *__pyx_kp_s_4;
-static PyObject *__pyx_n_s__ALPHA12;
-static PyObject *__pyx_n_s__ALPHA21;
-static PyObject *__pyx_n_s__AttributeError;
-static PyObject *__pyx_n_s__DIST;
-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__az;
-static PyObject *__pyx_n_s__degrees;
-static PyObject *__pyx_n_s__dist;
-static PyObject *__pyx_n_s__encode;
-static PyObject *__pyx_n_s__geodesic_t;
-static PyObject *__pyx_n_s__geodinitstring;
-static PyObject *__pyx_n_s__geodstring;
-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__p1;
-static PyObject *__pyx_n_s__p2;
-static PyObject *__pyx_n_s__proj_version;
-static PyObject *__pyx_n_s__radians;
-static PyObject *__pyx_n_s__u;
-static PyObject *__pyx_n_s__v;
-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
- * 
- *     def __cinit__(self, geodstring):             # <<<<<<<<<<<<<<
- *         cdef GEODESIC_T GEOD_T
- *         # setup geod initialization string.
- */
-
-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;
-  PyObject *__pyx_v_bytestr;
-  int __pyx_r;
-  PyObject *__pyx_t_1 = NULL;
-  char *__pyx_t_2;
-  int __pyx_t_3;
-  PyObject *__pyx_t_4 = NULL;
-  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__geodstring,0};
-  __Pyx_RefNannySetupContext("__cinit__");
-  if (unlikely(__pyx_kwds)) {
-    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
-    PyObject* values[1] = {0};
-    switch (PyTuple_GET_SIZE(__pyx_args)) {
-      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-      case  0: break;
-      default: goto __pyx_L5_argtuple_error;
-    }
-    switch (PyTuple_GET_SIZE(__pyx_args)) {
-      case  0:
-      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__geodstring);
-      if (likely(values[0])) kw_args--;
-      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 = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    }
-    __pyx_v_geodstring = values[0];
-  } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-    goto __pyx_L5_argtuple_error;
-  } else {
-    __pyx_v_geodstring = PyTuple_GET_ITEM(__pyx_args, 0);
-  }
-  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_L3_error:;
-  __Pyx_AddTraceback("_geod.Geod.__cinit__");
-  __Pyx_RefNannyFinishContext();
-  return -1;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_v_bytestr = Py_None; __Pyx_INCREF(Py_None);
-
-  /* "_geod.pyx":14
- *         cdef GEODESIC_T GEOD_T
- *         # 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":15
- *         # 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_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_v_bytestr);
-  __pyx_v_bytestr = __pyx_t_1;
-  __pyx_t_1 = 0;
-
-  /* "_geod.pyx":16
- *         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;}
-  ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodinitstring = __pyx_t_2;
-
-  /* "_geod.pyx":18
- *         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))
- */
-  ((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
- *         # initialize projection
- *         self.geodesic_t = GEOD_init_plus(self.geodinitstring, &GEOD_T)[0]
- *         if pj_errno != 0:             # <<<<<<<<<<<<<<
- *             raise RuntimeError(pj_strerrno(pj_errno))
- *         self.proj_version = PJ_VERSION/100.
- */
-  __pyx_t_3 = (pj_errno != 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))             # <<<<<<<<<<<<<<
- *         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_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_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_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
-    __Pyx_Raise(__pyx_t_1, 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;}
-    goto __pyx_L6;
-  }
-  __pyx_L6:;
-
-  /* "_geod.pyx":21
- *         if pj_errno != 0:
- *             raise RuntimeError(pj_strerrno(pj_errno))
- *         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_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;
-
-  __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("_geod.Geod.__cinit__");
-  __pyx_r = -1;
-  __pyx_L0:;
-  __Pyx_DECREF(__pyx_v_bytestr);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "_geod.pyx":23
- *         self.proj_version = PJ_VERSION/100.
- * 
- *     def __reduce__(self):             # <<<<<<<<<<<<<<
- *         """special method that allows pyproj.Geod instance to be pickled"""
- *         return (self.__class__,(self.geodstring,))
- */
-
-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_r = NULL;
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  __Pyx_RefNannySetupContext("__reduce__");
-
-  /* "_geod.pyx":25
- *     def __reduce__(self):
- *         """special method that allows pyproj.Geod instance to be pickled"""
- *         return (self.__class__,(self.geodstring,))             # <<<<<<<<<<<<<<
- * 
- *     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_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_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_GOTREF(((PyObject *)__pyx_t_3));
-  PyTuple_SET_ITEM(__pyx_t_3, 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));
-  __pyx_t_1 = 0;
-  __pyx_t_2 = 0;
-  __pyx_r = ((PyObject *)__pyx_t_3);
-  __pyx_t_3 = 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_AddTraceback("_geod.Geod.__reduce__");
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "_geod.pyx":27
- *         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
- */
-
-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;
-  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;
-  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;
-  double __pyx_t_7;
-  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");
-  if (unlikely(__pyx_kwds)) {
-    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
-    PyObject* values[5] = {0,0,0,0,0};
-    values[4] = __pyx_k_1;
-    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;
-    }
-    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 = 27; __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;}
-      }
-      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;}
-      }
-      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 = 27; __pyx_clineno = __LINE__; goto __pyx_L3_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];
-  } else {
-    __pyx_v_radians = __pyx_k_1;
-    switch (PyTuple_GET_SIZE(__pyx_args)) {
-      case  5:
-      __pyx_v_radians = PyTuple_GET_ITEM(__pyx_args, 4);
-      case  4:
-      __pyx_v_dist = PyTuple_GET_ITEM(__pyx_args, 3);
-      __pyx_v_az = PyTuple_GET_ITEM(__pyx_args, 2);
-      __pyx_v_lats = PyTuple_GET_ITEM(__pyx_args, 1);
-      __pyx_v_lons = PyTuple_GET_ITEM(__pyx_args, 0);
-      break;
-      default: goto __pyx_L5_argtuple_error;
-    }
-  }
-  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_L3_error:;
-  __Pyx_AddTraceback("_geod.Geod._fwd");
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-
-  /* "_geod.pyx":38
- *         cdef void *londata, *latdata, *azdat, *distdat
- *         # 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":39
- *         # 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);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L6;
-  }
-  __pyx_L6:;
-
-  /* "_geod.pyx":40
- *         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":41
- *             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);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L7;
-  }
-  __pyx_L7:;
-
-  /* "_geod.pyx":42
- *         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":43
- *             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);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L8;
-  }
-  __pyx_L8:;
-
-  /* "_geod.pyx":44
- *         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":45
- *             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);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L9;
-  }
-  __pyx_L9:;
-
-  /* "_geod.pyx":47
- *             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":48
- *         # process data in buffer
- *         if not buflenlons == buflenlats == buflenaz == buflend:
- *             raise RuntimeError("Buffer lengths not the same")             # <<<<<<<<<<<<<<
- *         ndim = buflenlons//_doublesize
- *         lonsdata = <double *>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_GOTREF(__pyx_t_3);
-    __Pyx_Raise(__pyx_t_3, 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;}
-    goto __pyx_L10;
-  }
-  __pyx_L10:;
-
-  /* "_geod.pyx":49
- *         if not buflenlons == buflenlats == buflenaz == buflend:
- *             raise RuntimeError("Buffer lengths not the same")
- *         ndim = buflenlons//_doublesize             # <<<<<<<<<<<<<<
- *         lonsdata = <double *>londata
- *         latsdata = <double *>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_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_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_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_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_v_ndim = __pyx_t_6;
-
-  /* "_geod.pyx":50
- *             raise RuntimeError("Buffer lengths not the same")
- *         ndim = buflenlons//_doublesize
- *         lonsdata = <double *>londata             # <<<<<<<<<<<<<<
- *         latsdata = <double *>latdata
- *         azdata = <double *>azdat
- */
-  __pyx_v_lonsdata = ((double *)__pyx_v_londata);
-
-  /* "_geod.pyx":51
- *         ndim = buflenlons//_doublesize
- *         lonsdata = <double *>londata
- *         latsdata = <double *>latdata             # <<<<<<<<<<<<<<
- *         azdata = <double *>azdat
- *         distdata = <double *>distdat
- */
-  __pyx_v_latsdata = ((double *)__pyx_v_latdata);
-
-  /* "_geod.pyx":52
- *         lonsdata = <double *>londata
- *         latsdata = <double *>latdata
- *         azdata = <double *>azdat             # <<<<<<<<<<<<<<
- *         distdata = <double *>distdat
- *         for i from 0 <= i < ndim:
- */
-  __pyx_v_azdata = ((double *)__pyx_v_azdat);
-
-  /* "_geod.pyx":53
- *         latsdata = <double *>latdata
- *         azdata = <double *>azdat
- *         distdata = <double *>distdat             # <<<<<<<<<<<<<<
- *         for i from 0 <= i < ndim:
- *             if radians:
- */
-  __pyx_v_distdata = ((double *)__pyx_v_distdat);
-
-  /* "_geod.pyx":54
- *         azdata = <double *>azdat
- *         distdata = <double *>distdat
- *         for i from 0 <= i < ndim:             # <<<<<<<<<<<<<<
- *             if radians:
- *                 self.geodesic_t.p1.v = lonsdata[i]
- */
-  __pyx_t_6 = __pyx_v_ndim;
-  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) {
-
-    /* "_geod.pyx":55
- *         distdata = <double *>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;}
-    if (__pyx_t_2) {
-
-      /* "_geod.pyx":56
- *         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]
- */
-      ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.v = (__pyx_v_lonsdata[__pyx_v_i]);
-
-      /* "_geod.pyx":57
- *             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":58
- *                 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]
- *             else:
- */
-      ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA12 = (__pyx_v_azdata[__pyx_v_i]);
-
-      /* "_geod.pyx":59
- *                 self.geodesic_t.p1.u = latsdata[i]
- *                 self.geodesic_t.ALPHA12 = azdata[i]
- *                 self.geodesic_t.DIST = distdata[i]             # <<<<<<<<<<<<<<
- *             else:
- *                 self.geodesic_t.p1.v = _dg2rad*lonsdata[i]
- */
-      ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.DIST = (__pyx_v_distdata[__pyx_v_i]);
-      goto __pyx_L13;
-    }
-    /*else*/ {
-
-      /* "_geod.pyx":61
- *                 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_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_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_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_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
- *             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_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_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_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_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
- *                 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_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_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_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_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
- *                 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:
- */
-      ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.DIST = (__pyx_v_distdata[__pyx_v_i]);
-    }
-    __pyx_L13:;
-
-    /* "_geod.pyx":65
- *                 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))
- */
-    geod_pre((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t));
-
-    /* "_geod.pyx":66
- *                 self.geodesic_t.DIST = distdata[i]
- *             geod_pre(&self.geodesic_t)
- *             if pj_errno != 0:             # <<<<<<<<<<<<<<
- *                 raise RuntimeError(pj_strerrno(pj_errno))
- *             geod_for(&self.geodesic_t)
- */
-    __pyx_t_2 = (pj_errno != 0);
-    if (__pyx_t_2) {
-
-      /* "_geod.pyx":67
- *             geod_pre(&self.geodesic_t)
- *             if pj_errno != 0:
- *                 raise RuntimeError(pj_strerrno(pj_errno))             # <<<<<<<<<<<<<<
- *             geod_for(&self.geodesic_t)
- *             if pj_errno != 0:
- */
-      __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_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_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_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
-      __Pyx_Raise(__pyx_t_3, 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;}
-      goto __pyx_L14;
-    }
-    __pyx_L14:;
-
-    /* "_geod.pyx":68
- *             if pj_errno != 0:
- *                 raise RuntimeError(pj_strerrno(pj_errno))
- *             geod_for(&self.geodesic_t)             # <<<<<<<<<<<<<<
- *             if pj_errno != 0:
- *                 raise RuntimeError(pj_strerrno(pj_errno))
- */
-    geod_for((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t));
-
-    /* "_geod.pyx":69
- *                 raise RuntimeError(pj_strerrno(pj_errno))
- *             geod_for(&self.geodesic_t)
- *             if pj_errno != 0:             # <<<<<<<<<<<<<<
- *                 raise RuntimeError(pj_strerrno(pj_errno))
- *             # check for NaN.
- */
-    __pyx_t_2 = (pj_errno != 0);
-    if (__pyx_t_2) {
-
-      /* "_geod.pyx":70
- *             geod_for(&self.geodesic_t)
- *             if pj_errno != 0:
- *                 raise RuntimeError(pj_strerrno(pj_errno))             # <<<<<<<<<<<<<<
- *             # 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_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_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_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
-      __Pyx_Raise(__pyx_t_3, 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;}
-      goto __pyx_L15;
-    }
-    __pyx_L15:;
-
-    /* "_geod.pyx":72
- *                 raise RuntimeError(pj_strerrno(pj_errno))
- *             # check for NaN.
- *             if self.geodesic_t.ALPHA21 != self.geodesic_t.ALPHA21:             # <<<<<<<<<<<<<<
- *                 raise ValueError('undefined inverse geodesic (may be an antipodal point)')
- *             if radians:
- */
-    __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
- *             # 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_GOTREF(__pyx_t_3);
-      __Pyx_Raise(__pyx_t_3, 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;}
-      goto __pyx_L16;
-    }
-    __pyx_L16:;
-
-    /* "_geod.pyx":74
- *             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;}
-    if (__pyx_t_2) {
-
-      /* "_geod.pyx":75
- *                 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
- *                 azdata[i] = self.geodesic_t.ALPHA21
- */
-      (__pyx_v_lonsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v;
-
-      /* "_geod.pyx":76
- *             if radians:
- *                 lonsdata[i] = self.geodesic_t.p2.v
- *                 latsdata[i] = self.geodesic_t.p2.u             # <<<<<<<<<<<<<<
- *                 azdata[i] = self.geodesic_t.ALPHA21
- *             else:
- */
-      (__pyx_v_latsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.u;
-
-      /* "_geod.pyx":77
- *                 lonsdata[i] = self.geodesic_t.p2.v
- *                 latsdata[i] = self.geodesic_t.p2.u
- *                 azdata[i] = self.geodesic_t.ALPHA21             # <<<<<<<<<<<<<<
- *             else:
- *                 lonsdata[i] = _rad2dg*self.geodesic_t.p2.v
- */
-      (__pyx_v_azdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA21;
-      goto __pyx_L17;
-    }
-    /*else*/ {
-
-      /* "_geod.pyx":79
- *                 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_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_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_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_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      (__pyx_v_lonsdata[__pyx_v_i]) = __pyx_t_7;
-
-      /* "_geod.pyx":80
- *             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_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_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_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_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      (__pyx_v_latsdata[__pyx_v_i]) = __pyx_t_7;
-
-      /* "_geod.pyx":81
- *                 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_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_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_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_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      (__pyx_v_azdata[__pyx_v_i]) = __pyx_t_7;
-    }
-    __pyx_L17:;
-  }
-
-  __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_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "_geod.pyx":83
- *                 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
- */
-
-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;
-  PyObject *__pyx_r = NULL;
-  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;
-  double __pyx_t_7;
-  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");
-  if (unlikely(__pyx_kwds)) {
-    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
-    PyObject* values[5] = {0,0,0,0,0};
-    values[4] = __pyx_k_6;
-    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;
-    }
-    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 = 83; __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;}
-      }
-      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;}
-      }
-      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 = 83; __pyx_clineno = __LINE__; goto __pyx_L3_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];
-  } else {
-    __pyx_v_radians = __pyx_k_6;
-    switch (PyTuple_GET_SIZE(__pyx_args)) {
-      case  5:
-      __pyx_v_radians = PyTuple_GET_ITEM(__pyx_args, 4);
-      case  4:
-      __pyx_v_lats2 = PyTuple_GET_ITEM(__pyx_args, 3);
-      __pyx_v_lons2 = PyTuple_GET_ITEM(__pyx_args, 2);
-      __pyx_v_lats1 = PyTuple_GET_ITEM(__pyx_args, 1);
-      __pyx_v_lons1 = PyTuple_GET_ITEM(__pyx_args, 0);
-      break;
-      default: goto __pyx_L5_argtuple_error;
-    }
-  }
-  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_L3_error:;
-  __Pyx_AddTraceback("_geod.Geod._inv");
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_v_errmsg = Py_None; __Pyx_INCREF(Py_None);
-
-  /* "_geod.pyx":93
- *         cdef void *londata, *latdata, *azdat, *distdat
- *         # 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":94
- *         # 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);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L6;
-  }
-  __pyx_L6:;
-
-  /* "_geod.pyx":95
- *         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":96
- *             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);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L7;
-  }
-  __pyx_L7:;
-
-  /* "_geod.pyx":97
- *         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":98
- *             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);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L8;
-  }
-  __pyx_L8:;
-
-  /* "_geod.pyx":99
- *         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":100
- *             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);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L9;
-  }
-  __pyx_L9:;
-
-  /* "_geod.pyx":102
- *             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":103
- *         # process data in buffer
- *         if not buflenlons == buflenlats == buflenaz == buflend:
- *             raise RuntimeError("Buffer lengths not the same")             # <<<<<<<<<<<<<<
- *         ndim = buflenlons//_doublesize
- *         lonsdata = <double *>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_GOTREF(__pyx_t_3);
-    __Pyx_Raise(__pyx_t_3, 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;}
-    goto __pyx_L10;
-  }
-  __pyx_L10:;
-
-  /* "_geod.pyx":104
- *         if not buflenlons == buflenlats == buflenaz == buflend:
- *             raise RuntimeError("Buffer lengths not the same")
- *         ndim = buflenlons//_doublesize             # <<<<<<<<<<<<<<
- *         lonsdata = <double *>londata
- *         latsdata = <double *>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_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_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_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_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_v_ndim = __pyx_t_6;
-
-  /* "_geod.pyx":105
- *             raise RuntimeError("Buffer lengths not the same")
- *         ndim = buflenlons//_doublesize
- *         lonsdata = <double *>londata             # <<<<<<<<<<<<<<
- *         latsdata = <double *>latdata
- *         azdata = <double *>azdat
- */
-  __pyx_v_lonsdata = ((double *)__pyx_v_londata);
-
-  /* "_geod.pyx":106
- *         ndim = buflenlons//_doublesize
- *         lonsdata = <double *>londata
- *         latsdata = <double *>latdata             # <<<<<<<<<<<<<<
- *         azdata = <double *>azdat
- *         distdata = <double *>distdat
- */
-  __pyx_v_latsdata = ((double *)__pyx_v_latdata);
-
-  /* "_geod.pyx":107
- *         lonsdata = <double *>londata
- *         latsdata = <double *>latdata
- *         azdata = <double *>azdat             # <<<<<<<<<<<<<<
- *         distdata = <double *>distdat
- *         errmsg = 'undefined inverse geodesic (may be an antipodal point)'
- */
-  __pyx_v_azdata = ((double *)__pyx_v_azdat);
-
-  /* "_geod.pyx":108
- *         latsdata = <double *>latdata
- *         azdata = <double *>azdat
- *         distdata = <double *>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":109
- *         azdata = <double *>azdat
- *         distdata = <double *>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_DECREF(__pyx_v_errmsg);
-  __pyx_v_errmsg = ((PyObject *)__pyx_kp_s_4);
-
-  /* "_geod.pyx":110
- *         distdata = <double *>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]
- */
-  __pyx_t_6 = __pyx_v_ndim;
-  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) {
-
-    /* "_geod.pyx":111
- *         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;}
-    if (__pyx_t_2) {
-
-      /* "_geod.pyx":112
- *         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]
- */
-      ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.v = (__pyx_v_lonsdata[__pyx_v_i]);
-
-      /* "_geod.pyx":113
- *             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":114
- *                 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]
- *             else:
- */
-      ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v = (__pyx_v_azdata[__pyx_v_i]);
-
-      /* "_geod.pyx":115
- *                 self.geodesic_t.p1.u = latsdata[i]
- *                 self.geodesic_t.p2.v = azdata[i]
- *                 self.geodesic_t.p2.u = distdata[i]             # <<<<<<<<<<<<<<
- *             else:
- *                 self.geodesic_t.p1.v = _dg2rad*lonsdata[i]
- */
-      ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.u = (__pyx_v_distdata[__pyx_v_i]);
-      goto __pyx_L13;
-    }
-    /*else*/ {
-
-      /* "_geod.pyx":117
- *                 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_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_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_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_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
- *             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_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_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_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_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
- *                 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_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_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_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_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
- *                 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_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_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_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_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
- *                 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":122
- *                 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:
- */
-    __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_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))
- */
-      __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_GOTREF(__pyx_t_5);
-      __Pyx_Raise(__pyx_t_5, 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;}
-      goto __pyx_L14;
-    }
-    __pyx_L14:;
-
-    /* "_geod.pyx":124
- *             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))
- *             if radians:
- */
-    __pyx_t_2 = (pj_errno != 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))             # <<<<<<<<<<<<<<
- *             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_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_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_GOTREF(__pyx_t_5);
-      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
-      __Pyx_Raise(__pyx_t_5, 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;}
-      goto __pyx_L15;
-    }
-    __pyx_L15:;
-
-    /* "_geod.pyx":126
- *             if pj_errno != 0:
- *                 raise RuntimeError(pj_strerrno(pj_errno))
- *             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;}
-    if (__pyx_t_2) {
-
-      /* "_geod.pyx":127
- *                 raise RuntimeError(pj_strerrno(pj_errno))
- *             if radians:
- *                 lonsdata[i] = self.geodesic_t.ALPHA12             # <<<<<<<<<<<<<<
- *                 latsdata[i] = self.geodesic_t.ALPHA21
- *             else:
- */
-      (__pyx_v_lonsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA12;
-
-      /* "_geod.pyx":128
- *             if radians:
- *                 lonsdata[i] = self.geodesic_t.ALPHA12
- *                 latsdata[i] = self.geodesic_t.ALPHA21             # <<<<<<<<<<<<<<
- *             else:
- *                 lonsdata[i] = _rad2dg*self.geodesic_t.ALPHA12
- */
-      (__pyx_v_latsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA21;
-      goto __pyx_L16;
-    }
-    /*else*/ {
-
-      /* "_geod.pyx":130
- *                 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_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_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_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_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      (__pyx_v_lonsdata[__pyx_v_i]) = __pyx_t_7;
-
-      /* "_geod.pyx":131
- *             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_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_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_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_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      (__pyx_v_latsdata[__pyx_v_i]) = __pyx_t_7;
-    }
-    __pyx_L16:;
-
-    /* "_geod.pyx":132
- *                 lonsdata[i] = _rad2dg*self.geodesic_t.ALPHA12
- *                 latsdata[i] = _rad2dg*self.geodesic_t.ALPHA21
- *             azdata[i] = self.geodesic_t.DIST             # <<<<<<<<<<<<<<
- * 
- *     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_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_r = NULL;
-  __pyx_L0:;
-  __Pyx_DECREF(__pyx_v_errmsg);
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "_geod.pyx":134
- *             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."""
- */
-
-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;
-  PyObject *__pyx_v_lons;
-  PyObject *__pyx_r = NULL;
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  double __pyx_t_5;
-  long __pyx_t_6;
-  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");
-  if (unlikely(__pyx_kwds)) {
-    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
-    PyObject* values[6] = {0,0,0,0,0,0};
-    values[5] = __pyx_k_9;
-    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;
-    }
-    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 = 134; __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;}
-      }
-      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;}
-      }
-      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;}
-      }
-      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 = 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 = 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_radians = values[5];
-  } else {
-    __pyx_v_radians = __pyx_k_9;
-    switch (PyTuple_GET_SIZE(__pyx_args)) {
-      case  6:
-      __pyx_v_radians = PyTuple_GET_ITEM(__pyx_args, 5);
-      case  5:
-      __pyx_v_npts = __Pyx_PyInt_AsInt(PyTuple_GET_ITEM(__pyx_args, 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_lat2 = __pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(__pyx_args, 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_lon2 = __pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(__pyx_args, 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_lat1 = __pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(__pyx_args, 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_lon1 = __pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(__pyx_args, 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;}
-      break;
-      default: goto __pyx_L5_argtuple_error;
-    }
-  }
-  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_L3_error:;
-  __Pyx_AddTraceback("_geod.Geod._npts");
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_v_lats = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
-  __pyx_v_lons = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
-
-  /* "_geod.pyx":139
- *         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;}
-  if (__pyx_t_1) {
-
-    /* "_geod.pyx":140
- *         cdef double del_s
- *         if radians:
- *             self.geodesic_t.p1.v = lon1             # <<<<<<<<<<<<<<
- *             self.geodesic_t.p1.u = lat1
- *             self.geodesic_t.p2.v = lon2
- */
-    ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.v = __pyx_v_lon1;
-
-    /* "_geod.pyx":141
- *         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":142
- *             self.geodesic_t.p1.v = lon1
- *             self.geodesic_t.p1.u = lat1
- *             self.geodesic_t.p2.v = lon2             # <<<<<<<<<<<<<<
- *             self.geodesic_t.p2.u = lat2
- *         else:
- */
-    ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v = __pyx_v_lon2;
-
-    /* "_geod.pyx":143
- *             self.geodesic_t.p1.u = lat1
- *             self.geodesic_t.p2.v = lon2
- *             self.geodesic_t.p2.u = lat2             # <<<<<<<<<<<<<<
- *         else:
- *             self.geodesic_t.p1.v = _dg2rad*lon1
- */
-    ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.u = __pyx_v_lat2;
-    goto __pyx_L6;
-  }
-  /*else*/ {
-
-    /* "_geod.pyx":145
- *             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_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_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_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_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
- *         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_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_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_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_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
- *             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_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_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_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_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
- *             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_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_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_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_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
- *             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_inv((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t));
-
-  /* "_geod.pyx":152
- *         geod_inv(&self.geodesic_t)
- *         # set up some constants needed for forward computation.
- *         geod_pre(&self.geodesic_t)             # <<<<<<<<<<<<<<
- *         # distance increment.
- *         del_s = self.geodesic_t.DIST/(npts+1)
- */
-  geod_pre((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t));
-
-  /* "_geod.pyx":154
- *         geod_pre(&self.geodesic_t)
- *         # distance increment.
- *         del_s = self.geodesic_t.DIST/(npts+1)             # <<<<<<<<<<<<<<
- *         # initialize output tuples.
- *         lats = ()
- */
-  __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_v_del_s = (((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.DIST / __pyx_t_6);
-
-  /* "_geod.pyx":156
- *         del_s = self.geodesic_t.DIST/(npts+1)
- *         # initialize output tuples.
- *         lats = ()             # <<<<<<<<<<<<<<
- *         lons = ()
- *         # loop over intermediate points, compute lat/lons.
- */
-  __Pyx_INCREF(((PyObject *)__pyx_empty_tuple));
-  __Pyx_DECREF(((PyObject *)__pyx_v_lats));
-  __pyx_v_lats = __pyx_empty_tuple;
-
-  /* "_geod.pyx":157
- *         # 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_DECREF(((PyObject *)__pyx_v_lons));
-  __pyx_v_lons = __pyx_empty_tuple;
-
-  /* "_geod.pyx":159
- *         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)
- */
-  __pyx_t_6 = (__pyx_v_npts + 1);
-  for (__pyx_v_i = 1; __pyx_v_i < __pyx_t_6; __pyx_v_i++) {
-
-    /* "_geod.pyx":160
- *         # 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:
- */
-    ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.DIST = (__pyx_v_i * __pyx_v_del_s);
-
-    /* "_geod.pyx":161
- *         for i from 1 <= i < npts+1:
- *             self.geodesic_t.DIST = i*del_s
- *             geod_for(&self.geodesic_t)             # <<<<<<<<<<<<<<
- *             if radians:
- *                 lats = lats + (self.geodesic_t.p2.u,)
- */
-    geod_for((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t));
-
-    /* "_geod.pyx":162
- *             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;}
-    if (__pyx_t_1) {
-
-      /* "_geod.pyx":163
- *             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_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_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_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
- *             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_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_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_GOTREF(((PyObject *)__pyx_t_2));
-      __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
-      __Pyx_DECREF(((PyObject *)__pyx_v_lons));
-      __pyx_v_lons = __pyx_t_2;
-      __pyx_t_2 = 0;
-      goto __pyx_L9;
-    }
-    /*else*/ {
-
-      /* "_geod.pyx":166
- *                 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_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_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_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_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_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
- *             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_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_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_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_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_GOTREF(((PyObject *)__pyx_t_2));
-      __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
-      __Pyx_DECREF(((PyObject *)__pyx_v_lons));
-      __pyx_v_lons = __pyx_t_2;
-      __pyx_t_2 = 0;
-    }
-    __pyx_L9:;
-  }
-
-  /* "_geod.pyx":168
- *                 lats = lats + (_rad2dg*self.geodesic_t.p2.u,)
- *                 lons = lons + (_rad2dg*self.geodesic_t.p2.v,)
- *         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 = 168; __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));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_lons));
-  __Pyx_INCREF(((PyObject *)__pyx_v_lats));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_lats));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_lats));
-  __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_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("_geod.Geod._npts");
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_DECREF(__pyx_v_lats);
-  __Pyx_DECREF(__pyx_v_lons);
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  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_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_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_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_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_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_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":170
- *         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;
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_t_4;
-  __Pyx_RefNannySetupContext("_strencode");
-  if (__pyx_optional_args) {
-    if (__pyx_optional_args->__pyx_n > 0) {
-      __pyx_v_encoding = __pyx_optional_args->encoding;
-    }
-  }
-
-  /* "_geod.pyx":172
- * cdef _strencode(pystr,encoding='ascii'):
- *     # encode a string into bytes.  If already bytes, do nothing.
- *     try:             # <<<<<<<<<<<<<<
- *         return pystr.encode(encoding)
- *     except AttributeError:
- */
-  {
-    PyObject *__pyx_save_exc_type, *__pyx_save_exc_value, *__pyx_save_exc_tb;
-    __Pyx_ExceptionSave(&__pyx_save_exc_type, &__pyx_save_exc_value, &__pyx_save_exc_tb);
-    __Pyx_XGOTREF(__pyx_save_exc_type);
-    __Pyx_XGOTREF(__pyx_save_exc_value);
-    __Pyx_XGOTREF(__pyx_save_exc_tb);
-    /*try:*/ {
-
-      /* "_geod.pyx":173
- *     # 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_1 = PyObject_GetAttr(__pyx_v_pystr, __pyx_n_s__encode); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-      __Pyx_INCREF(__pyx_v_encoding);
-      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_encoding);
-      __Pyx_GIVEREF(__pyx_v_encoding);
-      __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-      __pyx_r = __pyx_t_3;
-      __pyx_t_3 = 0;
-      goto __pyx_L7_try_return;
-    }
-    __Pyx_XDECREF(__pyx_save_exc_type); __pyx_save_exc_type = 0;
-    __Pyx_XDECREF(__pyx_save_exc_value); __pyx_save_exc_value = 0;
-    __Pyx_XDECREF(__pyx_save_exc_tb); __pyx_save_exc_tb = 0;
-    goto __pyx_L10_try_end;
-    __pyx_L7_try_return:;
-    __Pyx_XGIVEREF(__pyx_save_exc_type);
-    __Pyx_XGIVEREF(__pyx_save_exc_value);
-    __Pyx_XGIVEREF(__pyx_save_exc_tb);
-    __Pyx_ExceptionReset(__pyx_save_exc_type, __pyx_save_exc_value, __pyx_save_exc_tb);
-    goto __pyx_L0;
-    __pyx_L3_error:;
-    __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;
-
-    /* "_geod.pyx":174
- *     try:
- *         return pystr.encode(encoding)
- *     except AttributeError:             # <<<<<<<<<<<<<<
- *         return pystr # already bytes?
- */
-    __pyx_t_4 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
-    if (__pyx_t_4) {
-      __Pyx_AddTraceback("_geod._strencode");
-      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_GOTREF(__pyx_t_1);
-
-      /* "_geod.pyx":175
- *         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_1); __pyx_t_1 = 0;
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      goto __pyx_L6_except_return;
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      goto __pyx_L4_exception_handled;
-    }
-    __pyx_L5_except_error:;
-    __Pyx_XGIVEREF(__pyx_save_exc_type);
-    __Pyx_XGIVEREF(__pyx_save_exc_value);
-    __Pyx_XGIVEREF(__pyx_save_exc_tb);
-    __Pyx_ExceptionReset(__pyx_save_exc_type, __pyx_save_exc_value, __pyx_save_exc_tb);
-    goto __pyx_L1_error;
-    __pyx_L6_except_return:;
-    __Pyx_XGIVEREF(__pyx_save_exc_type);
-    __Pyx_XGIVEREF(__pyx_save_exc_value);
-    __Pyx_XGIVEREF(__pyx_save_exc_tb);
-    __Pyx_ExceptionReset(__pyx_save_exc_type, __pyx_save_exc_value, __pyx_save_exc_tb);
-    goto __pyx_L0;
-    __pyx_L4_exception_handled:;
-    __Pyx_XGIVEREF(__pyx_save_exc_type);
-    __Pyx_XGIVEREF(__pyx_save_exc_value);
-    __Pyx_XGIVEREF(__pyx_save_exc_tb);
-    __Pyx_ExceptionReset(__pyx_save_exc_type, __pyx_save_exc_value, __pyx_save_exc_tb);
-    __pyx_L10_try_end:;
-  }
-
-  __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_AddTraceback("_geod._strencode");
-  __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;
-  }
-  return o;
-}
-
-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("_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*/
-  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|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_5_geod_Geod, /*tp_traverse*/
-  __pyx_tp_clear_5_geod_Geod, /*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_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_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__ALPHA12, __pyx_k__ALPHA12, sizeof(__pyx_k__ALPHA12), 0, 0, 1, 1},
-  {&__pyx_n_s__ALPHA21, __pyx_k__ALPHA21, sizeof(__pyx_k__ALPHA21), 0, 0, 1, 1},
-  {&__pyx_n_s__AttributeError, __pyx_k__AttributeError, sizeof(__pyx_k__AttributeError), 0, 0, 1, 1},
-  {&__pyx_n_s__DIST, __pyx_k__DIST, sizeof(__pyx_k__DIST), 0, 0, 1, 1},
-  {&__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__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__geodesic_t, __pyx_k__geodesic_t, sizeof(__pyx_k__geodesic_t), 0, 0, 1, 1},
-  {&__pyx_n_s__geodinitstring, __pyx_k__geodinitstring, sizeof(__pyx_k__geodinitstring), 0, 0, 1, 1},
-  {&__pyx_n_s__geodstring, __pyx_k__geodstring, sizeof(__pyx_k__geodstring), 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__p1, __pyx_k__p1, sizeof(__pyx_k__p1), 0, 0, 1, 1},
-  {&__pyx_n_s__p2, __pyx_k__p2, sizeof(__pyx_k__p2), 0, 0, 1, 1},
-  {&__pyx_n_s__proj_version, __pyx_k__proj_version, sizeof(__pyx_k__proj_version), 0, 0, 1, 1},
-  {&__pyx_n_s__radians, __pyx_k__radians, sizeof(__pyx_k__radians), 0, 0, 1, 1},
-  {&__pyx_n_s__u, __pyx_k__u, sizeof(__pyx_k__u), 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 = 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;}
-  return 0;
-  __pyx_L1_error:;
-  return -1;
-}
-
-static int __Pyx_InitCachedConstants(void) {
-  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants");
-
-  /* "_geod.pyx":48
- *         # process data in buffer
- *         if not buflenlons == buflenlats == buflenaz == buflend:
- *             raise RuntimeError("Buffer lengths not the same")             # <<<<<<<<<<<<<<
- *         ndim = buflenlons//_doublesize
- *         lonsdata = <double *>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_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
- *             # 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_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
- *         # process data in buffer
- *         if not buflenlons == buflenlats == buflenaz == buflend:
- *             raise RuntimeError("Buffer lengths not the same")             # <<<<<<<<<<<<<<
- *         ndim = buflenlons//_doublesize
- *         lonsdata = <double *>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_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_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))
- */
-  __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_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_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;
-  #if CYTHON_REFNANNY
-  void* __pyx_refnanny = NULL;
-  __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");
-  }
-  __pyx_refnanny = __Pyx_RefNanny->SetupContext("PyMODINIT_FUNC PyInit__geod(void)", __LINE__, __FILE__);
-  #endif
-  __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 ---*/
-  /*--- 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;}
-  __pyx_ptype_5_geod_Geod = &__pyx_type_5_geod_Geod;
-  /*--- Type import code ---*/
-  /*--- Function import code ---*/
-  /*--- Execution code ---*/
-
-  /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":1
- * import math             # <<<<<<<<<<<<<<
- * 
- * _dg2rad = math.radians(1.)
- */
-  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__math), 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __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;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-
-  /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":3
- * import math
- * 
- * _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_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_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_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_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_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_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-
-  /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":4
- * 
- * _dg2rad = math.radians(1.)
- * _rad2dg = math.degrees(1.)             # <<<<<<<<<<<<<<
- * _doublesize = sizeof(double)
- * __version__ = "1.8.9"
- */
-  __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);
-  __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_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_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_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_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_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-
-  /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":5
- * _dg2rad = math.radians(1.)
- * _rad2dg = math.degrees(1.)
- * _doublesize = sizeof(double)             # <<<<<<<<<<<<<<
- * __version__ = "1.8.9"
- * 
- */
-  __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_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;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-
-  /* "/Volumes/User/jwhitaker/python/pyproj/_pyproj.pxi":6
- * _rad2dg = math.degrees(1.)
- * _doublesize = sizeof(double)
- * __version__ = "1.8.9"             # <<<<<<<<<<<<<<
- * 
- * 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":27
- *         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_GOTREF(__pyx_t_1);
-  __pyx_k_1 = __pyx_t_1;
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "_geod.pyx":83
- *                 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_GOTREF(__pyx_t_1);
-  __pyx_k_6 = __pyx_t_1;
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "_geod.pyx":134
- *             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_GOTREF(__pyx_t_1);
-  __pyx_k_9 = __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.             # <<<<<<<<<<<<<<
- * 
- * 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));
-  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");
-    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 */
-
-static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) {
-    PyObject *result;
-    result = PyObject_GetAttr(dict, name);
-    if (!result)
-        PyErr_SetObject(PyExc_NameError, name);
-    return result;
-}
-
-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 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 *number, *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";
-    }
-    number = (num_expected == 1) ? "" : "s";
-    PyErr_Format(PyExc_TypeError,
-        #if PY_VERSION_HEX < 0x02050000
-            "%s() takes %s %d positional argument%s (%d given)",
-        #else
-            "%s() takes %s %zd positional argument%s (%zd given)",
-        #endif
-        func_name, more_or_less, num_expected, number, 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();
-
-    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) {
-    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 <class>, <instance> */
-        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) {
-    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;
-    }
-
-    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 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) {
-    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;
-    module = PyObject_CallFunctionObjArgs(py_import,
-        name, global_dict, empty_dict, list, NULL);
-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 PyLong_AsUnsignedLong(x);
-        } else {
-            return 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 PyLong_AsUnsignedLongLong(x);
-        } else {
-            return 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 PyLong_AsUnsignedLong(x);
-        } else {
-            return 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 PyLong_AsUnsignedLongLong(x);
-        } else {
-            return 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 PyLong_AsUnsignedLong(x);
-        } else {
-            return 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 PyLong_AsUnsignedLongLong(x);
-        } else {
-            return 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;
-    }
-}
-
-#include "compile.h"
-#include "frameobject.h"
-#include "traceback.h"
-
-static void __Pyx_AddTraceback(const char *funcname) {
-    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/_geod.pyx b/_geod.pyx
deleted file mode 100644
index 2de8f02..0000000
--- a/_geod.pyx
+++ /dev/null
@@ -1,175 +0,0 @@
-# Make changes to this file, not the c-wrappers that Pyrex generates.
-
-include "_pyproj.pxi"
-
-cdef class Geod:
-    cdef GEODESIC_T geodesic_t
-    cdef public object geodstring
-    cdef public object proj_version
-    cdef char *geodinitstring
-
-    def __cinit__(self, geodstring):
-        cdef GEODESIC_T GEOD_T
-        # 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))
-        self.proj_version = PJ_VERSION/100.
-
-    def __reduce__(self):
-        """special method that allows pyproj.Geod instance to be pickled"""
-        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 
- 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.
-        """
-        cdef Py_ssize_t buflenlons, buflenlats, buflenaz, buflend, ndim, i
-        cdef double *lonsdata, *latsdata, *azdata, *distdata
-        cdef void *londata, *latdata, *azdat, *distdat
-        # 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 = <double *>londata
-        latsdata = <double *>latdata
-        azdata = <double *>azdat
-        distdata = <double *>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]
-            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)
-            if pj_errno != 0:
-                raise RuntimeError(pj_strerrno(pj_errno))
-            geod_for(&self.geodesic_t)
-            if pj_errno != 0:
-                raise RuntimeError(pj_strerrno(pj_errno))
-            # 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
-                latsdata[i] = self.geodesic_t.p2.u
-                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
-
-    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
-        # 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 = <double *>londata
-        latsdata = <double *>latdata
-        azdata = <double *>azdat
-        distdata = <double *>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.geodesic_t.p1.u = latsdata[i]
-                self.geodesic_t.p2.v = azdata[i]
-                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]
-                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:
-                raise RuntimeError(pj_strerrno(pj_errno))
-            if radians:
-                lonsdata[i] = self.geodesic_t.ALPHA12
-                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
-
-    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.geodesic_t.p1.v = lon1
-            self.geodesic_t.p1.u = lat1
-            self.geodesic_t.p2.v = lon2
-            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
-            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)
-        # distance increment.
-        del_s = self.geodesic_t.DIST/(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)
-            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,)
-                lons = lons + (_rad2dg*self.geodesic_t.p2.v,)
-        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/_proj.c b/_proj.c
index d50c620..2b9e695 100644
--- a/_proj.c
+++ b/_proj.c
@@ -1,16 +1,16 @@
-/* Generated by Cython 0.14.1 on Fri Mar  4 16:35:03 2011 */
+/* Generated by Cython 0.17.4 on Sat Jan  5 16:03:47 2013 */
 
 #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.
+#elif PY_VERSION_HEX < 0x02040000
+    #error Cython requires Python 2.4+.
 #else
-
 #include <stddef.h> /* For offsetof */
 #ifndef offsetof
 #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
 #endif
-
 #if !defined(WIN32) && !defined(MS_WINDOWS)
   #ifndef __stdcall
     #define __stdcall
@@ -22,36 +22,47 @@
     #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)
+#ifndef Py_HUGE_VAL
+  #define Py_HUGE_VAL HUGE_VAL
+#endif
+#ifdef PYPY_VERSION
+#define CYTHON_COMPILING_IN_PYPY 1
+#define CYTHON_COMPILING_IN_CPYTHON 0
+#else
+#define CYTHON_COMPILING_IN_PYPY 0
+#define CYTHON_COMPILING_IN_CPYTHON 1
 #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 CYTHON_FORMAT_SSIZE_T ""
   #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
-  #define PyInt_AsSsize_t(o)   PyInt_AsLong(o)
-  #define PyNumber_Index(o)    PyNumber_Int(o)
-  #define PyIndex_Check(o)     PyNumber_Check(o)
+  #define PyInt_AsSsize_t(o)   __Pyx_PyInt_AsInt(o)
+  #define PyNumber_Index(o)    ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \
+                                (PyErr_Format(PyExc_TypeError, \
+                                              "expected index value, got %.200s", Py_TYPE(o)->tp_name), \
+                                 (PyObject*)0))
+  #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \
+                                  !PyComplex_Check(o))
+  #define PyIndex_Check __Pyx_PyIndex_Check
   #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message)
+  #define __PYX_BUILD_PY_SSIZE_T "i"
+#else
+  #define __PYX_BUILD_PY_SSIZE_T "n"
+  #define CYTHON_FORMAT_SSIZE_T "z"
+  #define __Pyx_PyIndex_Check PyIndex_Check
 #endif
-
 #if PY_VERSION_HEX < 0x02060000
   #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
   #define Py_TYPE(ob)   (((PyObject*)(ob))->ob_type)
@@ -59,7 +70,6 @@
   #define PyVarObject_HEAD_INIT(type, size) \
           PyObject_HEAD_INIT(type) size,
   #define PyType_Modified(t)
-
   typedef struct {
      void *buf;
      PyObject *obj;
@@ -73,7 +83,6 @@
      Py_ssize_t *suboffsets;
      void *internal;
   } Py_buffer;
-
   #define PyBUF_SIMPLE 0
   #define PyBUF_WRITABLE 0x0001
   #define PyBUF_FORMAT 0x0004
@@ -83,24 +92,44 @@
   #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
   #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
   #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
-
+  #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE)
+  #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE)
+  typedef int (*getbufferproc)(PyObject *, Py_buffer *, int);
+  typedef void (*releasebufferproc)(PyObject *, Py_buffer *);
 #endif
-
 #if PY_MAJOR_VERSION < 3
   #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
+  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
+          PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
 #else
   #define __Pyx_BUILTIN_MODULE_NAME "builtins"
+  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
+          PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+#endif
+#if PY_MAJOR_VERSION < 3 && PY_MINOR_VERSION < 6
+  #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict")
 #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_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
+  #define CYTHON_PEP393_ENABLED 1
+  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ? \
+                                              0 : _PyUnicode_Ready((PyObject *)(op)))
+  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
+  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
+  #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
+#else
+  #define CYTHON_PEP393_ENABLED 0
+  #define __Pyx_PyUnicode_READY(op)       (0)
+  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
+  #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
+  #define __Pyx_PyUnicode_READ(k, d, i)   ((k=k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
+#endif
 #if PY_MAJOR_VERSION >= 3
   #define PyBaseString_Type            PyUnicode_Type
   #define PyStringObject               PyUnicodeObject
@@ -108,7 +137,6 @@
   #define PyString_Check               PyUnicode_Check
   #define PyString_CheckExact          PyUnicode_CheckExact
 #endif
-
 #if PY_VERSION_HEX < 0x02060000
   #define PyBytesObject                PyStringObject
   #define PyBytes_Type                 PyString_Type
@@ -127,7 +155,6 @@
   #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)
@@ -135,9 +162,7 @@
 #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
@@ -154,20 +179,17 @@
   #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
   #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
 #endif
-
 #if PY_MAJOR_VERSION >= 3
   #define PyBoolObject                 PyLongObject
 #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)
+#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_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
-  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
+  #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
+  #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t
 #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)
@@ -186,11 +208,9 @@
         (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))
@@ -200,7 +220,6 @@
   #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))
@@ -209,21 +228,35 @@
   #define __Pyx_DOCSTR(n)  (n)
 #endif
 
-#ifdef __cplusplus
-#define __PYX_EXTERN_C extern "C"
+
+#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_EXTERN_C extern
+  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
+  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
+#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 <math.h>
+#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 <omp.h>
+#endif /* _OPENMP */
 
 #ifdef PYREX_WITHOUT_ASSERTIONS
 #define CYTHON_WITHOUT_ASSERTIONS
@@ -251,7 +284,7 @@
 #   else
 #     define CYTHON_UNUSED
 #   endif
-# elif defined(__ICC) || defined(__INTEL_COMPILER)
+# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
 #   define CYTHON_UNUSED __attribute__ ((__unused__))
 # else
 #   define CYTHON_UNUSED
@@ -266,6 +299,7 @@ typedef struct {PyObject **p; char *s; const long n; const char* encoding; const
 #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);
@@ -274,21 +308,25 @@ 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*);
 
+#if CYTHON_COMPILING_IN_CPYTHON
 #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
-
+#else
+#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
+#endif
+#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_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 ... */
+  /* 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)
+  #define likely(x)   (x)
+  #define unlikely(x) (x)
 #endif /* __GNUC__ */
     
 static PyObject *__pyx_m;
@@ -303,44 +341,58 @@ static const char *__pyx_filename;
 
 static const char *__pyx_f[] = {
   "_proj.pyx",
-  "_pyproj.pxi",
 };
 
-/* Type declarations */
+/*--- Type declarations ---*/
+struct __pyx_obj_5_proj_Proj;
+struct __pyx_obj_5_proj_Geod;
+struct __pyx_opt_args_5_proj__strencode;
 
-/* "_proj.pyx":281
+/* "_proj.pyx":346
  *             yy[i] = yy[i]*_rad2dg
  * 
  * cdef _strencode(pystr,encoding='ascii'):             # <<<<<<<<<<<<<<
  *     # encode a string into bytes.  If already bytes, do nothing.
  *     try:
  */
-
 struct __pyx_opt_args_5_proj__strencode {
   int __pyx_n;
   PyObject *encoding;
 };
 
-/* "_proj.pyx":13
+/* "_proj.pyx":62
  *     pj_set_searchpath(1, &searchpath)
  * 
  * 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;
 };
 
+
+/* "_proj.pyx":353
+ *         return pystr # already bytes?
+ * 
+ * cdef class Geod:             # <<<<<<<<<<<<<<
+ *     cdef Geodesic _Geodesic
+ *     cdef public object initstring
+ */
+struct __pyx_obj_5_proj_Geod {
+  PyObject_HEAD
+  struct Geodesic _Geodesic;
+  PyObject *initstring;
+};
+
 #ifndef CYTHON_REFNANNY
   #define CYTHON_REFNANNY 0
 #endif
-
 #if CYTHON_REFNANNY
   typedef struct {
     void (*INCREF)(void*, PyObject*, int);
@@ -351,44 +403,54 @@ struct __pyx_obj_5_proj_Proj {
     void (*FinishContext)(void**);
   } __Pyx_RefNannyAPIStruct;
   static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
-  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;
-  }
-  #define __Pyx_RefNannySetupContext(name)           void *__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__)
+  static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/
+  #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
+#ifdef WITH_THREAD
+  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
+          if (acquire_gil) { \
+              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \
+              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
+              PyGILState_Release(__pyx_gilstate_save); \
+          } else { \
+              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
+          }
+#else
+  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
+          __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
+#endif
+  #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_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r);} } while(0)
+  #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_RefNannySetupContext(name)
+  #define __Pyx_RefNannyDeclarations
+  #define __Pyx_RefNannySetupContext(name, acquire_gil)
   #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 */
-#define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);} } while(0)
-#define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r);} } while(0)
+#define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
+#define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
 
 static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
 
-static void __Pyx_RaiseDoubleKeywordsError(
-    const char* func_name, PyObject* kw_name); /*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 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*/
@@ -396,7 +458,7 @@ static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
 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); /*proto*/
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/
 
 static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
     const char *name, int exact); /*proto*/
@@ -408,7 +470,7 @@ static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);
 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); /*proto*/
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level); /*proto*/
 
 static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *);
 
@@ -442,101 +504,195 @@ static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *);
 
 static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *);
 
-static void __Pyx_AddTraceback(const char *funcname); /*proto*/
+static int __Pyx_check_binary_version(void);
+
+typedef struct {
+    int code_line;
+    PyCodeObject* code_object;
+} __Pyx_CodeObjectCacheEntry;
+struct __Pyx_CodeObjectCache {
+    int count;
+    int max_count;
+    __Pyx_CodeObjectCacheEntry* entries;
+};
+static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
+static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
+static PyCodeObject *__pyx_find_code_object(int code_line);
+static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
+
+static void __Pyx_AddTraceback(const char *funcname, int c_line,
+                               int py_line, const char *filename); /*proto*/
 
 static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
-/* Module declarations from _proj */
 
+
+/* Module declarations from '_proj' */
 static PyTypeObject *__pyx_ptype_5_proj_Proj = 0;
+static PyTypeObject *__pyx_ptype_5_proj_Geod = 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"
-static int __pyx_module_is_main__proj = 0;
+int __pyx_module_is_main__proj = 0;
 
-/* Implementation of _proj */
+/* Implementation of '_proj' */
 static PyObject *__pyx_builtin_RuntimeError;
 static PyObject *__pyx_builtin_AttributeError;
+static PyObject *__pyx_builtin_ValueError;
+static PyObject *__pyx_pf_5_proj_set_datapath(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_datapath); /* proto */
+static int __pyx_pf_5_proj_4Proj___cinit__(struct __pyx_obj_5_proj_Proj *__pyx_v_self, PyObject *__pyx_v_projstring); /* proto */
+static void __pyx_pf_5_proj_4Proj_2__dealloc__(struct __pyx_obj_5_proj_Proj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5_proj_4Proj_4__reduce__(struct __pyx_obj_5_proj_Proj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5_proj_4Proj_6_fwd(struct __pyx_obj_5_proj_Proj *__pyx_v_self, PyObject *__pyx_v_lons, PyObject *__pyx_v_lats, PyObject *__pyx_v_radians, PyObject *__pyx_v_errcheck); /* proto */
+static PyObject *__pyx_pf_5_proj_4Proj_8_inv(struct __pyx_obj_5_proj_Proj *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y, PyObject *__pyx_v_radians, PyObject *__pyx_v_errcheck); /* proto */
+static PyObject *__pyx_pf_5_proj_4Proj_10is_latlong(struct __pyx_obj_5_proj_Proj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5_proj_4Proj_12is_geocent(struct __pyx_obj_5_proj_Proj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5_proj_4Proj_12proj_version___get__(struct __pyx_obj_5_proj_Proj *__pyx_v_self); /* proto */
+static int __pyx_pf_5_proj_4Proj_12proj_version_2__set__(struct __pyx_obj_5_proj_Proj *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_5_proj_4Proj_12proj_version_4__del__(struct __pyx_obj_5_proj_Proj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5_proj_4Proj_3srs___get__(struct __pyx_obj_5_proj_Proj *__pyx_v_self); /* proto */
+static int __pyx_pf_5_proj_4Proj_3srs_2__set__(struct __pyx_obj_5_proj_Proj *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_5_proj_4Proj_3srs_4__del__(struct __pyx_obj_5_proj_Proj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5_proj_2_transform(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_5_proj_Proj *__pyx_v_p1, struct __pyx_obj_5_proj_Proj *__pyx_v_p2, PyObject *__pyx_v_inx, PyObject *__pyx_v_iny, PyObject *__pyx_v_inz, PyObject *__pyx_v_radians); /* proto */
+static int __pyx_pf_5_proj_4Geod___cinit__(struct __pyx_obj_5_proj_Geod *__pyx_v_self, PyObject *__pyx_v_a, PyObject *__pyx_v_f); /* proto */
+static PyObject *__pyx_pf_5_proj_4Geod_2__reduce__(struct __pyx_obj_5_proj_Geod *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_5_proj_4Geod_4_fwd(struct __pyx_obj_5_proj_Geod *__pyx_v_self, PyObject *__pyx_v_lons, PyObject *__pyx_v_lats, PyObject *__pyx_v_az, PyObject *__pyx_v_dist, PyObject *__pyx_v_radians); /* proto */
+static PyObject *__pyx_pf_5_proj_4Geod_6_inv(struct __pyx_obj_5_proj_Geod *__pyx_v_self, PyObject *__pyx_v_lons1, PyObject *__pyx_v_lats1, PyObject *__pyx_v_lons2, PyObject *__pyx_v_lats2, PyObject *__pyx_v_radians); /* proto */
+static PyObject *__pyx_pf_5_proj_4Geod_8_npts(struct __pyx_obj_5_proj_Geod *__pyx_v_self, double __pyx_v_lon1, double __pyx_v_lat1, double __pyx_v_lon2, double __pyx_v_lat2, int __pyx_v_npts, PyObject *__pyx_v_radians); /* proto */
+static PyObject *__pyx_pf_5_proj_4Geod_10initstring___get__(struct __pyx_obj_5_proj_Geod *__pyx_v_self); /* proto */
+static int __pyx_pf_5_proj_4Geod_10initstring_2__set__(struct __pyx_obj_5_proj_Geod *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_5_proj_4Geod_10initstring_4__del__(struct __pyx_obj_5_proj_Geod *__pyx_v_self); /* proto */
 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__u[] = "u";
-static char __pyx_k__v[] = "v";
+static char __pyx_k_17[] = "+a=%s +f=%s";
+static char __pyx_k_20[] = "undefined inverse geodesic (may be an antipodal point)";
+static char __pyx_k_26[] = "1.9.3";
+static char __pyx_k_29[] = "/Users/jsw/python/pyproj/_proj.pyx";
+static char __pyx_k__a[] = "a";
+static char __pyx_k__f[] = "f";
+static char __pyx_k__i[] = "i";
 static char __pyx_k__x[] = "x";
 static char __pyx_k__y[] = "y";
+static char __pyx_k__az[] = "az";
 static char __pyx_k__p1[] = "p1";
 static char __pyx_k__p2[] = "p2";
+static char __pyx_k__xx[] = "xx";
+static char __pyx_k__yy[] = "yy";
+static char __pyx_k__zz[] = "zz";
+static char __pyx_k__err[] = "err";
 static char __pyx_k__inx[] = "inx";
 static char __pyx_k__iny[] = "iny";
 static char __pyx_k__inz[] = "inz";
-static char __pyx_k__srs[] = "srs";
+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___proj[] = "_proj";
 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__xdata[] = "xdata";
+static char __pyx_k__ydata[] = "ydata";
+static char __pyx_k__zdata[] = "zdata";
 static char __pyx_k__encode[] = "encode";
-static char __pyx_k__projpj[] = "projpj";
-static char __pyx_k___dg2rad[] = "_dg2rad";
-static char __pyx_k___rad2dg[] = "_rad2dg";
+static char __pyx_k__buflenx[] = "buflenx";
+static char __pyx_k__bufleny[] = "bufleny";
+static char __pyx_k__buflenz[] = "buflenz";
+static char __pyx_k__bytestr[] = "bytestr";
 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__datapath[] = "datapath";
 static char __pyx_k__errcheck[] = "errcheck";
 static char __pyx_k____class__[] = "__class__";
+static char __pyx_k__ValueError[] = "ValueError";
 static char __pyx_k___transform[] = "_transform";
 static char __pyx_k__is_latlong[] = "is_latlong";
 static char __pyx_k__projstring[] = "projstring";
+static char __pyx_k__searchpath[] = "searchpath";
 static char __pyx_k____version__[] = "__version__";
 static char __pyx_k___doublesize[] = "_doublesize";
 static char __pyx_k__RuntimeError[] = "RuntimeError";
-static char __pyx_k__pjinitstring[] = "pjinitstring";
-static char __pyx_k__proj_version[] = "proj_version";
 static char __pyx_k__set_datapath[] = "set_datapath";
 static char __pyx_k__AttributeError[] = "AttributeError";
 static PyObject *__pyx_kp_s_15;
 static PyObject *__pyx_kp_s_17;
+static PyObject *__pyx_kp_s_20;
+static PyObject *__pyx_kp_s_26;
+static PyObject *__pyx_kp_s_29;
 static PyObject *__pyx_kp_s_3;
 static PyObject *__pyx_kp_s_5;
 static PyObject *__pyx_n_s__AttributeError;
 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___proj;
-static PyObject *__pyx_n_s___rad2dg;
 static PyObject *__pyx_n_s___transform;
+static PyObject *__pyx_n_s__a;
 static PyObject *__pyx_n_s__ascii;
+static PyObject *__pyx_n_s__az;
+static PyObject *__pyx_n_s__buflenx;
+static PyObject *__pyx_n_s__bufleny;
+static PyObject *__pyx_n_s__buflenz;
+static PyObject *__pyx_n_s__bytestr;
+static PyObject *__pyx_n_s__datapath;
 static PyObject *__pyx_n_s__degrees;
+static PyObject *__pyx_n_s__dist;
 static PyObject *__pyx_n_s__encode;
+static PyObject *__pyx_n_s__err;
 static PyObject *__pyx_n_s__errcheck;
+static PyObject *__pyx_n_s__f;
+static PyObject *__pyx_n_s__i;
 static PyObject *__pyx_n_s__inx;
 static PyObject *__pyx_n_s__iny;
 static PyObject *__pyx_n_s__inz;
 static PyObject *__pyx_n_s__is_latlong;
+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__p1;
 static PyObject *__pyx_n_s__p2;
-static PyObject *__pyx_n_s__pjinitstring;
-static PyObject *__pyx_n_s__proj_version;
-static PyObject *__pyx_n_s__projpj;
 static PyObject *__pyx_n_s__projstring;
 static PyObject *__pyx_n_s__radians;
+static PyObject *__pyx_n_s__searchpath;
 static PyObject *__pyx_n_s__set_datapath;
-static PyObject *__pyx_n_s__srs;
-static PyObject *__pyx_n_s__u;
-static PyObject *__pyx_n_s__v;
 static PyObject *__pyx_n_s__x;
+static PyObject *__pyx_n_s__xdata;
+static PyObject *__pyx_n_s__xx;
 static PyObject *__pyx_n_s__y;
+static PyObject *__pyx_n_s__ydata;
+static PyObject *__pyx_n_s__yy;
+static PyObject *__pyx_n_s__zdata;
+static PyObject *__pyx_n_s__zz;
 static PyObject *__pyx_k_1;
 static PyObject *__pyx_k_2;
 static PyObject *__pyx_k_9;
 static PyObject *__pyx_k_10;
+static PyObject *__pyx_k_18;
+static PyObject *__pyx_k_22;
+static PyObject *__pyx_k_25;
 static PyObject *__pyx_k_tuple_4;
 static PyObject *__pyx_k_tuple_6;
 static PyObject *__pyx_k_tuple_7;
@@ -546,51 +702,70 @@ static PyObject *__pyx_k_tuple_12;
 static PyObject *__pyx_k_tuple_13;
 static PyObject *__pyx_k_tuple_14;
 static PyObject *__pyx_k_tuple_16;
+static PyObject *__pyx_k_tuple_19;
+static PyObject *__pyx_k_tuple_21;
+static PyObject *__pyx_k_tuple_23;
+static PyObject *__pyx_k_tuple_24;
+static PyObject *__pyx_k_tuple_27;
+static PyObject *__pyx_k_tuple_30;
+static PyObject *__pyx_k_codeobj_28;
+static PyObject *__pyx_k_codeobj_31;
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5_proj_1set_datapath(PyObject *__pyx_self, PyObject *__pyx_v_datapath); /*proto*/
+static PyMethodDef __pyx_mdef_5_proj_1set_datapath = {__Pyx_NAMESTR("set_datapath"), (PyCFunction)__pyx_pw_5_proj_1set_datapath, METH_O, __Pyx_DOCSTR(0)};
+static PyObject *__pyx_pw_5_proj_1set_datapath(PyObject *__pyx_self, PyObject *__pyx_v_datapath) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("set_datapath (wrapper)", 0);
+  __pyx_r = __pyx_pf_5_proj_set_datapath(__pyx_self, ((PyObject *)__pyx_v_datapath));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-/* "_proj.pyx":7
- * #c_numpy.import_array()
+/* "_proj.pyx":56
+ *     int PyObject_AsWriteBuffer(object, void **rbuf, Py_ssize_t *len)
  * 
  * def set_datapath(datapath):             # <<<<<<<<<<<<<<
  *     cdef char *searchpath
  *     bytestr = _strencode(datapath)
  */
 
-static PyObject *__pyx_pf_5_proj_set_datapath(PyObject *__pyx_self, PyObject *__pyx_v_datapath); /*proto*/
-static PyMethodDef __pyx_mdef_5_proj_set_datapath = {__Pyx_NAMESTR("set_datapath"), (PyCFunction)__pyx_pf_5_proj_set_datapath, METH_O, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pf_5_proj_set_datapath(PyObject *__pyx_self, PyObject *__pyx_v_datapath) {
+static PyObject *__pyx_pf_5_proj_set_datapath(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_datapath) {
   char *__pyx_v_searchpath;
-  PyObject *__pyx_v_bytestr;
+  PyObject *__pyx_v_bytestr = NULL;
   PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   char *__pyx_t_2;
-  __Pyx_RefNannySetupContext("set_datapath");
-  __pyx_self = __pyx_self;
-  __pyx_v_bytestr = Py_None; __Pyx_INCREF(Py_None);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("set_datapath", 0);
 
-  /* "_proj.pyx":9
+  /* "_proj.pyx":58
  * 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 = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_v_bytestr);
   __pyx_v_bytestr = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "_proj.pyx":10
+  /* "_proj.pyx":59
  *     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 = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_searchpath = __pyx_t_2;
 
-  /* "_proj.pyx":11
+  /* "_proj.pyx":60
  *     bytestr = _strencode(datapath)
  *     searchpath = bytestr
  *     pj_set_searchpath(1, &searchpath)             # <<<<<<<<<<<<<<
@@ -603,159 +778,193 @@ static PyObject *__pyx_pf_5_proj_set_datapath(PyObject *__pyx_self, PyObject *__
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("_proj.set_datapath");
+  __Pyx_AddTraceback("_proj.set_datapath", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_DECREF(__pyx_v_bytestr);
+  __Pyx_XDECREF(__pyx_v_bytestr);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "_proj.pyx":19
- *     cdef public object srs
- * 
- *     def __cinit__(self, projstring):             # <<<<<<<<<<<<<<
- *         # setup proj initialization string.
- *         self.srs = projstring
- */
-
-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) {
+/* Python wrapper */
+static int __pyx_pw_5_proj_4Proj_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_5_proj_4Proj_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_projstring = 0;
-  PyObject *__pyx_v_bytestr;
   int __pyx_r;
-  PyObject *__pyx_t_1 = NULL;
-  char *__pyx_t_2;
-  int __pyx_t_3;
-  PyObject *__pyx_t_4 = NULL;
-  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__projstring,0};
-  __Pyx_RefNannySetupContext("__cinit__");
-  if (unlikely(__pyx_kwds)) {
-    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__projstring,0};
     PyObject* values[1] = {0};
-    switch (PyTuple_GET_SIZE(__pyx_args)) {
-      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-      case  0: break;
-      default: goto __pyx_L5_argtuple_error;
-    }
-    switch (PyTuple_GET_SIZE(__pyx_args)) {
-      case  0:
-      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__projstring);
-      if (likely(values[0])) kw_args--;
-      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_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        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 (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__projstring)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
     __pyx_v_projstring = values[0];
-  } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-    goto __pyx_L5_argtuple_error;
-  } else {
-    __pyx_v_projstring = PyTuple_GET_ITEM(__pyx_args, 0);
   }
   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 = 69; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("_proj.Proj.__cinit__");
+  __Pyx_AddTraceback("_proj.Proj.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_v_bytestr = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_r = __pyx_pf_5_proj_4Proj___cinit__(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self), __pyx_v_projstring);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "_proj.pyx":21
- *     def __cinit__(self, projstring):
+/* "_proj.pyx":69
+ *     cdef public object srs
+ * 
+ *     def __cinit__(self, projstring):             # <<<<<<<<<<<<<<
+ *         # setup proj initialization string.
+ *         cdef int err
+ */
+
+static int __pyx_pf_5_proj_4Proj___cinit__(struct __pyx_obj_5_proj_Proj *__pyx_v_self, PyObject *__pyx_v_projstring) {
+  int __pyx_v_err;
+  PyObject *__pyx_v_bytestr = NULL;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  char *__pyx_t_2;
+  int __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__cinit__", 0);
+
+  /* "_proj.pyx":72
  *         # setup proj initialization string.
+ *         cdef int err
  *         self.srs = projstring             # <<<<<<<<<<<<<<
  *         bytestr = _strencode(projstring)
  *         self.pjinitstring = bytestr
  */
   __Pyx_INCREF(__pyx_v_projstring);
   __Pyx_GIVEREF(__pyx_v_projstring);
-  __Pyx_GOTREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs);
-  __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;
+  __Pyx_GOTREF(__pyx_v_self->srs);
+  __Pyx_DECREF(__pyx_v_self->srs);
+  __pyx_v_self->srs = __pyx_v_projstring;
 
-  /* "_proj.pyx":22
- *         # setup proj initialization string.
+  /* "_proj.pyx":73
+ *         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 = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_v_bytestr);
   __pyx_v_bytestr = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "_proj.pyx":23
+  /* "_proj.pyx":74
  *         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 = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->pjinitstring = __pyx_t_2;
+  __pyx_t_2 = PyBytes_AsString(__pyx_v_bytestr); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->pjinitstring = __pyx_t_2;
 
-  /* "_proj.pyx":25
+  /* "_proj.pyx":76
  *         self.pjinitstring = bytestr
  *         # initialize projection
- *         self.projpj = pj_init_plus(self.pjinitstring)             # <<<<<<<<<<<<<<
- *         if pj_errno != 0:
- *             raise RuntimeError(pj_strerrno(pj_errno))
+ *         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);
+  __pyx_v_self->projctx = pj_ctx_alloc();
 
-  /* "_proj.pyx":26
+  /* "_proj.pyx":77
  *         # initialize projection
- *         self.projpj = pj_init_plus(self.pjinitstring)
- *         if pj_errno != 0:             # <<<<<<<<<<<<<<
- *             raise RuntimeError(pj_strerrno(pj_errno))
+ *         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:
+ */
+  __pyx_v_self->projpj = pj_init_plus_ctx(__pyx_v_self->projctx, __pyx_v_self->pjinitstring);
+
+  /* "_proj.pyx":78
+ *         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(__pyx_v_self->projctx);
+
+  /* "_proj.pyx":79
+ *         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.
  */
-  __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":80
+ *         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(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 = 80; __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_GOTREF(((PyObject *)__pyx_t_4));
+    __pyx_t_4 = PyTuple_New(1); 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);
     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 = 80; __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);
+    __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;}
-    goto __pyx_L6;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L3;
   }
-  __pyx_L6:;
+  __pyx_L3:;
 
-  /* "_proj.pyx":28
- *         if pj_errno != 0:
- *             raise RuntimeError(pj_strerrno(pj_errno))
+  /* "_proj.pyx":81
+ *         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 = 81; __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);
-  __Pyx_DECREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->proj_version);
-  ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->proj_version = __pyx_t_1;
+  __Pyx_GOTREF(__pyx_v_self->proj_version);
+  __Pyx_DECREF(__pyx_v_self->proj_version);
+  __pyx_v_self->proj_version = __pyx_t_1;
   __pyx_t_1 = 0;
 
   __pyx_r = 0;
@@ -763,15 +972,24 @@ static int __pyx_pf_5_proj_4Proj___cinit__(PyObject *__pyx_v_self, PyObject *__p
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("_proj.Proj.__cinit__");
+  __Pyx_AddTraceback("_proj.Proj.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
-  __Pyx_DECREF(__pyx_v_bytestr);
+  __Pyx_XDECREF(__pyx_v_bytestr);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "_proj.pyx":30
+/* Python wrapper */
+static void __pyx_pw_5_proj_4Proj_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_pw_5_proj_4Proj_3__dealloc__(PyObject *__pyx_v_self) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
+  __pyx_pf_5_proj_4Proj_2__dealloc__(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+}
+
+/* "_proj.pyx":83
  *         self.proj_version = PJ_VERSION/100.
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -779,40 +997,63 @@ static int __pyx_pf_5_proj_4Proj___cinit__(PyObject *__pyx_v_self, PyObject *__p
  *         pj_free(self.projpj)
  */
 
-static void __pyx_pf_5_proj_4Proj_1__dealloc__(PyObject *__pyx_v_self); /*proto*/
-static void __pyx_pf_5_proj_4Proj_1__dealloc__(PyObject *__pyx_v_self) {
-  __Pyx_RefNannySetupContext("__dealloc__");
+static void __pyx_pf_5_proj_4Proj_2__dealloc__(struct __pyx_obj_5_proj_Proj *__pyx_v_self) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__dealloc__", 0);
 
-  /* "_proj.pyx":32
+  /* "_proj.pyx":85
  *     def __dealloc__(self):
  *         """destroy projection definition"""
  *         pj_free(self.projpj)             # <<<<<<<<<<<<<<
+ *         pj_ctx_free(self.projctx)
+ * 
+ */
+  pj_free(__pyx_v_self->projpj);
+
+  /* "_proj.pyx":86
+ *         """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);
+  pj_ctx_free(__pyx_v_self->projctx);
 
   __Pyx_RefNannyFinishContext();
 }
 
-/* "_proj.pyx":34
- *         pj_free(self.projpj)
+/* Python wrapper */
+static PyObject *__pyx_pw_5_proj_4Proj_5__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static char __pyx_doc_5_proj_4Proj_4__reduce__[] = "special method that allows pyproj.Proj instance to be pickled";
+static PyObject *__pyx_pw_5_proj_4Proj_5__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__reduce__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5_proj_4Proj_4__reduce__(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "_proj.pyx":88
+ *         pj_ctx_free(self.projctx)
  * 
  *     def __reduce__(self):             # <<<<<<<<<<<<<<
  *         """special method that allows pyproj.Proj instance to be pickled"""
  *         return (self.__class__,(self.srs,))
  */
 
-static PyObject *__pyx_pf_5_proj_4Proj_2__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static char __pyx_doc_5_proj_4Proj_2__reduce__[] = "special method that allows pyproj.Proj instance to be pickled";
-static PyObject *__pyx_pf_5_proj_4Proj_2__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pf_5_proj_4Proj_4__reduce__(struct __pyx_obj_5_proj_Proj *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
-  __Pyx_RefNannySetupContext("__reduce__");
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__reduce__", 0);
 
-  /* "_proj.pyx":36
+  /* "_proj.pyx":90
  *     def __reduce__(self):
  *         """special method that allows pyproj.Proj instance to be pickled"""
  *         return (self.__class__,(self.srs,))             # <<<<<<<<<<<<<<
@@ -820,15 +1061,15 @@ 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(((PyObject *)__pyx_v_self), __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __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_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_GOTREF(((PyObject *)__pyx_t_3));
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_v_self->srs);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self->srs);
+  __Pyx_GIVEREF(__pyx_v_self->srs);
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_t_2));
@@ -845,7 +1086,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_2__reduce__(PyObject *__pyx_v_self, CYTHO
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("_proj.Proj.__reduce__");
+  __Pyx_AddTraceback("_proj.Proj.__reduce__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -853,7 +1094,86 @@ static PyObject *__pyx_pf_5_proj_4Proj_2__reduce__(PyObject *__pyx_v_self, CYTHO
   return __pyx_r;
 }
 
-/* "_proj.pyx":38
+/* Python wrapper */
+static PyObject *__pyx_pw_5_proj_4Proj_7_fwd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_5_proj_4Proj_6_fwd[] = "\n forward transformation - lons,lats to x,y (done in place).\n if radians=True, lons/lats are radians instead of degrees.\n if errcheck=True, an exception is raised if the forward transformation is invalid.\n if errcheck=False and the forward transformation is invalid, no exception is\n raised and 1.e30 is returned.\n        ";
+static PyObject *__pyx_pw_5_proj_4Proj_7_fwd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_lons = 0;
+  PyObject *__pyx_v_lats = 0;
+  PyObject *__pyx_v_radians = 0;
+  PyObject *__pyx_v_errcheck = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("_fwd (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__lons,&__pyx_n_s__lats,&__pyx_n_s__radians,&__pyx_n_s__errcheck,0};
+    PyObject* values[4] = {0,0,0,0};
+    values[2] = __pyx_k_1;
+    values[3] = __pyx_k_2;
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_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 (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lons)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lats)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("_fwd", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__radians);
+          if (value) { values[2] = value; kw_args--; }
+        }
+        case  3:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__errcheck);
+          if (value) { values[3] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_fwd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else {
+      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);
+        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_radians = values[2];
+    __pyx_v_errcheck = values[3];
+  }
+  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 = 92; __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:;
+  __pyx_r = __pyx_pf_5_proj_4Proj_6_fwd(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self), __pyx_v_lons, __pyx_v_lats, __pyx_v_radians, __pyx_v_errcheck);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "_proj.pyx":92
  *         return (self.__class__,(self.srs,))
  * 
  *     def _fwd(self, object lons, object lats, radians=False, errcheck=False):             # <<<<<<<<<<<<<<
@@ -861,13 +1181,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_2__reduce__(PyObject *__pyx_v_self, CYTHO
  *  forward transformation - lons,lats to x,y (done in place).
  */
 
-static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_5_proj_4Proj_3_fwd[] = "\n forward transformation - lons,lats to x,y (done in place).\n if radians=True, lons/lats are radians instead of degrees.\n if errcheck=True, an exception is raised if the forward transformation is invalid.\n if errcheck=False and the forward transformation is invalid, no exception is\n raised and 1.e30 is returned.\n        ";
-static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_lons = 0;
-  PyObject *__pyx_v_lats = 0;
-  PyObject *__pyx_v_radians = 0;
-  PyObject *__pyx_v_errcheck = 0;
+static PyObject *__pyx_pf_5_proj_4Proj_6_fwd(struct __pyx_obj_5_proj_Proj *__pyx_v_self, PyObject *__pyx_v_lons, PyObject *__pyx_v_lats, PyObject *__pyx_v_radians, PyObject *__pyx_v_errcheck) {
   projUV __pyx_v_projxyout;
   projUV __pyx_v_projlonlatin;
   Py_ssize_t __pyx_v_buflenx;
@@ -878,7 +1192,9 @@ 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;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
@@ -887,76 +1203,13 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_
   int __pyx_t_6;
   int __pyx_t_7;
   double __pyx_t_8;
-  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__lons,&__pyx_n_s__lats,&__pyx_n_s__radians,&__pyx_n_s__errcheck,0};
-  __Pyx_RefNannySetupContext("_fwd");
-  if (unlikely(__pyx_kwds)) {
-    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
-    PyObject* values[4] = {0,0,0,0};
-    values[2] = __pyx_k_1;
-    values[3] = __pyx_k_2;
-    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;
-    }
-    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, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-      case  2:
-      if (kw_args > 0) {
-        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__radians);
-        if (value) { values[2] = value; kw_args--; }
-      }
-      case  3:
-      if (kw_args > 0) {
-        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__errcheck);
-        if (value) { values[3] = 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 = 38; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    }
-    __pyx_v_lons = values[0];
-    __pyx_v_lats = values[1];
-    __pyx_v_radians = values[2];
-    __pyx_v_errcheck = values[3];
-  } else {
-    __pyx_v_radians = __pyx_k_1;
-    __pyx_v_errcheck = __pyx_k_2;
-    switch (PyTuple_GET_SIZE(__pyx_args)) {
-      case  4:
-      __pyx_v_errcheck = PyTuple_GET_ITEM(__pyx_args, 3);
-      case  3:
-      __pyx_v_radians = PyTuple_GET_ITEM(__pyx_args, 2);
-      case  2:
-      __pyx_v_lats = PyTuple_GET_ITEM(__pyx_args, 1);
-      __pyx_v_lons = PyTuple_GET_ITEM(__pyx_args, 0);
-      break;
-      default: goto __pyx_L5_argtuple_error;
-    }
-  }
-  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_L3_error:;
-  __Pyx_AddTraceback("_proj.Proj._fwd");
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("_fwd", 0);
 
-  /* "_proj.pyx":52
- *         cdef void *londata, *latdata
+  /* "_proj.pyx":107
+ *         cdef int err
  *         # if buffer api is supported, get pointer to data buffers.
  *         if PyObject_AsWriteBuffer(lons, &londata, &buflenx) <> 0:             # <<<<<<<<<<<<<<
  *             raise RuntimeError
@@ -965,20 +1218,20 @@ 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":108
  *         # if buffer api is supported, get pointer to data buffers.
  *         if PyObject_AsWriteBuffer(lons, &londata, &buflenx) <> 0:
  *             raise RuntimeError             # <<<<<<<<<<<<<<
  *         if PyObject_AsWriteBuffer(lats, &latdata, &bufleny) <> 0:
  *             raise RuntimeError
  */
-    __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L6;
+    __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0);
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L3;
   }
-  __pyx_L6:;
+  __pyx_L3:;
 
-  /* "_proj.pyx":54
+  /* "_proj.pyx":109
  *         if PyObject_AsWriteBuffer(lons, &londata, &buflenx) <> 0:
  *             raise RuntimeError
  *         if PyObject_AsWriteBuffer(lats, &latdata, &bufleny) <> 0:             # <<<<<<<<<<<<<<
@@ -988,20 +1241,20 @@ 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":110
  *             raise RuntimeError
  *         if PyObject_AsWriteBuffer(lats, &latdata, &bufleny) <> 0:
  *             raise RuntimeError             # <<<<<<<<<<<<<<
  *         # process data in buffer
  *         if buflenx != bufleny:
  */
-    __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L7;
+    __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0);
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L4;
   }
-  __pyx_L7:;
+  __pyx_L4:;
 
-  /* "_proj.pyx":57
+  /* "_proj.pyx":112
  *             raise RuntimeError
  *         # process data in buffer
  *         if buflenx != bufleny:             # <<<<<<<<<<<<<<
@@ -1011,42 +1264,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":113
  *         # process data in buffer
  *         if buflenx != bufleny:
  *             raise RuntimeError("Buffer lengths not the same")             # <<<<<<<<<<<<<<
  *         ndim = buflenx//_doublesize
  *         lonsdata = <double *>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 = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_Raise(__pyx_t_2, 0, 0);
+    __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;}
-    goto __pyx_L8;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L5;
   }
-  __pyx_L8:;
+  __pyx_L5:;
 
-  /* "_proj.pyx":59
+  /* "_proj.pyx":114
  *         if buflenx != bufleny:
  *             raise RuntimeError("Buffer lengths not the same")
  *         ndim = buflenx//_doublesize             # <<<<<<<<<<<<<<
  *         lonsdata = <double *>londata
  *         latsdata = <double *>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 = 114; __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 = 114; __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 = 114; __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 = 114; __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":115
  *             raise RuntimeError("Buffer lengths not the same")
  *         ndim = buflenx//_doublesize
  *         lonsdata = <double *>londata             # <<<<<<<<<<<<<<
@@ -1055,7 +1308,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":116
  *         ndim = buflenx//_doublesize
  *         lonsdata = <double *>londata
  *         latsdata = <double *>latdata             # <<<<<<<<<<<<<<
@@ -1064,7 +1317,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":117
  *         lonsdata = <double *>londata
  *         latsdata = <double *>latdata
  *         for i from 0 <= i < ndim:             # <<<<<<<<<<<<<<
@@ -1074,7 +1327,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":119
  *         for i from 0 <= i < ndim:
  *             # if inputs are nan's, return big number.
  *             if lonsdata[i] != lonsdata[i] or latsdata[i] != latsdata[i]:             # <<<<<<<<<<<<<<
@@ -1090,7 +1343,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_
     }
     if (__pyx_t_7) {
 
-      /* "_proj.pyx":65
+      /* "_proj.pyx":120
  *             # 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             # <<<<<<<<<<<<<<
@@ -1100,55 +1353,55 @@ 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":121
  *             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 = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       if (__pyx_t_7) {
 
-        /* "_proj.pyx":67
+        /* "_proj.pyx":122
  *                 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 = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_4);
-        __Pyx_Raise(__pyx_t_4, 0, 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 = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        goto __pyx_L12;
+        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        goto __pyx_L9;
       }
-      __pyx_L12:;
+      __pyx_L9:;
 
-      /* "_proj.pyx":68
+      /* "_proj.pyx":123
  *                 if errcheck:
  *                     raise RuntimeError('projection undefined')
  *                 continue             # <<<<<<<<<<<<<<
  *             if radians:
  *                 projlonlatin.u = lonsdata[i]
  */
-      goto __pyx_L9_continue;
-      goto __pyx_L11;
+      goto __pyx_L6_continue;
+      goto __pyx_L8;
     }
-    __pyx_L11:;
+    __pyx_L8:;
 
-    /* "_proj.pyx":69
+    /* "_proj.pyx":124
  *                     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 = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     if (__pyx_t_7) {
 
-      /* "_proj.pyx":70
+      /* "_proj.pyx":125
  *                 continue
  *             if radians:
  *                 projlonlatin.u = lonsdata[i]             # <<<<<<<<<<<<<<
@@ -1157,7 +1410,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":126
  *             if radians:
  *                 projlonlatin.u = lonsdata[i]
  *                 projlonlatin.v = latsdata[i]             # <<<<<<<<<<<<<<
@@ -1165,150 +1418,146 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_
  *                 projlonlatin.u = _dg2rad*lonsdata[i]
  */
       __pyx_v_projlonlatin.v = (__pyx_v_latsdata[__pyx_v_i]);
-      goto __pyx_L13;
+      goto __pyx_L10;
     }
     /*else*/ {
 
-      /* "_proj.pyx":73
+      /* "_proj.pyx":128
  *                 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_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_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_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_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":74
+      /* "_proj.pyx":129
  *             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_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_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_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_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:;
+    __pyx_L10:;
 
-    /* "_proj.pyx":75
+    /* "_proj.pyx":130
  *                 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(self.projctx)
  */
-    __pyx_v_projxyout = pj_fwd(__pyx_v_projlonlatin, ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projpj);
+    __pyx_v_projxyout = pj_fwd(__pyx_v_projlonlatin, __pyx_v_self->projpj);
 
-    /* "_proj.pyx":76
+    /* "_proj.pyx":131
  *                 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(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 = 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 = 131; __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":132
  *             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(self.projctx)             # <<<<<<<<<<<<<<
+ *                 if err != 0:
+ *                      raise RuntimeError(pj_strerrno(err))
+ */
+      __pyx_v_err = pj_ctx_get_errno(__pyx_v_self->projctx);
+
+      /* "_proj.pyx":133
+ *             if errcheck:
+ *                 err = pj_ctx_get_errno(self.projctx)
+ *                 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":134
+ *                 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(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);
-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L14;
+        __pyx_t_4 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __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 = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__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 = 134; __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 = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        goto __pyx_L12;
+      }
+      __pyx_L12:;
+      goto __pyx_L11;
     }
-    __pyx_L14:;
+    __pyx_L11:;
 
-    /* "_proj.pyx":81
+    /* "_proj.pyx":138
  *             # 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":139
  *             # 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":140
  *             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 = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__pyx_t_6) {
 
-        /* "_proj.pyx":84
+        /* "_proj.pyx":141
  *                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 = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_4);
-        __Pyx_Raise(__pyx_t_4, 0, 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 = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        goto __pyx_L16;
+        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        goto __pyx_L14;
       }
-      __pyx_L16:;
+      __pyx_L14:;
 
-      /* "_proj.pyx":85
+      /* "_proj.pyx":142
  *                 if errcheck:
  *                     raise RuntimeError('projection undefined')
  *                 lonsdata[i] = 1.e30             # <<<<<<<<<<<<<<
@@ -1316,72 +1565,73 @@ 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_L13;
     }
     /*else*/ {
 
-      /* "_proj.pyx":87
+      /* "_proj.pyx":144
  *                 lonsdata[i] = 1.e30
  *             else:
  *                 lonsdata[i] = projxyout.u             # <<<<<<<<<<<<<<
  *             if projxyout.v == HUGE_VAL or\
  *                projxyout.u != projxyout.u:
  */
-      (__pyx_v_lonsdata[__pyx_v_i]) = __pyx_v_projxyout.u;
+      __pyx_t_8 = __pyx_v_projxyout.u;
+      (__pyx_v_lonsdata[__pyx_v_i]) = __pyx_t_8;
     }
-    __pyx_L15:;
+    __pyx_L13:;
 
-    /* "_proj.pyx":88
+    /* "_proj.pyx":145
  *             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":146
  *                 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":147
  *             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 = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__pyx_t_1) {
 
-        /* "_proj.pyx":91
+        /* "_proj.pyx":148
  *                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 = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_4);
-        __Pyx_Raise(__pyx_t_4, 0, 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 = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        goto __pyx_L18;
+        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        goto __pyx_L16;
       }
-      __pyx_L18:;
+      __pyx_L16:;
 
-      /* "_proj.pyx":92
+      /* "_proj.pyx":149
  *                 if errcheck:
  *                     raise RuntimeError('projection undefined')
  *                 latsdata[i] = 1.e30             # <<<<<<<<<<<<<<
@@ -1389,21 +1639,22 @@ 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_L15;
     }
     /*else*/ {
 
-      /* "_proj.pyx":94
+      /* "_proj.pyx":151
  *                 latsdata[i] = 1.e30
  *             else:
  *                 latsdata[i] = projxyout.v             # <<<<<<<<<<<<<<
  * 
  *     def _inv(self, object x, object y, radians=False, errcheck=False):
  */
-      (__pyx_v_latsdata[__pyx_v_i]) = __pyx_v_projxyout.v;
+      __pyx_t_8 = __pyx_v_projxyout.v;
+      (__pyx_v_latsdata[__pyx_v_i]) = __pyx_t_8;
     }
-    __pyx_L17:;
-    __pyx_L9_continue:;
+    __pyx_L15:;
+    __pyx_L6_continue:;
   }
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -1412,7 +1663,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("_proj.Proj._fwd");
+  __Pyx_AddTraceback("_proj.Proj._fwd", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -1420,7 +1671,86 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_
   return __pyx_r;
 }
 
-/* "_proj.pyx":96
+/* Python wrapper */
+static PyObject *__pyx_pw_5_proj_4Proj_9_inv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_5_proj_4Proj_8_inv[] = "\n inverse transformation - x,y to lons,lats (done in place).\n if radians=True, lons/lats are radians instead of degrees.\n if errcheck=True, an exception is raised if the inverse transformation is invalid.\n if errcheck=False and the inverse transformation is invalid, no exception is\n raised and 1.e30 is returned.\n        ";
+static PyObject *__pyx_pw_5_proj_4Proj_9_inv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_x = 0;
+  PyObject *__pyx_v_y = 0;
+  PyObject *__pyx_v_radians = 0;
+  PyObject *__pyx_v_errcheck = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("_inv (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__x,&__pyx_n_s__y,&__pyx_n_s__radians,&__pyx_n_s__errcheck,0};
+    PyObject* values[4] = {0,0,0,0};
+    values[2] = __pyx_k_9;
+    values[3] = __pyx_k_10;
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_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 (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__y)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("_inv", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__radians);
+          if (value) { values[2] = value; kw_args--; }
+        }
+        case  3:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__errcheck);
+          if (value) { values[3] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_inv") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else {
+      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);
+        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_x = values[0];
+    __pyx_v_y = values[1];
+    __pyx_v_radians = values[2];
+    __pyx_v_errcheck = values[3];
+  }
+  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 = 153; __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:;
+  __pyx_r = __pyx_pf_5_proj_4Proj_8_inv(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self), __pyx_v_x, __pyx_v_y, __pyx_v_radians, __pyx_v_errcheck);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "_proj.pyx":153
  *                 latsdata[i] = projxyout.v
  * 
  *     def _inv(self, object x, object y, radians=False, errcheck=False):             # <<<<<<<<<<<<<<
@@ -1428,13 +1758,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_3_fwd(PyObject *__pyx_v_self, PyObject *_
  *  inverse transformation - x,y to lons,lats (done in place).
  */
 
-static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_5_proj_4Proj_4_inv[] = "\n inverse transformation - x,y to lons,lats (done in place).\n if radians=True, lons/lats are radians instead of degrees.\n if errcheck=True, an exception is raised if the inverse transformation is invalid.\n if errcheck=False and the inverse transformation is invalid, no exception is\n raised and 1.e30 is returned.\n        ";
-static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_x = 0;
-  PyObject *__pyx_v_y = 0;
-  PyObject *__pyx_v_radians = 0;
-  PyObject *__pyx_v_errcheck = 0;
+static PyObject *__pyx_pf_5_proj_4Proj_8_inv(struct __pyx_obj_5_proj_Proj *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y, PyObject *__pyx_v_radians, PyObject *__pyx_v_errcheck) {
   projUV __pyx_v_projxyin;
   projUV __pyx_v_projlonlatout;
   Py_ssize_t __pyx_v_buflenx;
@@ -1445,7 +1769,9 @@ 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;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
@@ -1454,75 +1780,12 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_
   int __pyx_t_6;
   int __pyx_t_7;
   double __pyx_t_8;
-  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__x,&__pyx_n_s__y,&__pyx_n_s__radians,&__pyx_n_s__errcheck,0};
-  __Pyx_RefNannySetupContext("_inv");
-  if (unlikely(__pyx_kwds)) {
-    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
-    PyObject* values[4] = {0,0,0,0};
-    values[2] = __pyx_k_9;
-    values[3] = __pyx_k_10;
-    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;
-    }
-    switch (PyTuple_GET_SIZE(__pyx_args)) {
-      case  0:
-      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__x);
-      if (likely(values[0])) kw_args--;
-      else goto __pyx_L5_argtuple_error;
-      case  1:
-      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;}
-      }
-      case  2:
-      if (kw_args > 0) {
-        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__radians);
-        if (value) { values[2] = value; kw_args--; }
-      }
-      case  3:
-      if (kw_args > 0) {
-        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__errcheck);
-        if (value) { values[3] = 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 = 96; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    }
-    __pyx_v_x = values[0];
-    __pyx_v_y = values[1];
-    __pyx_v_radians = values[2];
-    __pyx_v_errcheck = values[3];
-  } else {
-    __pyx_v_radians = __pyx_k_9;
-    __pyx_v_errcheck = __pyx_k_10;
-    switch (PyTuple_GET_SIZE(__pyx_args)) {
-      case  4:
-      __pyx_v_errcheck = PyTuple_GET_ITEM(__pyx_args, 3);
-      case  3:
-      __pyx_v_radians = PyTuple_GET_ITEM(__pyx_args, 2);
-      case  2:
-      __pyx_v_y = PyTuple_GET_ITEM(__pyx_args, 1);
-      __pyx_v_x = PyTuple_GET_ITEM(__pyx_args, 0);
-      break;
-      default: goto __pyx_L5_argtuple_error;
-    }
-  }
-  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_L3_error:;
-  __Pyx_AddTraceback("_proj.Proj._inv");
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("_inv", 0);
 
-  /* "_proj.pyx":110
+  /* "_proj.pyx":167
  *         cdef double *xdatab, *ydatab
  *         # if buffer api is supported, get pointer to data buffers.
  *         if PyObject_AsWriteBuffer(x, &xdata, &buflenx) <> 0:             # <<<<<<<<<<<<<<
@@ -1532,20 +1795,20 @@ 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":168
  *         # if buffer api is supported, get pointer to data buffers.
  *         if PyObject_AsWriteBuffer(x, &xdata, &buflenx) <> 0:
  *             raise RuntimeError             # <<<<<<<<<<<<<<
  *         if PyObject_AsWriteBuffer(y, &ydata, &bufleny) <> 0:
  *             raise RuntimeError
  */
-    __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L6;
+    __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0);
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L3;
   }
-  __pyx_L6:;
+  __pyx_L3:;
 
-  /* "_proj.pyx":112
+  /* "_proj.pyx":169
  *         if PyObject_AsWriteBuffer(x, &xdata, &buflenx) <> 0:
  *             raise RuntimeError
  *         if PyObject_AsWriteBuffer(y, &ydata, &bufleny) <> 0:             # <<<<<<<<<<<<<<
@@ -1555,20 +1818,20 @@ 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":170
  *             raise RuntimeError
  *         if PyObject_AsWriteBuffer(y, &ydata, &bufleny) <> 0:
  *             raise RuntimeError             # <<<<<<<<<<<<<<
  *         # process data in buffer
  *         # (for numpy/regular python arrays).
  */
-    __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L7;
+    __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0);
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L4;
   }
-  __pyx_L7:;
+  __pyx_L4:;
 
-  /* "_proj.pyx":116
+  /* "_proj.pyx":173
  *         # process data in buffer
  *         # (for numpy/regular python arrays).
  *         if buflenx != bufleny:             # <<<<<<<<<<<<<<
@@ -1578,42 +1841,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":174
  *         # (for numpy/regular python arrays).
  *         if buflenx != bufleny:
  *             raise RuntimeError("Buffer lengths not the same")             # <<<<<<<<<<<<<<
  *         ndim = buflenx//_doublesize
  *         xdatab = <double *>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 = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_Raise(__pyx_t_2, 0, 0);
+    __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;}
-    goto __pyx_L8;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L5;
   }
-  __pyx_L8:;
+  __pyx_L5:;
 
-  /* "_proj.pyx":118
+  /* "_proj.pyx":175
  *         if buflenx != bufleny:
  *             raise RuntimeError("Buffer lengths not the same")
  *         ndim = buflenx//_doublesize             # <<<<<<<<<<<<<<
  *         xdatab = <double *>xdata
  *         ydatab = <double *>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 = 175; __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 = 175; __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 = 175; __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 = 175; __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":176
  *             raise RuntimeError("Buffer lengths not the same")
  *         ndim = buflenx//_doublesize
  *         xdatab = <double *>xdata             # <<<<<<<<<<<<<<
@@ -1622,7 +1885,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":177
  *         ndim = buflenx//_doublesize
  *         xdatab = <double *>xdata
  *         ydatab = <double *>ydata             # <<<<<<<<<<<<<<
@@ -1631,7 +1894,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":178
  *         xdatab = <double *>xdata
  *         ydatab = <double *>ydata
  *         for i from 0 <= i < ndim:             # <<<<<<<<<<<<<<
@@ -1641,7 +1904,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":180
  *         for i from 0 <= i < ndim:
  *             # if inputs are nan's, return big number.
  *             if xdatab[i] != xdatab[i] or ydatab[i] != ydatab[i]:             # <<<<<<<<<<<<<<
@@ -1657,7 +1920,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_
     }
     if (__pyx_t_7) {
 
-      /* "_proj.pyx":124
+      /* "_proj.pyx":181
  *             # 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             # <<<<<<<<<<<<<<
@@ -1667,45 +1930,45 @@ 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":182
  *             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 = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       if (__pyx_t_7) {
 
-        /* "_proj.pyx":126
+        /* "_proj.pyx":183
  *                 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 = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_4);
-        __Pyx_Raise(__pyx_t_4, 0, 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 = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        goto __pyx_L12;
+        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        goto __pyx_L9;
       }
-      __pyx_L12:;
+      __pyx_L9:;
 
-      /* "_proj.pyx":127
+      /* "_proj.pyx":184
  *                 if errcheck:
  *                     raise RuntimeError('projection undefined')
  *                 continue             # <<<<<<<<<<<<<<
  *             projxyin.u = xdatab[i]
  *             projxyin.v = ydatab[i]
  */
-      goto __pyx_L9_continue;
-      goto __pyx_L11;
+      goto __pyx_L6_continue;
+      goto __pyx_L8;
     }
-    __pyx_L11:;
+    __pyx_L8:;
 
-    /* "_proj.pyx":128
+    /* "_proj.pyx":185
  *                     raise RuntimeError('projection undefined')
  *                 continue
  *             projxyin.u = xdatab[i]             # <<<<<<<<<<<<<<
@@ -1714,115 +1977,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":186
  *                 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":187
  *             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(self.projctx)
  */
-    __pyx_v_projlonlatout = pj_inv(__pyx_v_projxyin, ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projpj);
+    __pyx_v_projlonlatout = pj_inv(__pyx_v_projxyin, __pyx_v_self->projpj);
 
-    /* "_proj.pyx":131
+    /* "_proj.pyx":188
  *             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(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 = 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 = 188; __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":189
  *             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(self.projctx)             # <<<<<<<<<<<<<<
+ *                 if err != 0:
+ *                      raise RuntimeError(pj_strerrno(err))
+ */
+      __pyx_v_err = pj_ctx_get_errno(__pyx_v_self->projctx);
+
+      /* "_proj.pyx":190
+ *             if errcheck:
+ *                 err = pj_ctx_get_errno(self.projctx)
+ *                 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":191
+ *                 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(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);
-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L13;
+        __pyx_t_4 = PyBytes_FromString(pj_strerrno(__pyx_v_err)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __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 = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__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 = 191; __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 = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        goto __pyx_L11;
+      }
+      __pyx_L11:;
+      goto __pyx_L10;
     }
-    __pyx_L13:;
+    __pyx_L10:;
 
-    /* "_proj.pyx":136
+    /* "_proj.pyx":195
  *             # 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":196
  *             # 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":197
  *             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 = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__pyx_t_6) {
 
-        /* "_proj.pyx":139
+        /* "_proj.pyx":198
  *                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 = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_4);
-        __Pyx_Raise(__pyx_t_4, 0, 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_L15;
+        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        goto __pyx_L13;
       }
-      __pyx_L15:;
+      __pyx_L13:;
 
-      /* "_proj.pyx":140
+      /* "_proj.pyx":199
  *                 if errcheck:
  *                     raise RuntimeError('projection undefined')
  *                 xdatab[i] = 1.e30             # <<<<<<<<<<<<<<
@@ -1830,103 +2109,94 @@ 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_L12;
     }
 
-    /* "_proj.pyx":141
+    /* "_proj.pyx":200
  *                     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 = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__pyx_t_6) {
 
-      /* "_proj.pyx":142
+      /* "_proj.pyx":201
  *                 xdatab[i] = 1.e30
  *             elif radians:
  *                 xdatab[i] = projlonlatout.u             # <<<<<<<<<<<<<<
  *             else:
  *                 xdatab[i] = _rad2dg*projlonlatout.u
  */
-      (__pyx_v_xdatab[__pyx_v_i]) = __pyx_v_projlonlatout.u;
-      goto __pyx_L14;
+      __pyx_t_8 = __pyx_v_projlonlatout.u;
+      (__pyx_v_xdatab[__pyx_v_i]) = __pyx_t_8;
+      goto __pyx_L12;
     }
     /*else*/ {
 
-      /* "_proj.pyx":144
+      /* "_proj.pyx":203
  *                 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_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_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_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_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_L14:;
+    __pyx_L12:;
 
-    /* "_proj.pyx":145
+    /* "_proj.pyx":204
  *             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":205
  *                 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":206
  *             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 = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__pyx_t_1) {
 
-        /* "_proj.pyx":148
+        /* "_proj.pyx":207
  *                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_GOTREF(__pyx_t_2);
-        __Pyx_Raise(__pyx_t_2, 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_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 = 207; __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 = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        goto __pyx_L15;
       }
-      __pyx_L17:;
+      __pyx_L15:;
 
-      /* "_proj.pyx":149
+      /* "_proj.pyx":208
  *                 if errcheck:
  *                     raise RuntimeError('projection undefined')
  *                 ydatab[i] = 1.e30             # <<<<<<<<<<<<<<
@@ -1934,52 +2204,43 @@ 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_L14;
     }
 
-    /* "_proj.pyx":150
+    /* "_proj.pyx":209
  *                     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 = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__pyx_t_1) {
 
-      /* "_proj.pyx":151
+      /* "_proj.pyx":210
  *                 ydatab[i] = 1.e30
  *             elif radians:
  *                 ydatab[i] = projlonlatout.v             # <<<<<<<<<<<<<<
  *             else:
  *                 ydatab[i] = _rad2dg*projlonlatout.v
  */
-      (__pyx_v_ydatab[__pyx_v_i]) = __pyx_v_projlonlatout.v;
-      goto __pyx_L16;
+      __pyx_t_8 = __pyx_v_projlonlatout.v;
+      (__pyx_v_ydatab[__pyx_v_i]) = __pyx_t_8;
+      goto __pyx_L14;
     }
     /*else*/ {
 
-      /* "_proj.pyx":153
+      /* "_proj.pyx":212
  *                 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_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_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_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_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_L16:;
-    __pyx_L9_continue:;
+    __pyx_L14:;
+    __pyx_L6_continue:;
   }
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -1988,7 +2249,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("_proj.Proj._inv");
+  __Pyx_AddTraceback("_proj.Proj._inv", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -1996,7 +2257,18 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_
   return __pyx_r;
 }
 
-/* "_proj.pyx":227
+/* Python wrapper */
+static PyObject *__pyx_pw_5_proj_4Proj_11is_latlong(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_5_proj_4Proj_11is_latlong(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("is_latlong (wrapper)", 0);
+  __pyx_r = __pyx_pf_5_proj_4Proj_10is_latlong(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "_proj.pyx":291
  * #               llptr[i].v = _rad2dg*projlonlatout.v
  * 
  *     def is_latlong(self):             # <<<<<<<<<<<<<<
@@ -2004,23 +2276,26 @@ static PyObject *__pyx_pf_5_proj_4Proj_4_inv(PyObject *__pyx_v_self, PyObject *_
  *         cdef int i
  */
 
-static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pf_5_proj_4Proj_10is_latlong(struct __pyx_obj_5_proj_Proj *__pyx_v_self) {
   int __pyx_v_i;
   PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  __Pyx_RefNannySetupContext("is_latlong");
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("is_latlong", 0);
 
-  /* "_proj.pyx":230
+  /* "_proj.pyx":294
  *         # returns True if projection in geographic (lon/lat) coordinates
  *         cdef int i
  *         i = pj_is_latlong(self.projpj)             # <<<<<<<<<<<<<<
  *         if i:
  *             return True
  */
-  __pyx_v_i = pj_is_latlong(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projpj);
+  __pyx_v_i = pj_is_latlong(__pyx_v_self->projpj);
 
-  /* "_proj.pyx":231
+  /* "_proj.pyx":295
  *         cdef int i
  *         i = pj_is_latlong(self.projpj)
  *         if i:             # <<<<<<<<<<<<<<
@@ -2029,7 +2304,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO
  */
   if (__pyx_v_i) {
 
-    /* "_proj.pyx":232
+    /* "_proj.pyx":296
  *         i = pj_is_latlong(self.projpj)
  *         if i:
  *             return True             # <<<<<<<<<<<<<<
@@ -2037,16 +2312,16 @@ 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 = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_r = __pyx_t_1;
     __pyx_t_1 = 0;
     goto __pyx_L0;
-    goto __pyx_L5;
+    goto __pyx_L3;
   }
   /*else*/ {
 
-    /* "_proj.pyx":234
+    /* "_proj.pyx":298
  *             return True
  *         else:
  *             return False             # <<<<<<<<<<<<<<
@@ -2054,19 +2329,19 @@ 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 = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_r = __pyx_t_1;
     __pyx_t_1 = 0;
     goto __pyx_L0;
   }
-  __pyx_L5:;
+  __pyx_L3:;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("_proj.Proj.is_latlong");
+  __Pyx_AddTraceback("_proj.Proj.is_latlong", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -2074,7 +2349,18 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO
   return __pyx_r;
 }
 
-/* "_proj.pyx":236
+/* Python wrapper */
+static PyObject *__pyx_pw_5_proj_4Proj_13is_geocent(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_5_proj_4Proj_13is_geocent(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("is_geocent (wrapper)", 0);
+  __pyx_r = __pyx_pf_5_proj_4Proj_12is_geocent(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "_proj.pyx":300
  *             return False
  * 
  *     def is_geocent(self):             # <<<<<<<<<<<<<<
@@ -2082,23 +2368,26 @@ static PyObject *__pyx_pf_5_proj_4Proj_5is_latlong(PyObject *__pyx_v_self, CYTHO
  *         cdef int i
  */
 
-static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pf_5_proj_4Proj_12is_geocent(struct __pyx_obj_5_proj_Proj *__pyx_v_self) {
   int __pyx_v_i;
   PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  __Pyx_RefNannySetupContext("is_geocent");
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("is_geocent", 0);
 
-  /* "_proj.pyx":239
+  /* "_proj.pyx":303
  *         # returns True if projection in geocentric (x/y) coordinates
  *         cdef int i
  *         i = pj_is_geocent(self.projpj)             # <<<<<<<<<<<<<<
  *         if i:
  *             return True
  */
-  __pyx_v_i = pj_is_geocent(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->projpj);
+  __pyx_v_i = pj_is_geocent(__pyx_v_self->projpj);
 
-  /* "_proj.pyx":240
+  /* "_proj.pyx":304
  *         cdef int i
  *         i = pj_is_geocent(self.projpj)
  *         if i:             # <<<<<<<<<<<<<<
@@ -2107,7 +2396,7 @@ static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHO
  */
   if (__pyx_v_i) {
 
-    /* "_proj.pyx":241
+    /* "_proj.pyx":305
  *         i = pj_is_geocent(self.projpj)
  *         if i:
  *             return True             # <<<<<<<<<<<<<<
@@ -2115,16 +2404,16 @@ 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 = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_r = __pyx_t_1;
     __pyx_t_1 = 0;
     goto __pyx_L0;
-    goto __pyx_L5;
+    goto __pyx_L3;
   }
   /*else*/ {
 
-    /* "_proj.pyx":243
+    /* "_proj.pyx":307
  *             return True
  *         else:
  *             return False             # <<<<<<<<<<<<<<
@@ -2132,19 +2421,19 @@ 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 = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_r = __pyx_t_1;
     __pyx_t_1 = 0;
     goto __pyx_L0;
   }
-  __pyx_L5:;
+  __pyx_L3:;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("_proj.Proj.is_geocent");
+  __Pyx_AddTraceback("_proj.Proj.is_geocent", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -2152,21 +2441,32 @@ static PyObject *__pyx_pf_5_proj_4Proj_6is_geocent(PyObject *__pyx_v_self, CYTHO
   return __pyx_r;
 }
 
-/* "_proj.pyx":15
- * cdef class Proj:
+/* Python wrapper */
+static PyObject *__pyx_pw_5_proj_4Proj_12proj_version_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5_proj_4Proj_12proj_version_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5_proj_4Proj_12proj_version___get__(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "_proj.pyx":65
  *     cdef projPJ projpj
+ *     cdef projCtx projctx
  *     cdef public object proj_version             # <<<<<<<<<<<<<<
  *     cdef char *pjinitstring
  *     cdef public object srs
  */
 
-static PyObject *__pyx_pf_5_proj_4Proj_12proj_version___get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pf_5_proj_4Proj_12proj_version___get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pf_5_proj_4Proj_12proj_version___get__(struct __pyx_obj_5_proj_Proj *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
-  __Pyx_RefNannySetupContext("__get__");
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->proj_version);
-  __pyx_r = ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->proj_version;
+  __Pyx_INCREF(__pyx_v_self->proj_version);
+  __pyx_r = __pyx_v_self->proj_version;
   goto __pyx_L0;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -2176,37 +2476,70 @@ static PyObject *__pyx_pf_5_proj_4Proj_12proj_version___get__(PyObject *__pyx_v_
   return __pyx_r;
 }
 
-static int __pyx_pf_5_proj_4Proj_12proj_version_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pf_5_proj_4Proj_12proj_version_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+/* Python wrapper */
+static int __pyx_pw_5_proj_4Proj_12proj_version_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5_proj_4Proj_12proj_version_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
-  __Pyx_RefNannySetupContext("__set__");
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5_proj_4Proj_12proj_version_2__set__(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5_proj_4Proj_12proj_version_2__set__(struct __pyx_obj_5_proj_Proj *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__", 0);
   __Pyx_INCREF(__pyx_v_value);
   __Pyx_GIVEREF(__pyx_v_value);
-  __Pyx_GOTREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->proj_version);
-  __Pyx_DECREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->proj_version);
-  ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->proj_version = __pyx_v_value;
+  __Pyx_GOTREF(__pyx_v_self->proj_version);
+  __Pyx_DECREF(__pyx_v_self->proj_version);
+  __pyx_v_self->proj_version = __pyx_v_value;
 
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_5_proj_4Proj_12proj_version_2__del__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pf_5_proj_4Proj_12proj_version_2__del__(PyObject *__pyx_v_self) {
+/* Python wrapper */
+static int __pyx_pw_5_proj_4Proj_12proj_version_5__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_5_proj_4Proj_12proj_version_5__del__(PyObject *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5_proj_4Proj_12proj_version_4__del__(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5_proj_4Proj_12proj_version_4__del__(struct __pyx_obj_5_proj_Proj *__pyx_v_self) {
   int __pyx_r;
-  __Pyx_RefNannySetupContext("__del__");
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__", 0);
   __Pyx_INCREF(Py_None);
   __Pyx_GIVEREF(Py_None);
-  __Pyx_GOTREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->proj_version);
-  __Pyx_DECREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->proj_version);
-  ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->proj_version = Py_None;
+  __Pyx_GOTREF(__pyx_v_self->proj_version);
+  __Pyx_DECREF(__pyx_v_self->proj_version);
+  __pyx_v_self->proj_version = Py_None;
 
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "_proj.pyx":17
+/* Python wrapper */
+static PyObject *__pyx_pw_5_proj_4Proj_3srs_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5_proj_4Proj_3srs_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5_proj_4Proj_3srs___get__(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "_proj.pyx":67
  *     cdef public object proj_version
  *     cdef char *pjinitstring
  *     cdef public object srs             # <<<<<<<<<<<<<<
@@ -2214,13 +2547,13 @@ static int __pyx_pf_5_proj_4Proj_12proj_version_2__del__(PyObject *__pyx_v_self)
  *     def __cinit__(self, projstring):
  */
 
-static PyObject *__pyx_pf_5_proj_4Proj_3srs___get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pf_5_proj_4Proj_3srs___get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pf_5_proj_4Proj_3srs___get__(struct __pyx_obj_5_proj_Proj *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
-  __Pyx_RefNannySetupContext("__get__");
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__", 0);
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs);
-  __pyx_r = ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs;
+  __Pyx_INCREF(__pyx_v_self->srs);
+  __pyx_r = __pyx_v_self->srs;
   goto __pyx_L0;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -2230,128 +2563,130 @@ static PyObject *__pyx_pf_5_proj_4Proj_3srs___get__(PyObject *__pyx_v_self) {
   return __pyx_r;
 }
 
-static int __pyx_pf_5_proj_4Proj_3srs_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pf_5_proj_4Proj_3srs_1__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+/* Python wrapper */
+static int __pyx_pw_5_proj_4Proj_3srs_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5_proj_4Proj_3srs_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5_proj_4Proj_3srs_2__set__(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5_proj_4Proj_3srs_2__set__(struct __pyx_obj_5_proj_Proj *__pyx_v_self, PyObject *__pyx_v_value) {
   int __pyx_r;
-  __Pyx_RefNannySetupContext("__set__");
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__", 0);
   __Pyx_INCREF(__pyx_v_value);
   __Pyx_GIVEREF(__pyx_v_value);
-  __Pyx_GOTREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs);
-  __Pyx_DECREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs);
-  ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs = __pyx_v_value;
+  __Pyx_GOTREF(__pyx_v_self->srs);
+  __Pyx_DECREF(__pyx_v_self->srs);
+  __pyx_v_self->srs = __pyx_v_value;
 
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_5_proj_4Proj_3srs_2__del__(PyObject *__pyx_v_self); /*proto*/
-static int __pyx_pf_5_proj_4Proj_3srs_2__del__(PyObject *__pyx_v_self) {
+/* Python wrapper */
+static int __pyx_pw_5_proj_4Proj_3srs_5__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_5_proj_4Proj_3srs_5__del__(PyObject *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5_proj_4Proj_3srs_4__del__(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5_proj_4Proj_3srs_4__del__(struct __pyx_obj_5_proj_Proj *__pyx_v_self) {
   int __pyx_r;
-  __Pyx_RefNannySetupContext("__del__");
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__", 0);
   __Pyx_INCREF(Py_None);
   __Pyx_GIVEREF(Py_None);
-  __Pyx_GOTREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs);
-  __Pyx_DECREF(((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs);
-  ((struct __pyx_obj_5_proj_Proj *)__pyx_v_self)->srs = Py_None;
+  __Pyx_GOTREF(__pyx_v_self->srs);
+  __Pyx_DECREF(__pyx_v_self->srs);
+  __pyx_v_self->srs = Py_None;
 
   __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "_proj.pyx":245
- *             return False
- * 
- * def _transform(Proj p1, Proj p2, inx, iny, inz, radians):             # <<<<<<<<<<<<<<
- *     # private function to call pj_transform
- *     cdef void *xdata, *ydata, *zdata
- */
-
-static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_5_proj_1_transform = {__Pyx_NAMESTR("_transform"), (PyCFunction)__pyx_pf_5_proj_1_transform, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+/* Python wrapper */
+static PyObject *__pyx_pw_5_proj_3_transform(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_5_proj_3_transform = {__Pyx_NAMESTR("_transform"), (PyCFunction)__pyx_pw_5_proj_3_transform, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
+static PyObject *__pyx_pw_5_proj_3_transform(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct __pyx_obj_5_proj_Proj *__pyx_v_p1 = 0;
   struct __pyx_obj_5_proj_Proj *__pyx_v_p2 = 0;
   PyObject *__pyx_v_inx = 0;
   PyObject *__pyx_v_iny = 0;
   PyObject *__pyx_v_inz = 0;
   PyObject *__pyx_v_radians = 0;
-  void *__pyx_v_xdata;
-  void *__pyx_v_ydata;
-  void *__pyx_v_zdata;
-  double *__pyx_v_xx;
-  double *__pyx_v_yy;
-  double *__pyx_v_zz;
-  Py_ssize_t __pyx_v_buflenx;
-  Py_ssize_t __pyx_v_bufleny;
-  Py_ssize_t __pyx_v_buflenz;
-  Py_ssize_t __pyx_v_npts;
-  Py_ssize_t __pyx_v_i;
-  int __pyx_v_ierr;
-  PyObject *__pyx_r = NULL;
-  int __pyx_t_1;
-  int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_t_5;
-  Py_ssize_t __pyx_t_6;
-  PyObject *__pyx_t_7 = NULL;
-  double __pyx_t_8;
-  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__p1,&__pyx_n_s__p2,&__pyx_n_s__inx,&__pyx_n_s__iny,&__pyx_n_s__inz,&__pyx_n_s__radians,0};
-  __Pyx_RefNannySetupContext("_transform");
-  __pyx_self = __pyx_self;
-  if (unlikely(__pyx_kwds)) {
-    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("_transform (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__p1,&__pyx_n_s__p2,&__pyx_n_s__inx,&__pyx_n_s__iny,&__pyx_n_s__inz,&__pyx_n_s__radians,0};
     PyObject* values[6] = {0,0,0,0,0,0};
-    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;
-    }
-    switch (PyTuple_GET_SIZE(__pyx_args)) {
-      case  0:
-      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p1);
-      if (likely(values[0])) kw_args--;
-      else goto __pyx_L5_argtuple_error;
-      case  1:
-      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;}
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_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;
       }
-      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;}
-      }
-      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;}
-      }
-      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;}
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p1)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__p2)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__inx)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  3:
+        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__iny)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  4:
+        if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__inz)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  5:
+        if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__radians)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("_transform", 1, 6, 6, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __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;}
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_transform") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __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;}
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
+      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);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
     }
     __pyx_v_p1 = ((struct __pyx_obj_5_proj_Proj *)values[0]);
     __pyx_v_p2 = ((struct __pyx_obj_5_proj_Proj *)values[1]);
@@ -2359,30 +2694,63 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p
     __pyx_v_iny = values[3];
     __pyx_v_inz = values[4];
     __pyx_v_radians = values[5];
-  } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
-    goto __pyx_L5_argtuple_error;
-  } else {
-    __pyx_v_p1 = ((struct __pyx_obj_5_proj_Proj *)PyTuple_GET_ITEM(__pyx_args, 0));
-    __pyx_v_p2 = ((struct __pyx_obj_5_proj_Proj *)PyTuple_GET_ITEM(__pyx_args, 1));
-    __pyx_v_inx = PyTuple_GET_ITEM(__pyx_args, 2);
-    __pyx_v_iny = PyTuple_GET_ITEM(__pyx_args, 3);
-    __pyx_v_inz = PyTuple_GET_ITEM(__pyx_args, 4);
-    __pyx_v_radians = PyTuple_GET_ITEM(__pyx_args, 5);
   }
   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 = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("_proj._transform");
+  __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 = 309; __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 = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_5_proj_2_transform(__pyx_self, __pyx_v_p1, __pyx_v_p2, __pyx_v_inx, __pyx_v_iny, __pyx_v_inz, __pyx_v_radians);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "_proj.pyx":309
+ *             return False
+ * 
+ * def _transform(Proj p1, Proj p2, inx, iny, inz, radians):             # <<<<<<<<<<<<<<
+ *     # private function to call pj_transform
+ *     cdef void *xdata, *ydata, *zdata
+ */
+
+static PyObject *__pyx_pf_5_proj_2_transform(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_5_proj_Proj *__pyx_v_p1, struct __pyx_obj_5_proj_Proj *__pyx_v_p2, PyObject *__pyx_v_inx, PyObject *__pyx_v_iny, PyObject *__pyx_v_inz, PyObject *__pyx_v_radians) {
+  void *__pyx_v_xdata;
+  void *__pyx_v_ydata;
+  void *__pyx_v_zdata;
+  double *__pyx_v_xx;
+  double *__pyx_v_yy;
+  double *__pyx_v_zz;
+  Py_ssize_t __pyx_v_buflenx;
+  Py_ssize_t __pyx_v_bufleny;
+  Py_ssize_t __pyx_v_buflenz;
+  Py_ssize_t __pyx_v_npts;
+  Py_ssize_t __pyx_v_i;
+  int __pyx_v_err;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_t_5;
+  Py_ssize_t __pyx_t_6;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("_transform", 0);
 
-  /* "_proj.pyx":250
- *     cdef double *xx, *yy, *zz
+  /* "_proj.pyx":315
  *     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:
@@ -2390,20 +2758,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":316
+ *     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);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L6;
+    __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0);
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L3;
   }
-  __pyx_L6:;
+  __pyx_L3:;
 
-  /* "_proj.pyx":252
+  /* "_proj.pyx":317
  *     if PyObject_AsWriteBuffer(inx, &xdata, &buflenx) <> 0:
  *         raise RuntimeError
  *     if PyObject_AsWriteBuffer(iny, &ydata, &bufleny) <> 0:             # <<<<<<<<<<<<<<
@@ -2413,20 +2781,20 @@ 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":318
  *         raise RuntimeError
  *     if PyObject_AsWriteBuffer(iny, &ydata, &bufleny) <> 0:
  *         raise RuntimeError             # <<<<<<<<<<<<<<
  *     if inz is not None:
  *         if PyObject_AsWriteBuffer(inz, &zdata, &buflenz) <> 0:
  */
-    __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L7;
+    __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0);
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L4;
   }
-  __pyx_L7:;
+  __pyx_L4:;
 
-  /* "_proj.pyx":254
+  /* "_proj.pyx":319
  *     if PyObject_AsWriteBuffer(iny, &ydata, &bufleny) <> 0:
  *         raise RuntimeError
  *     if inz is not None:             # <<<<<<<<<<<<<<
@@ -2436,7 +2804,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":320
  *         raise RuntimeError
  *     if inz is not None:
  *         if PyObject_AsWriteBuffer(inz, &zdata, &buflenz) <> 0:             # <<<<<<<<<<<<<<
@@ -2446,23 +2814,23 @@ 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":321
  *     if inz is not None:
  *         if PyObject_AsWriteBuffer(inz, &zdata, &buflenz) <> 0:
  *             raise RuntimeError             # <<<<<<<<<<<<<<
  *     else:
  *         buflenz = bufleny
  */
-      __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L9;
+      __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0);
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      goto __pyx_L6;
     }
-    __pyx_L9:;
-    goto __pyx_L8;
+    __pyx_L6:;
+    goto __pyx_L5;
   }
   /*else*/ {
 
-    /* "_proj.pyx":258
+    /* "_proj.pyx":323
  *             raise RuntimeError
  *     else:
  *         buflenz = bufleny             # <<<<<<<<<<<<<<
@@ -2471,9 +2839,9 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p
  */
     __pyx_v_buflenz = __pyx_v_bufleny;
   }
-  __pyx_L8:;
+  __pyx_L5:;
 
-  /* "_proj.pyx":259
+  /* "_proj.pyx":324
  *     else:
  *         buflenz = bufleny
  *     if not (buflenx == bufleny == buflenz):             # <<<<<<<<<<<<<<
@@ -2487,23 +2855,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":325
  *         buflenz = bufleny
  *     if not (buflenx == bufleny == buflenz):
  *         raise RuntimeError('x,y and z must be same size')             # <<<<<<<<<<<<<<
  *     xx = <double *>xdata
  *     yy = <double *>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 = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_Raise(__pyx_t_3, 0, 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 = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L10;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L7;
   }
-  __pyx_L10:;
+  __pyx_L7:;
 
-  /* "_proj.pyx":261
+  /* "_proj.pyx":326
  *     if not (buflenx == bufleny == buflenz):
  *         raise RuntimeError('x,y and z must be same size')
  *     xx = <double *>xdata             # <<<<<<<<<<<<<<
@@ -2512,7 +2880,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":327
  *         raise RuntimeError('x,y and z must be same size')
  *     xx = <double *>xdata
  *     yy = <double *>ydata             # <<<<<<<<<<<<<<
@@ -2521,7 +2889,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":328
  *     xx = <double *>xdata
  *     yy = <double *>ydata
  *     if inz is not None:             # <<<<<<<<<<<<<<
@@ -2531,7 +2899,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":329
  *     yy = <double *>ydata
  *     if inz is not None:
  *         zz = <double *>zdata             # <<<<<<<<<<<<<<
@@ -2539,11 +2907,11 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p
  *     if not radians and p1.is_latlong():
  */
     __pyx_v_zz = ((double *)__pyx_v_zdata);
-    goto __pyx_L11;
+    goto __pyx_L8;
   }
-  __pyx_L11:;
+  __pyx_L8:;
 
-  /* "_proj.pyx":265
+  /* "_proj.pyx":330
  *     if inz is not None:
  *         zz = <double *>zdata
  *     npts = buflenx/8             # <<<<<<<<<<<<<<
@@ -2552,22 +2920,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":331
  *         zz = <double *>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 = 331; __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 = 331; __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 = 331; __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 = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_5 = __pyx_t_2;
   } else {
@@ -2575,7 +2943,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p
   }
   if (__pyx_t_5) {
 
-    /* "_proj.pyx":267
+    /* "_proj.pyx":332
  *     npts = buflenx/8
  *     if not radians and p1.is_latlong():
  *         for i from 0 <= i < npts:             # <<<<<<<<<<<<<<
@@ -2585,131 +2953,111 @@ 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":333
  *     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_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_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_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_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":269
+      /* "_proj.pyx":334
  *         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_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_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_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_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;
+    goto __pyx_L9;
   }
-  __pyx_L12:;
+  __pyx_L9:;
 
-  /* "_proj.pyx":270
+  /* "_proj.pyx":335
  *             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":336
  *             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);
-    goto __pyx_L15;
+    __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_L12;
   }
   /*else*/ {
 
-    /* "_proj.pyx":273
- *         ierr = pj_transform(p1.projpj, p2.projpj, npts, 0, xx, yy, zz)
+    /* "_proj.pyx":338
+ *         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:;
+  __pyx_L12:;
 
-  /* "_proj.pyx":274
+  /* "_proj.pyx":339
  *     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":340
+ *         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 = 340; __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_GOTREF(((PyObject *)__pyx_t_3));
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__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 = 340; __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);
+    __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;}
-    goto __pyx_L16;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L13;
   }
-  __pyx_L16:;
+  __pyx_L13:;
 
-  /* "_proj.pyx":276
- *     if ierr != 0:
- *         raise RuntimeError(pj_strerrno(ierr))
+  /* "_proj.pyx":341
+ *     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 = 341; __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 = 341; __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 = 341; __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 = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_2 = __pyx_t_5;
   } else {
@@ -2717,8 +3065,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":342
+ *         raise RuntimeError(pj_strerrno(err))
  *     if not radians and p2.is_latlong():
  *         for i from 0 <= i < npts:             # <<<<<<<<<<<<<<
  *             xx[i] = xx[i]*_rad2dg
@@ -2727,55 +3075,34 @@ 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":343
  *     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_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_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_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_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":279
+      /* "_proj.pyx":344
  *         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_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_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_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_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;
+    goto __pyx_L14;
   }
-  __pyx_L17:;
+  __pyx_L14:;
 
   __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_7);
-  __Pyx_AddTraceback("_proj._transform");
+  __Pyx_AddTraceback("_proj._transform", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -2783,7 +3110,7 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p
   return __pyx_r;
 }
 
-/* "_proj.pyx":281
+/* "_proj.pyx":346
  *             yy[i] = yy[i]*_rad2dg
  * 
  * cdef _strencode(pystr,encoding='ascii'):             # <<<<<<<<<<<<<<
@@ -2791,21 +3118,28 @@ static PyObject *__pyx_pf_5_proj_1_transform(PyObject *__pyx_self, PyObject *__p
  *     try:
  */
 
-static  PyObject *__pyx_f_5_proj__strencode(PyObject *__pyx_v_pystr, struct __pyx_opt_args_5_proj__strencode *__pyx_optional_args) {
+static PyObject *__pyx_f_5_proj__strencode(PyObject *__pyx_v_pystr, struct __pyx_opt_args_5_proj__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;
-  int __pyx_t_4;
-  __Pyx_RefNannySetupContext("_strencode");
+  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", 0);
   if (__pyx_optional_args) {
     if (__pyx_optional_args->__pyx_n > 0) {
       __pyx_v_encoding = __pyx_optional_args->encoding;
     }
   }
 
-  /* "_proj.pyx":283
+  /* "_proj.pyx":348
  * cdef _strencode(pystr,encoding='ascii'):
  *     # encode a string into bytes.  If already bytes, do nothing.
  *     try:             # <<<<<<<<<<<<<<
@@ -2813,14 +3147,13 @@ static  PyObject *__pyx_f_5_proj__strencode(PyObject *__pyx_v_pystr, struct __py
  *     except AttributeError:
  */
   {
-    PyObject *__pyx_save_exc_type, *__pyx_save_exc_value, *__pyx_save_exc_tb;
-    __Pyx_ExceptionSave(&__pyx_save_exc_type, &__pyx_save_exc_value, &__pyx_save_exc_tb);
-    __Pyx_XGOTREF(__pyx_save_exc_type);
-    __Pyx_XGOTREF(__pyx_save_exc_value);
-    __Pyx_XGOTREF(__pyx_save_exc_tb);
+    __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:*/ {
 
-      /* "_proj.pyx":284
+      /* "_proj.pyx":349
  *     # encode a string into bytes.  If already bytes, do nothing.
  *     try:
  *         return pystr.encode(encoding)             # <<<<<<<<<<<<<<
@@ -2828,94 +3161,97 @@ static  PyObject *__pyx_f_5_proj__strencode(PyObject *__pyx_v_pystr, struct __py
  *         return pystr # already bytes?
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_1 = PyObject_GetAttr(__pyx_v_pystr, __pyx_n_s__encode); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+      __pyx_t_4 = PyObject_GetAttr(__pyx_v_pystr, __pyx_n_s__encode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __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 = 349; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __Pyx_GOTREF(__pyx_t_5);
       __Pyx_INCREF(__pyx_v_encoding);
-      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_encoding);
+      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_encoding);
       __Pyx_GIVEREF(__pyx_v_encoding);
-      __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-      __pyx_r = __pyx_t_3;
-      __pyx_t_3 = 0;
+      __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 = 349; __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_save_exc_type); __pyx_save_exc_type = 0;
-    __Pyx_XDECREF(__pyx_save_exc_value); __pyx_save_exc_value = 0;
-    __Pyx_XDECREF(__pyx_save_exc_tb); __pyx_save_exc_tb = 0;
+    __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_save_exc_type);
-    __Pyx_XGIVEREF(__pyx_save_exc_value);
-    __Pyx_XGIVEREF(__pyx_save_exc_tb);
-    __Pyx_ExceptionReset(__pyx_save_exc_type, __pyx_save_exc_value, __pyx_save_exc_tb);
+    __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_1); __pyx_t_1 = 0;
-    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __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;
 
-    /* "_proj.pyx":285
+    /* "_proj.pyx":350
  *     try:
  *         return pystr.encode(encoding)
  *     except AttributeError:             # <<<<<<<<<<<<<<
  *         return pystr # already bytes?
+ * 
  */
-    __pyx_t_4 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
-    if (__pyx_t_4) {
-      __Pyx_AddTraceback("_proj._strencode");
-      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_GOTREF(__pyx_t_1);
+    __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 = 350; __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":351
  *         return pystr.encode(encoding)
  *     except AttributeError:
  *         return pystr # already bytes?             # <<<<<<<<<<<<<<
+ * 
+ * cdef class Geod:
  */
       __Pyx_XDECREF(__pyx_r);
       __Pyx_INCREF(__pyx_v_pystr);
       __pyx_r = __pyx_v_pystr;
-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __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_3); __pyx_t_3 = 0;
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __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_save_exc_type);
-    __Pyx_XGIVEREF(__pyx_save_exc_value);
-    __Pyx_XGIVEREF(__pyx_save_exc_tb);
-    __Pyx_ExceptionReset(__pyx_save_exc_type, __pyx_save_exc_value, __pyx_save_exc_tb);
+    __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_save_exc_type);
-    __Pyx_XGIVEREF(__pyx_save_exc_value);
-    __Pyx_XGIVEREF(__pyx_save_exc_tb);
-    __Pyx_ExceptionReset(__pyx_save_exc_type, __pyx_save_exc_value, __pyx_save_exc_tb);
+    __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_save_exc_type);
-    __Pyx_XGIVEREF(__pyx_save_exc_value);
-    __Pyx_XGIVEREF(__pyx_save_exc_tb);
-    __Pyx_ExceptionReset(__pyx_save_exc_type, __pyx_save_exc_value, __pyx_save_exc_tb);
+    __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_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("_proj._strencode");
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_AddTraceback("_proj._strencode", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -2923,101 +3259,2124 @@ static  PyObject *__pyx_f_5_proj__strencode(PyObject *__pyx_v_pystr, struct __py
   return __pyx_r;
 }
 
-static PyObject *__pyx_tp_new_5_proj_Proj(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_5_proj_Proj *p;
-  PyObject *o = (*t->tp_alloc)(t, 0);
-  if (!o) return 0;
-  p = ((struct __pyx_obj_5_proj_Proj *)o);
-  p->proj_version = Py_None; Py_INCREF(Py_None);
-  p->srs = Py_None; Py_INCREF(Py_None);
-  if (__pyx_pf_5_proj_4Proj___cinit__(o, a, k) < 0) {
-    Py_DECREF(o); o = 0;
-  }
-  return o;
-}
-
-static void __pyx_tp_dealloc_5_proj_Proj(PyObject *o) {
-  struct __pyx_obj_5_proj_Proj *p = (struct __pyx_obj_5_proj_Proj *)o;
+/* Python wrapper */
+static int __pyx_pw_5_proj_4Geod_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_5_proj_4Geod_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_a = 0;
+  PyObject *__pyx_v_f = 0;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
   {
-    PyObject *etype, *eval, *etb;
-    PyErr_Fetch(&etype, &eval, &etb);
-    ++Py_REFCNT(o);
-    __pyx_pf_5_proj_4Proj_1__dealloc__(o);
-    if (PyErr_Occurred()) PyErr_WriteUnraisable(o);
-    --Py_REFCNT(o);
-    PyErr_Restore(etype, eval, etb);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__f,0};
+    PyObject* values[2] = {0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        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 (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__f)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+    }
+    __pyx_v_a = values[0];
+    __pyx_v_f = values[1];
   }
-  Py_XDECREF(p->proj_version);
-  Py_XDECREF(p->srs);
-  (*Py_TYPE(o)->tp_free)(o);
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_proj.Geod.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return -1;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_5_proj_4Geod___cinit__(((struct __pyx_obj_5_proj_Geod *)__pyx_v_self), __pyx_v_a, __pyx_v_f);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static int __pyx_tp_traverse_5_proj_Proj(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_5_proj_Proj *p = (struct __pyx_obj_5_proj_Proj *)o;
-  if (p->proj_version) {
-    e = (*v)(p->proj_version, a); if (e) return e;
-  }
-  if (p->srs) {
-    e = (*v)(p->srs, a); if (e) return e;
-  }
-  return 0;
+/* "_proj.pyx":357
+ *     cdef public object initstring
+ * 
+ *     def __cinit__(self, a, f):             # <<<<<<<<<<<<<<
+ *         self.initstring = '+a=%s +f=%s' % (a, f)
+ *         GeodesicInit(&self._Geodesic, <double> a, <double> f)
+ */
+
+static int __pyx_pf_5_proj_4Geod___cinit__(struct __pyx_obj_5_proj_Geod *__pyx_v_self, PyObject *__pyx_v_a, PyObject *__pyx_v_f) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  double __pyx_t_3;
+  double __pyx_t_4;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__cinit__", 0);
+
+  /* "_proj.pyx":358
+ * 
+ *     def __cinit__(self, a, f):
+ *         self.initstring = '+a=%s +f=%s' % (a, f)             # <<<<<<<<<<<<<<
+ *         GeodesicInit(&self._Geodesic, <double> a, <double> f)
+ * 
+ */
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(__pyx_v_a);
+  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_a);
+  __Pyx_GIVEREF(__pyx_v_a);
+  __Pyx_INCREF(__pyx_v_f);
+  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_f);
+  __Pyx_GIVEREF(__pyx_v_f);
+  __pyx_t_2 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_17), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
+  __Pyx_GOTREF(__pyx_v_self->initstring);
+  __Pyx_DECREF(__pyx_v_self->initstring);
+  __pyx_v_self->initstring = ((PyObject *)__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "_proj.pyx":359
+ *     def __cinit__(self, a, f):
+ *         self.initstring = '+a=%s +f=%s' % (a, f)
+ *         GeodesicInit(&self._Geodesic, <double> a, <double> f)             # <<<<<<<<<<<<<<
+ * 
+ *     def __reduce__(self):
+ */
+  __pyx_t_3 = __pyx_PyFloat_AsDouble(__pyx_v_a); if (unlikely((__pyx_t_3 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_v_f); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  GeodesicInit((&__pyx_v_self->_Geodesic), ((double)__pyx_t_3), ((double)__pyx_t_4));
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("_proj.Geod.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static int __pyx_tp_clear_5_proj_Proj(PyObject *o) {
-  struct __pyx_obj_5_proj_Proj *p = (struct __pyx_obj_5_proj_Proj *)o;
-  PyObject* tmp;
-  tmp = ((PyObject*)p->proj_version);
-  p->proj_version = Py_None; Py_INCREF(Py_None);
-  Py_XDECREF(tmp);
-  tmp = ((PyObject*)p->srs);
-  p->srs = Py_None; Py_INCREF(Py_None);
-  Py_XDECREF(tmp);
-  return 0;
+/* Python wrapper */
+static PyObject *__pyx_pw_5_proj_4Geod_3__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static char __pyx_doc_5_proj_4Geod_2__reduce__[] = "special method that allows pyproj.Geod instance to be pickled";
+static PyObject *__pyx_pw_5_proj_4Geod_3__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__reduce__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5_proj_4Geod_2__reduce__(((struct __pyx_obj_5_proj_Geod *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static PyObject *__pyx_getprop_5_proj_4Proj_proj_version(PyObject *o, void *x) {
-  return __pyx_pf_5_proj_4Proj_12proj_version___get__(o);
+/* "_proj.pyx":361
+ *         GeodesicInit(&self._Geodesic, <double> a, <double> f)
+ * 
+ *     def __reduce__(self):             # <<<<<<<<<<<<<<
+ *         """special method that allows pyproj.Geod instance to be pickled"""
+ *         return (self.__class__,(self.initstring,))
+ */
+
+static PyObject *__pyx_pf_5_proj_4Geod_2__reduce__(struct __pyx_obj_5_proj_Geod *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("__reduce__", 0);
+
+  /* "_proj.pyx":363
+ *     def __reduce__(self):
+ *         """special method that allows pyproj.Geod instance to be pickled"""
+ *         return (self.__class__,(self.initstring,))             # <<<<<<<<<<<<<<
+ * 
+ *     def _fwd(self, object lons, object lats, object az, object dist, radians=False):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __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 = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_v_self->initstring);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self->initstring);
+  __Pyx_GIVEREF(__pyx_v_self->initstring);
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_3, 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));
+  __pyx_t_1 = 0;
+  __pyx_t_2 = 0;
+  __pyx_r = ((PyObject *)__pyx_t_3);
+  __pyx_t_3 = 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_AddTraceback("_proj.Geod.__reduce__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static int __pyx_setprop_5_proj_4Proj_proj_version(PyObject *o, PyObject *v, void *x) {
-  if (v) {
-    return __pyx_pf_5_proj_4Proj_12proj_version_1__set__(o, v);
-  }
-  else {
-    return __pyx_pf_5_proj_4Proj_12proj_version_2__del__(o);
+/* Python wrapper */
+static PyObject *__pyx_pw_5_proj_4Geod_5_fwd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_5_proj_4Geod_4_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_pw_5_proj_4Geod_5_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;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("_fwd (wrapper)", 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};
+    PyObject* values[5] = {0,0,0,0,0};
+    values[4] = __pyx_k_18;
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_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 (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lons)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lats)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__az)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  3:
+        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dist)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __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, pos_args, "_fwd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __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 = 365; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_proj.Geod._fwd", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_5_proj_4Geod_4_fwd(((struct __pyx_obj_5_proj_Geod *)__pyx_v_self), __pyx_v_lons, __pyx_v_lats, __pyx_v_az, __pyx_v_dist, __pyx_v_radians);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "_proj.pyx":365
+ *         return (self.__class__,(self.initstring,))
+ * 
+ *     def _fwd(self, object lons, object lats, object az, object dist, radians=False):             # <<<<<<<<<<<<<<
+ *         """
+ *  forward transformation - determine longitude, latitude and back azimuth
+ */
+
+static PyObject *__pyx_pf_5_proj_4Geod_4_fwd(struct __pyx_obj_5_proj_Geod *__pyx_v_self, PyObject *__pyx_v_lons, PyObject *__pyx_v_lats, PyObject *__pyx_v_az, PyObject *__pyx_v_dist, PyObject *__pyx_v_radians) {
+  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_lat1;
+  double __pyx_v_lon1;
+  double __pyx_v_az1;
+  double __pyx_v_s12;
+  double __pyx_v_plon2;
+  double __pyx_v_plat2;
+  double __pyx_v_pazi2;
+  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;
+  __Pyx_RefNannySetupContext("_fwd", 0);
+
+  /* "_proj.pyx":377
+ *         cdef void *londata, *latdata, *azdat, *distdat
+ *         # 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) {
+
+    /* "_proj.pyx":378
+ *         # 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 = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  /* "_proj.pyx":379
+ *         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) {
+
+    /* "_proj.pyx":380
+ *             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 = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L4;
+  }
+  __pyx_L4:;
+
+  /* "_proj.pyx":381
+ *         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) {
+
+    /* "_proj.pyx":382
+ *             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 = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "_proj.pyx":383
+ *         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) {
+
+    /* "_proj.pyx":384
+ *             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 = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  /* "_proj.pyx":386
+ *             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) {
+
+    /* "_proj.pyx":387
+ *         # process data in buffer
+ *         if not buflenlons == buflenlats == buflenaz == buflend:
+ *             raise RuntimeError("Buffer lengths not the same")             # <<<<<<<<<<<<<<
+ *         ndim = buflenlons//_doublesize
+ *         lonsdata = <double *>londata
+ */
+    __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_19), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __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 = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L7;
+  }
+  __pyx_L7:;
+
+  /* "_proj.pyx":388
+ *         if not buflenlons == buflenlats == buflenaz == buflend:
+ *             raise RuntimeError("Buffer lengths not the same")
+ *         ndim = buflenlons//_doublesize             # <<<<<<<<<<<<<<
+ *         lonsdata = <double *>londata
+ *         latsdata = <double *>latdata
+ */
+  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_buflenlons); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __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 = 388; __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 = 388; __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 = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_v_ndim = __pyx_t_6;
+
+  /* "_proj.pyx":389
+ *             raise RuntimeError("Buffer lengths not the same")
+ *         ndim = buflenlons//_doublesize
+ *         lonsdata = <double *>londata             # <<<<<<<<<<<<<<
+ *         latsdata = <double *>latdata
+ *         azdata = <double *>azdat
+ */
+  __pyx_v_lonsdata = ((double *)__pyx_v_londata);
+
+  /* "_proj.pyx":390
+ *         ndim = buflenlons//_doublesize
+ *         lonsdata = <double *>londata
+ *         latsdata = <double *>latdata             # <<<<<<<<<<<<<<
+ *         azdata = <double *>azdat
+ *         distdata = <double *>distdat
+ */
+  __pyx_v_latsdata = ((double *)__pyx_v_latdata);
+
+  /* "_proj.pyx":391
+ *         lonsdata = <double *>londata
+ *         latsdata = <double *>latdata
+ *         azdata = <double *>azdat             # <<<<<<<<<<<<<<
+ *         distdata = <double *>distdat
+ *         for i from 0 <= i < ndim:
+ */
+  __pyx_v_azdata = ((double *)__pyx_v_azdat);
+
+  /* "_proj.pyx":392
+ *         latsdata = <double *>latdata
+ *         azdata = <double *>azdat
+ *         distdata = <double *>distdat             # <<<<<<<<<<<<<<
+ *         for i from 0 <= i < ndim:
+ *             if not radians:
+ */
+  __pyx_v_distdata = ((double *)__pyx_v_distdat);
+
+  /* "_proj.pyx":393
+ *         azdata = <double *>azdat
+ *         distdata = <double *>distdat
+ *         for i from 0 <= i < ndim:             # <<<<<<<<<<<<<<
+ *             if not radians:
+ *                 lon1 = lonsdata[i]
+ */
+  __pyx_t_6 = __pyx_v_ndim;
+  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) {
+
+    /* "_proj.pyx":394
+ *         distdata = <double *>distdat
+ *         for i from 0 <= i < ndim:
+ *             if not radians:             # <<<<<<<<<<<<<<
+ *                 lon1 = lonsdata[i]
+ *                 lat1 = latsdata[i]
+ */
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (!__pyx_t_2);
+    if (__pyx_t_1) {
+
+      /* "_proj.pyx":395
+ *         for i from 0 <= i < ndim:
+ *             if not radians:
+ *                 lon1 = lonsdata[i]             # <<<<<<<<<<<<<<
+ *                 lat1 = latsdata[i]
+ *                 az1 = azdata[i]
+ */
+      __pyx_v_lon1 = (__pyx_v_lonsdata[__pyx_v_i]);
+
+      /* "_proj.pyx":396
+ *             if not radians:
+ *                 lon1 = lonsdata[i]
+ *                 lat1 = latsdata[i]             # <<<<<<<<<<<<<<
+ *                 az1 = azdata[i]
+ *                 s12 = distdata[i]
+ */
+      __pyx_v_lat1 = (__pyx_v_latsdata[__pyx_v_i]);
+
+      /* "_proj.pyx":397
+ *                 lon1 = lonsdata[i]
+ *                 lat1 = latsdata[i]
+ *                 az1 = azdata[i]             # <<<<<<<<<<<<<<
+ *                 s12 = distdata[i]
+ *             else:
+ */
+      __pyx_v_az1 = (__pyx_v_azdata[__pyx_v_i]);
+
+      /* "_proj.pyx":398
+ *                 lat1 = latsdata[i]
+ *                 az1 = azdata[i]
+ *                 s12 = distdata[i]             # <<<<<<<<<<<<<<
+ *             else:
+ *                 lon1 = _dg2rad*lonsdata[i]
+ */
+      __pyx_v_s12 = (__pyx_v_distdata[__pyx_v_i]);
+      goto __pyx_L10;
+    }
+    /*else*/ {
+
+      /* "_proj.pyx":400
+ *                 s12 = distdata[i]
+ *             else:
+ *                 lon1 = _dg2rad*lonsdata[i]             # <<<<<<<<<<<<<<
+ *                 lat1 = _dg2rad*latsdata[i]
+ *                 az1 = _dg2rad*azdata[i]
+ */
+      __pyx_v_lon1 = (__pyx_v_5_proj__dg2rad * (__pyx_v_lonsdata[__pyx_v_i]));
+
+      /* "_proj.pyx":401
+ *             else:
+ *                 lon1 = _dg2rad*lonsdata[i]
+ *                 lat1 = _dg2rad*latsdata[i]             # <<<<<<<<<<<<<<
+ *                 az1 = _dg2rad*azdata[i]
+ *                 s12 = distdata[i]
+ */
+      __pyx_v_lat1 = (__pyx_v_5_proj__dg2rad * (__pyx_v_latsdata[__pyx_v_i]));
+
+      /* "_proj.pyx":402
+ *                 lon1 = _dg2rad*lonsdata[i]
+ *                 lat1 = _dg2rad*latsdata[i]
+ *                 az1 = _dg2rad*azdata[i]             # <<<<<<<<<<<<<<
+ *                 s12 = distdata[i]
+ *             Direct(&self._Geodesic, lat1, lon1, az1, s12,\
+ */
+      __pyx_v_az1 = (__pyx_v_5_proj__dg2rad * (__pyx_v_azdata[__pyx_v_i]));
+
+      /* "_proj.pyx":403
+ *                 lat1 = _dg2rad*latsdata[i]
+ *                 az1 = _dg2rad*azdata[i]
+ *                 s12 = distdata[i]             # <<<<<<<<<<<<<<
+ *             Direct(&self._Geodesic, lat1, lon1, az1, s12,\
+ *                    &plat2, &plon2, &pazi2)
+ */
+      __pyx_v_s12 = (__pyx_v_distdata[__pyx_v_i]);
+    }
+    __pyx_L10:;
+
+    /* "_proj.pyx":405
+ *                 s12 = distdata[i]
+ *             Direct(&self._Geodesic, lat1, lon1, az1, s12,\
+ *                    &plat2, &plon2, &pazi2)             # <<<<<<<<<<<<<<
+ *             # back azimuth needs to be flipped 180 degrees
+ *             # to match what proj4 geod utility produces.
+ */
+    Direct((&__pyx_v_self->_Geodesic), __pyx_v_lat1, __pyx_v_lon1, __pyx_v_az1, __pyx_v_s12, (&__pyx_v_plat2), (&__pyx_v_plon2), (&__pyx_v_pazi2));
+
+    /* "_proj.pyx":408
+ *             # back azimuth needs to be flipped 180 degrees
+ *             # to match what proj4 geod utility produces.
+ *             if pazi2 > 0:             # <<<<<<<<<<<<<<
+ *                 pazi2 = pazi2-180.
+ *             elif pazi2 < 0:
+ */
+    __pyx_t_1 = (__pyx_v_pazi2 > 0.0);
+    if (__pyx_t_1) {
+
+      /* "_proj.pyx":409
+ *             # to match what proj4 geod utility produces.
+ *             if pazi2 > 0:
+ *                 pazi2 = pazi2-180.             # <<<<<<<<<<<<<<
+ *             elif pazi2 < 0:
+ *                 pazi2 = pazi2+180.
+ */
+      __pyx_v_pazi2 = (__pyx_v_pazi2 - 180.);
+      goto __pyx_L11;
+    }
+
+    /* "_proj.pyx":410
+ *             if pazi2 > 0:
+ *                 pazi2 = pazi2-180.
+ *             elif pazi2 < 0:             # <<<<<<<<<<<<<<
+ *                 pazi2 = pazi2+180.
+ *             # check for NaN.
+ */
+    __pyx_t_1 = (__pyx_v_pazi2 < 0.0);
+    if (__pyx_t_1) {
+
+      /* "_proj.pyx":411
+ *                 pazi2 = pazi2-180.
+ *             elif pazi2 < 0:
+ *                 pazi2 = pazi2+180.             # <<<<<<<<<<<<<<
+ *             # check for NaN.
+ *             if pazi2 != pazi2:
+ */
+      __pyx_v_pazi2 = (__pyx_v_pazi2 + 180.);
+      goto __pyx_L11;
+    }
+    __pyx_L11:;
+
+    /* "_proj.pyx":413
+ *                 pazi2 = pazi2+180.
+ *             # check for NaN.
+ *             if pazi2 != pazi2:             # <<<<<<<<<<<<<<
+ *                 raise ValueError('undefined inverse geodesic (may be an antipodal point)')
+ *             if not radians:
+ */
+    __pyx_t_1 = (__pyx_v_pazi2 != __pyx_v_pazi2);
+    if (__pyx_t_1) {
+
+      /* "_proj.pyx":414
+ *             # check for NaN.
+ *             if pazi2 != pazi2:
+ *                 raise ValueError('undefined inverse geodesic (may be an antipodal point)')             # <<<<<<<<<<<<<<
+ *             if not radians:
+ *                 lonsdata[i] = plon2
+ */
+      __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_21), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __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 = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      goto __pyx_L12;
+    }
+    __pyx_L12:;
+
+    /* "_proj.pyx":415
+ *             if pazi2 != pazi2:
+ *                 raise ValueError('undefined inverse geodesic (may be an antipodal point)')
+ *             if not radians:             # <<<<<<<<<<<<<<
+ *                 lonsdata[i] = plon2
+ *                 latsdata[i] = plat2
+ */
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = (!__pyx_t_1);
+    if (__pyx_t_2) {
+
+      /* "_proj.pyx":416
+ *                 raise ValueError('undefined inverse geodesic (may be an antipodal point)')
+ *             if not radians:
+ *                 lonsdata[i] = plon2             # <<<<<<<<<<<<<<
+ *                 latsdata[i] = plat2
+ *                 azdata[i] = pazi2
+ */
+      (__pyx_v_lonsdata[__pyx_v_i]) = __pyx_v_plon2;
+
+      /* "_proj.pyx":417
+ *             if not radians:
+ *                 lonsdata[i] = plon2
+ *                 latsdata[i] = plat2             # <<<<<<<<<<<<<<
+ *                 azdata[i] = pazi2
+ *             else:
+ */
+      (__pyx_v_latsdata[__pyx_v_i]) = __pyx_v_plat2;
+
+      /* "_proj.pyx":418
+ *                 lonsdata[i] = plon2
+ *                 latsdata[i] = plat2
+ *                 azdata[i] = pazi2             # <<<<<<<<<<<<<<
+ *             else:
+ *                 lonsdata[i] = _rad2dg*plon2
+ */
+      (__pyx_v_azdata[__pyx_v_i]) = __pyx_v_pazi2;
+      goto __pyx_L13;
+    }
+    /*else*/ {
+
+      /* "_proj.pyx":420
+ *                 azdata[i] = pazi2
+ *             else:
+ *                 lonsdata[i] = _rad2dg*plon2             # <<<<<<<<<<<<<<
+ *                 latsdata[i] = _rad2dg*plat2
+ *                 azdata[i] = _rad2dg*pazi2
+ */
+      (__pyx_v_lonsdata[__pyx_v_i]) = (__pyx_v_5_proj__rad2dg * __pyx_v_plon2);
+
+      /* "_proj.pyx":421
+ *             else:
+ *                 lonsdata[i] = _rad2dg*plon2
+ *                 latsdata[i] = _rad2dg*plat2             # <<<<<<<<<<<<<<
+ *                 azdata[i] = _rad2dg*pazi2
+ * 
+ */
+      (__pyx_v_latsdata[__pyx_v_i]) = (__pyx_v_5_proj__rad2dg * __pyx_v_plat2);
+
+      /* "_proj.pyx":422
+ *                 lonsdata[i] = _rad2dg*plon2
+ *                 latsdata[i] = _rad2dg*plat2
+ *                 azdata[i] = _rad2dg*pazi2             # <<<<<<<<<<<<<<
+ * 
+ *     def _inv(self, object lons1, object lats1, object lons2, object lats2, radians=False):
+ */
+      (__pyx_v_azdata[__pyx_v_i]) = (__pyx_v_5_proj__rad2dg * __pyx_v_pazi2);
+    }
+    __pyx_L13:;
+  }
+
+  __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("_proj.Geod._fwd", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5_proj_4Geod_7_inv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_5_proj_4Geod_6_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_pw_5_proj_4Geod_7_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;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("_inv (wrapper)", 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};
+    PyObject* values[5] = {0,0,0,0,0};
+    values[4] = __pyx_k_22;
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_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 (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lons1)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lats1)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lons2)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  3:
+        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lats2)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("_inv", 0, 4, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __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, pos_args, "_inv") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __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 = 424; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_proj.Geod._inv", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_5_proj_4Geod_6_inv(((struct __pyx_obj_5_proj_Geod *)__pyx_v_self), __pyx_v_lons1, __pyx_v_lats1, __pyx_v_lons2, __pyx_v_lats2, __pyx_v_radians);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "_proj.pyx":424
+ *                 azdata[i] = _rad2dg*pazi2
+ * 
+ *     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_proj_4Geod_6_inv(struct __pyx_obj_5_proj_Geod *__pyx_v_self, PyObject *__pyx_v_lons1, PyObject *__pyx_v_lats1, PyObject *__pyx_v_lons2, PyObject *__pyx_v_lats2, PyObject *__pyx_v_radians) {
+  double __pyx_v_lat1;
+  double __pyx_v_lon1;
+  double __pyx_v_lat2;
+  double __pyx_v_lon2;
+  double __pyx_v_pazi1;
+  double __pyx_v_pazi2;
+  double __pyx_v_ps12;
+  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;
+  CYTHON_UNUSED 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;
+  __Pyx_RefNannySetupContext("_inv", 0);
+
+  /* "_proj.pyx":435
+ *         cdef void *londata, *latdata, *azdat, *distdat
+ *         # 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) {
+
+    /* "_proj.pyx":436
+ *         # 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 = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  /* "_proj.pyx":437
+ *         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) {
+
+    /* "_proj.pyx":438
+ *             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 = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L4;
+  }
+  __pyx_L4:;
+
+  /* "_proj.pyx":439
+ *         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) {
+
+    /* "_proj.pyx":440
+ *             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 = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "_proj.pyx":441
+ *         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) {
+
+    /* "_proj.pyx":442
+ *             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 = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  /* "_proj.pyx":444
+ *             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) {
+
+    /* "_proj.pyx":445
+ *         # process data in buffer
+ *         if not buflenlons == buflenlats == buflenaz == buflend:
+ *             raise RuntimeError("Buffer lengths not the same")             # <<<<<<<<<<<<<<
+ *         ndim = buflenlons//_doublesize
+ *         lonsdata = <double *>londata
+ */
+    __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_23), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __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 = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L7;
+  }
+  __pyx_L7:;
+
+  /* "_proj.pyx":446
+ *         if not buflenlons == buflenlats == buflenaz == buflend:
+ *             raise RuntimeError("Buffer lengths not the same")
+ *         ndim = buflenlons//_doublesize             # <<<<<<<<<<<<<<
+ *         lonsdata = <double *>londata
+ *         latsdata = <double *>latdata
+ */
+  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_buflenlons); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 446; __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 = 446; __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 = 446; __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 = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_v_ndim = __pyx_t_6;
+
+  /* "_proj.pyx":447
+ *             raise RuntimeError("Buffer lengths not the same")
+ *         ndim = buflenlons//_doublesize
+ *         lonsdata = <double *>londata             # <<<<<<<<<<<<<<
+ *         latsdata = <double *>latdata
+ *         azdata = <double *>azdat
+ */
+  __pyx_v_lonsdata = ((double *)__pyx_v_londata);
+
+  /* "_proj.pyx":448
+ *         ndim = buflenlons//_doublesize
+ *         lonsdata = <double *>londata
+ *         latsdata = <double *>latdata             # <<<<<<<<<<<<<<
+ *         azdata = <double *>azdat
+ *         distdata = <double *>distdat
+ */
+  __pyx_v_latsdata = ((double *)__pyx_v_latdata);
+
+  /* "_proj.pyx":449
+ *         lonsdata = <double *>londata
+ *         latsdata = <double *>latdata
+ *         azdata = <double *>azdat             # <<<<<<<<<<<<<<
+ *         distdata = <double *>distdat
+ *         errmsg = 'undefined inverse geodesic (may be an antipodal point)'
+ */
+  __pyx_v_azdata = ((double *)__pyx_v_azdat);
+
+  /* "_proj.pyx":450
+ *         latsdata = <double *>latdata
+ *         azdata = <double *>azdat
+ *         distdata = <double *>distdat             # <<<<<<<<<<<<<<
+ *         errmsg = 'undefined inverse geodesic (may be an antipodal point)'
+ *         for i from 0 <= i < ndim:
+ */
+  __pyx_v_distdata = ((double *)__pyx_v_distdat);
+
+  /* "_proj.pyx":451
+ *         azdata = <double *>azdat
+ *         distdata = <double *>distdat
+ *         errmsg = 'undefined inverse geodesic (may be an antipodal point)'             # <<<<<<<<<<<<<<
+ *         for i from 0 <= i < ndim:
+ *             if radians:
+ */
+  __Pyx_INCREF(((PyObject *)__pyx_kp_s_20));
+  __pyx_v_errmsg = ((PyObject *)__pyx_kp_s_20);
+
+  /* "_proj.pyx":452
+ *         distdata = <double *>distdat
+ *         errmsg = 'undefined inverse geodesic (may be an antipodal point)'
+ *         for i from 0 <= i < ndim:             # <<<<<<<<<<<<<<
+ *             if radians:
+ *                 lon1 = _rad2dg*lonsdata[i]
+ */
+  __pyx_t_6 = __pyx_v_ndim;
+  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) {
+
+    /* "_proj.pyx":453
+ *         errmsg = 'undefined inverse geodesic (may be an antipodal point)'
+ *         for i from 0 <= i < ndim:
+ *             if radians:             # <<<<<<<<<<<<<<
+ *                 lon1 = _rad2dg*lonsdata[i]
+ *                 lat1 = _rad2dg*latsdata[i]
+ */
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__pyx_t_2) {
+
+      /* "_proj.pyx":454
+ *         for i from 0 <= i < ndim:
+ *             if radians:
+ *                 lon1 = _rad2dg*lonsdata[i]             # <<<<<<<<<<<<<<
+ *                 lat1 = _rad2dg*latsdata[i]
+ *                 lon2 = _rad2dg*azdata[i]
+ */
+      __pyx_v_lon1 = (__pyx_v_5_proj__rad2dg * (__pyx_v_lonsdata[__pyx_v_i]));
+
+      /* "_proj.pyx":455
+ *             if radians:
+ *                 lon1 = _rad2dg*lonsdata[i]
+ *                 lat1 = _rad2dg*latsdata[i]             # <<<<<<<<<<<<<<
+ *                 lon2 = _rad2dg*azdata[i]
+ *                 lat2 = _rad2dg*distdata[i]
+ */
+      __pyx_v_lat1 = (__pyx_v_5_proj__rad2dg * (__pyx_v_latsdata[__pyx_v_i]));
+
+      /* "_proj.pyx":456
+ *                 lon1 = _rad2dg*lonsdata[i]
+ *                 lat1 = _rad2dg*latsdata[i]
+ *                 lon2 = _rad2dg*azdata[i]             # <<<<<<<<<<<<<<
+ *                 lat2 = _rad2dg*distdata[i]
+ *             else:
+ */
+      __pyx_v_lon2 = (__pyx_v_5_proj__rad2dg * (__pyx_v_azdata[__pyx_v_i]));
+
+      /* "_proj.pyx":457
+ *                 lat1 = _rad2dg*latsdata[i]
+ *                 lon2 = _rad2dg*azdata[i]
+ *                 lat2 = _rad2dg*distdata[i]             # <<<<<<<<<<<<<<
+ *             else:
+ *                 lon1 = lonsdata[i]
+ */
+      __pyx_v_lat2 = (__pyx_v_5_proj__rad2dg * (__pyx_v_distdata[__pyx_v_i]));
+      goto __pyx_L10;
+    }
+    /*else*/ {
+
+      /* "_proj.pyx":459
+ *                 lat2 = _rad2dg*distdata[i]
+ *             else:
+ *                 lon1 = lonsdata[i]             # <<<<<<<<<<<<<<
+ *                 lat1 = latsdata[i]
+ *                 lon2 = azdata[i]
+ */
+      __pyx_v_lon1 = (__pyx_v_lonsdata[__pyx_v_i]);
+
+      /* "_proj.pyx":460
+ *             else:
+ *                 lon1 = lonsdata[i]
+ *                 lat1 = latsdata[i]             # <<<<<<<<<<<<<<
+ *                 lon2 = azdata[i]
+ *                 lat2 = distdata[i]
+ */
+      __pyx_v_lat1 = (__pyx_v_latsdata[__pyx_v_i]);
+
+      /* "_proj.pyx":461
+ *                 lon1 = lonsdata[i]
+ *                 lat1 = latsdata[i]
+ *                 lon2 = azdata[i]             # <<<<<<<<<<<<<<
+ *                 lat2 = distdata[i]
+ *             Inverse(&self._Geodesic, lat1, lon1, lat2, lon2,
+ */
+      __pyx_v_lon2 = (__pyx_v_azdata[__pyx_v_i]);
+
+      /* "_proj.pyx":462
+ *                 lat1 = latsdata[i]
+ *                 lon2 = azdata[i]
+ *                 lat2 = distdata[i]             # <<<<<<<<<<<<<<
+ *             Inverse(&self._Geodesic, lat1, lon1, lat2, lon2,
+ *                     &ps12, &pazi1, &pazi2)
+ */
+      __pyx_v_lat2 = (__pyx_v_distdata[__pyx_v_i]);
+    }
+    __pyx_L10:;
+
+    /* "_proj.pyx":464
+ *                 lat2 = distdata[i]
+ *             Inverse(&self._Geodesic, lat1, lon1, lat2, lon2,
+ *                     &ps12, &pazi1, &pazi2)             # <<<<<<<<<<<<<<
+ *             # back azimuth needs to be flipped 180 degrees
+ *             # to match what proj4 geod utility produces.
+ */
+    Inverse((&__pyx_v_self->_Geodesic), __pyx_v_lat1, __pyx_v_lon1, __pyx_v_lat2, __pyx_v_lon2, (&__pyx_v_ps12), (&__pyx_v_pazi1), (&__pyx_v_pazi2));
+
+    /* "_proj.pyx":467
+ *             # back azimuth needs to be flipped 180 degrees
+ *             # to match what proj4 geod utility produces.
+ *             if pazi2 > 0:             # <<<<<<<<<<<<<<
+ *                 pazi2 = pazi2-180.
+ *             elif pazi2 < 0:
+ */
+    __pyx_t_2 = (__pyx_v_pazi2 > 0.0);
+    if (__pyx_t_2) {
+
+      /* "_proj.pyx":468
+ *             # to match what proj4 geod utility produces.
+ *             if pazi2 > 0:
+ *                 pazi2 = pazi2-180.             # <<<<<<<<<<<<<<
+ *             elif pazi2 < 0:
+ *                 pazi2 = pazi2+180.
+ */
+      __pyx_v_pazi2 = (__pyx_v_pazi2 - 180.);
+      goto __pyx_L11;
+    }
+
+    /* "_proj.pyx":469
+ *             if pazi2 > 0:
+ *                 pazi2 = pazi2-180.
+ *             elif pazi2 < 0:             # <<<<<<<<<<<<<<
+ *                 pazi2 = pazi2+180.
+ *             if ps12 != ps12: # check for NaN
+ */
+    __pyx_t_2 = (__pyx_v_pazi2 < 0.0);
+    if (__pyx_t_2) {
+
+      /* "_proj.pyx":470
+ *                 pazi2 = pazi2-180.
+ *             elif pazi2 < 0:
+ *                 pazi2 = pazi2+180.             # <<<<<<<<<<<<<<
+ *             if ps12 != ps12: # check for NaN
+ *                 raise ValueError('undefined inverse geodesic (may be an antipodal point)')
+ */
+      __pyx_v_pazi2 = (__pyx_v_pazi2 + 180.);
+      goto __pyx_L11;
+    }
+    __pyx_L11:;
+
+    /* "_proj.pyx":471
+ *             elif pazi2 < 0:
+ *                 pazi2 = pazi2+180.
+ *             if ps12 != ps12: # check for NaN             # <<<<<<<<<<<<<<
+ *                 raise ValueError('undefined inverse geodesic (may be an antipodal point)')
+ *             if radians:
+ */
+    __pyx_t_2 = (__pyx_v_ps12 != __pyx_v_ps12);
+    if (__pyx_t_2) {
+
+      /* "_proj.pyx":472
+ *                 pazi2 = pazi2+180.
+ *             if ps12 != ps12: # check for NaN
+ *                 raise ValueError('undefined inverse geodesic (may be an antipodal point)')             # <<<<<<<<<<<<<<
+ *             if radians:
+ *                 lonsdata[i] = _rad2dg*pazi1
+ */
+      __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_24), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __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 = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      goto __pyx_L12;
+    }
+    __pyx_L12:;
+
+    /* "_proj.pyx":473
+ *             if ps12 != ps12: # check for NaN
+ *                 raise ValueError('undefined inverse geodesic (may be an antipodal point)')
+ *             if radians:             # <<<<<<<<<<<<<<
+ *                 lonsdata[i] = _rad2dg*pazi1
+ *                 latsdata[i] = _rad2dg*pazi2
+ */
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__pyx_t_2) {
+
+      /* "_proj.pyx":474
+ *                 raise ValueError('undefined inverse geodesic (may be an antipodal point)')
+ *             if radians:
+ *                 lonsdata[i] = _rad2dg*pazi1             # <<<<<<<<<<<<<<
+ *                 latsdata[i] = _rad2dg*pazi2
+ *             else:
+ */
+      (__pyx_v_lonsdata[__pyx_v_i]) = (__pyx_v_5_proj__rad2dg * __pyx_v_pazi1);
+
+      /* "_proj.pyx":475
+ *             if radians:
+ *                 lonsdata[i] = _rad2dg*pazi1
+ *                 latsdata[i] = _rad2dg*pazi2             # <<<<<<<<<<<<<<
+ *             else:
+ *                 lonsdata[i] = pazi1
+ */
+      (__pyx_v_latsdata[__pyx_v_i]) = (__pyx_v_5_proj__rad2dg * __pyx_v_pazi2);
+      goto __pyx_L13;
+    }
+    /*else*/ {
+
+      /* "_proj.pyx":477
+ *                 latsdata[i] = _rad2dg*pazi2
+ *             else:
+ *                 lonsdata[i] = pazi1             # <<<<<<<<<<<<<<
+ *                 latsdata[i] = pazi2
+ *             azdata[i] = ps12
+ */
+      (__pyx_v_lonsdata[__pyx_v_i]) = __pyx_v_pazi1;
+
+      /* "_proj.pyx":478
+ *             else:
+ *                 lonsdata[i] = pazi1
+ *                 latsdata[i] = pazi2             # <<<<<<<<<<<<<<
+ *             azdata[i] = ps12
+ * 
+ */
+      (__pyx_v_latsdata[__pyx_v_i]) = __pyx_v_pazi2;
+    }
+    __pyx_L13:;
+
+    /* "_proj.pyx":479
+ *                 lonsdata[i] = pazi1
+ *                 latsdata[i] = pazi2
+ *             azdata[i] = ps12             # <<<<<<<<<<<<<<
+ * 
+ *     def _npts(self, double lon1, double lat1, double lon2, double lat2, int npts, radians=False):
+ */
+    (__pyx_v_azdata[__pyx_v_i]) = __pyx_v_ps12;
+  }
+
+  __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("_proj.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;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5_proj_4Geod_9_npts(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_5_proj_4Geod_8_npts[] = "\n given initial and terminus lat/lon, find npts intermediate points.";
+static PyObject *__pyx_pw_5_proj_4Geod_9_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;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("_npts (wrapper)", 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};
+    PyObject* values[6] = {0,0,0,0,0,0};
+    values[5] = __pyx_k_25;
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_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 (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lon1)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lat1)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lon2)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  3:
+        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lat2)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  4:
+        if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__npts)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("_npts", 0, 5, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __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, pos_args, "_npts") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __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 = 481; __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 = 481; __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 = 481; __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 = 481; __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 = 481; __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 = 481; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_proj.Geod._npts", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_5_proj_4Geod_8_npts(((struct __pyx_obj_5_proj_Geod *)__pyx_v_self), __pyx_v_lon1, __pyx_v_lat1, __pyx_v_lon2, __pyx_v_lat2, __pyx_v_npts, __pyx_v_radians);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "_proj.pyx":481
+ *             azdata[i] = ps12
+ * 
+ *     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_proj_4Geod_8_npts(struct __pyx_obj_5_proj_Geod *__pyx_v_self, double __pyx_v_lon1, double __pyx_v_lat1, double __pyx_v_lon2, double __pyx_v_lat2, int __pyx_v_npts, PyObject *__pyx_v_radians) {
+  int __pyx_v_i;
+  double __pyx_v_del_s;
+  double __pyx_v_ps12;
+  double __pyx_v_pazi1;
+  double __pyx_v_pazi2;
+  double __pyx_v_s12;
+  double __pyx_v_plon2;
+  double __pyx_v_plat2;
+  PyObject *__pyx_v_lats = NULL;
+  PyObject *__pyx_v_lons = NULL;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  long __pyx_t_2;
+  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("_npts", 0);
+
+  /* "_proj.pyx":486
+ *         cdef int i
+ *         cdef double del_s,ps12,pazi1,pazi2,s12,plon2,plat2
+ *         if radians:             # <<<<<<<<<<<<<<
+ *             lon1 = _rad2dg*lon1
+ *             lat1 = _rad2dg*lat1
+ */
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_t_1) {
+
+    /* "_proj.pyx":487
+ *         cdef double del_s,ps12,pazi1,pazi2,s12,plon2,plat2
+ *         if radians:
+ *             lon1 = _rad2dg*lon1             # <<<<<<<<<<<<<<
+ *             lat1 = _rad2dg*lat1
+ *             lon2 = _rad2dg*lon2
+ */
+    __pyx_v_lon1 = (__pyx_v_5_proj__rad2dg * __pyx_v_lon1);
+
+    /* "_proj.pyx":488
+ *         if radians:
+ *             lon1 = _rad2dg*lon1
+ *             lat1 = _rad2dg*lat1             # <<<<<<<<<<<<<<
+ *             lon2 = _rad2dg*lon2
+ *             lat2 = _rad2dg*lat2
+ */
+    __pyx_v_lat1 = (__pyx_v_5_proj__rad2dg * __pyx_v_lat1);
+
+    /* "_proj.pyx":489
+ *             lon1 = _rad2dg*lon1
+ *             lat1 = _rad2dg*lat1
+ *             lon2 = _rad2dg*lon2             # <<<<<<<<<<<<<<
+ *             lat2 = _rad2dg*lat2
+ *         # do inverse computation to set azimuths, distance.
+ */
+    __pyx_v_lon2 = (__pyx_v_5_proj__rad2dg * __pyx_v_lon2);
+
+    /* "_proj.pyx":490
+ *             lat1 = _rad2dg*lat1
+ *             lon2 = _rad2dg*lon2
+ *             lat2 = _rad2dg*lat2             # <<<<<<<<<<<<<<
+ *         # do inverse computation to set azimuths, distance.
+ *         Inverse(&self._Geodesic, lat1, lon1,  lat2, lon2,
+ */
+    __pyx_v_lat2 = (__pyx_v_5_proj__rad2dg * __pyx_v_lat2);
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  /* "_proj.pyx":493
+ *         # do inverse computation to set azimuths, distance.
+ *         Inverse(&self._Geodesic, lat1, lon1,  lat2, lon2,
+ *                 &ps12, &pazi1, &pazi2)             # <<<<<<<<<<<<<<
+ *         # distance increment.
+ *         del_s = ps12/(npts+1)
+ */
+  Inverse((&__pyx_v_self->_Geodesic), __pyx_v_lat1, __pyx_v_lon1, __pyx_v_lat2, __pyx_v_lon2, (&__pyx_v_ps12), (&__pyx_v_pazi1), (&__pyx_v_pazi2));
+
+  /* "_proj.pyx":495
+ *                 &ps12, &pazi1, &pazi2)
+ *         # distance increment.
+ *         del_s = ps12/(npts+1)             # <<<<<<<<<<<<<<
+ *         # initialize output tuples.
+ *         lats = ()
+ */
+  __pyx_t_2 = (__pyx_v_npts + 1);
+  if (unlikely(__pyx_t_2 == 0)) {
+    PyErr_Format(PyExc_ZeroDivisionError, "float division");
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  __pyx_v_del_s = (__pyx_v_ps12 / __pyx_t_2);
+
+  /* "_proj.pyx":497
+ *         del_s = ps12/(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;
+
+  /* "_proj.pyx":498
+ *         # 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;
+
+  /* "_proj.pyx":500
+ *         lons = ()
+ *         # loop over intermediate points, compute lat/lons.
+ *         for i from 1 <= i < npts+1:             # <<<<<<<<<<<<<<
+ *             s12 = i*del_s
+ *             Direct(&self._Geodesic, lat1, lon1, pazi1, s12,\
+ */
+  __pyx_t_2 = (__pyx_v_npts + 1);
+  for (__pyx_v_i = 1; __pyx_v_i < __pyx_t_2; __pyx_v_i++) {
+
+    /* "_proj.pyx":501
+ *         # loop over intermediate points, compute lat/lons.
+ *         for i from 1 <= i < npts+1:
+ *             s12 = i*del_s             # <<<<<<<<<<<<<<
+ *             Direct(&self._Geodesic, lat1, lon1, pazi1, s12,\
+ *                    &plat2, &plon2, &pazi2)
+ */
+    __pyx_v_s12 = (__pyx_v_i * __pyx_v_del_s);
+
+    /* "_proj.pyx":503
+ *             s12 = i*del_s
+ *             Direct(&self._Geodesic, lat1, lon1, pazi1, s12,\
+ *                    &plat2, &plon2, &pazi2)             # <<<<<<<<<<<<<<
+ *             if radians:
+ *                 lats = lats + (_dg2rad*plat2,)
+ */
+    Direct((&__pyx_v_self->_Geodesic), __pyx_v_lat1, __pyx_v_lon1, __pyx_v_pazi1, __pyx_v_s12, (&__pyx_v_plat2), (&__pyx_v_plon2), (&__pyx_v_pazi2));
+
+    /* "_proj.pyx":504
+ *             Direct(&self._Geodesic, lat1, lon1, pazi1, s12,\
+ *                    &plat2, &plon2, &pazi2)
+ *             if radians:             # <<<<<<<<<<<<<<
+ *                 lats = lats + (_dg2rad*plat2,)
+ *                 lons = lons + (_dg2rad*plon2,)
+ */
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__pyx_t_1) {
+
+      /* "_proj.pyx":505
+ *                    &plat2, &plon2, &pazi2)
+ *             if radians:
+ *                 lats = lats + (_dg2rad*plat2,)             # <<<<<<<<<<<<<<
+ *                 lons = lons + (_dg2rad*plon2,)
+ *             else:
+ */
+      __pyx_t_3 = PyFloat_FromDouble((__pyx_v_5_proj__dg2rad * __pyx_v_plat2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; __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 = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+      __Pyx_GIVEREF(__pyx_t_3);
+      __pyx_t_3 = 0;
+      __pyx_t_3 = PyNumber_Add(((PyObject *)__pyx_v_lats), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(((PyObject *)__pyx_t_3));
+      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
+      __Pyx_DECREF(((PyObject *)__pyx_v_lats));
+      __pyx_v_lats = __pyx_t_3;
+      __pyx_t_3 = 0;
+
+      /* "_proj.pyx":506
+ *             if radians:
+ *                 lats = lats + (_dg2rad*plat2,)
+ *                 lons = lons + (_dg2rad*plon2,)             # <<<<<<<<<<<<<<
+ *             else:
+ *                 lats = lats + (plat2,)
+ */
+      __pyx_t_3 = PyFloat_FromDouble((__pyx_v_5_proj__dg2rad * __pyx_v_plon2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __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 = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+      __Pyx_GIVEREF(__pyx_t_3);
+      __pyx_t_3 = 0;
+      __pyx_t_3 = PyNumber_Add(((PyObject *)__pyx_v_lons), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(((PyObject *)__pyx_t_3));
+      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
+      __Pyx_DECREF(((PyObject *)__pyx_v_lons));
+      __pyx_v_lons = __pyx_t_3;
+      __pyx_t_3 = 0;
+      goto __pyx_L6;
+    }
+    /*else*/ {
+
+      /* "_proj.pyx":508
+ *                 lons = lons + (_dg2rad*plon2,)
+ *             else:
+ *                 lats = lats + (plat2,)             # <<<<<<<<<<<<<<
+ *                 lons = lons + (plon2,)
+ *         return lons, lats
+ */
+      __pyx_t_3 = PyFloat_FromDouble(__pyx_v_plat2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __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 = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+      __Pyx_GIVEREF(__pyx_t_3);
+      __pyx_t_3 = 0;
+      __pyx_t_3 = PyNumber_Add(((PyObject *)__pyx_v_lats), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(((PyObject *)__pyx_t_3));
+      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
+      __Pyx_DECREF(((PyObject *)__pyx_v_lats));
+      __pyx_v_lats = __pyx_t_3;
+      __pyx_t_3 = 0;
+
+      /* "_proj.pyx":509
+ *             else:
+ *                 lats = lats + (plat2,)
+ *                 lons = lons + (plon2,)             # <<<<<<<<<<<<<<
+ *         return lons, lats
+ */
+      __pyx_t_3 = PyFloat_FromDouble(__pyx_v_plon2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __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 = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+      __Pyx_GIVEREF(__pyx_t_3);
+      __pyx_t_3 = 0;
+      __pyx_t_3 = PyNumber_Add(((PyObject *)__pyx_v_lons), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(((PyObject *)__pyx_t_3));
+      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
+      __Pyx_DECREF(((PyObject *)__pyx_v_lons));
+      __pyx_v_lons = __pyx_t_3;
+      __pyx_t_3 = 0;
+    }
+    __pyx_L6:;
+  }
+
+  /* "_proj.pyx":510
+ *                 lats = lats + (plat2,)
+ *                 lons = lons + (plon2,)
+ *         return lons, lats             # <<<<<<<<<<<<<<
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(((PyObject *)__pyx_v_lons));
+  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_lons));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_lons));
+  __Pyx_INCREF(((PyObject *)__pyx_v_lats));
+  PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_lats));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_lats));
+  __pyx_r = ((PyObject *)__pyx_t_3);
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  __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_AddTraceback("_proj.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;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_5_proj_4Geod_10initstring_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_5_proj_4Geod_10initstring_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5_proj_4Geod_10initstring___get__(((struct __pyx_obj_5_proj_Geod *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "_proj.pyx":355
+ * cdef class Geod:
+ *     cdef Geodesic _Geodesic
+ *     cdef public object initstring             # <<<<<<<<<<<<<<
+ * 
+ *     def __cinit__(self, a, f):
+ */
+
+static PyObject *__pyx_pf_5_proj_4Geod_10initstring___get__(struct __pyx_obj_5_proj_Geod *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_self->initstring);
+  __pyx_r = __pyx_v_self->initstring;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5_proj_4Geod_10initstring_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_5_proj_4Geod_10initstring_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5_proj_4Geod_10initstring_2__set__(((struct __pyx_obj_5_proj_Geod *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5_proj_4Geod_10initstring_2__set__(struct __pyx_obj_5_proj_Geod *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__", 0);
+  __Pyx_INCREF(__pyx_v_value);
+  __Pyx_GIVEREF(__pyx_v_value);
+  __Pyx_GOTREF(__pyx_v_self->initstring);
+  __Pyx_DECREF(__pyx_v_self->initstring);
+  __pyx_v_self->initstring = __pyx_v_value;
+
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static int __pyx_pw_5_proj_4Geod_10initstring_5__del__(PyObject *__pyx_v_self); /*proto*/
+static int __pyx_pw_5_proj_4Geod_10initstring_5__del__(PyObject *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_5_proj_4Geod_10initstring_4__del__(((struct __pyx_obj_5_proj_Geod *)__pyx_v_self));
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_5_proj_4Geod_10initstring_4__del__(struct __pyx_obj_5_proj_Geod *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__del__", 0);
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  __Pyx_GOTREF(__pyx_v_self->initstring);
+  __Pyx_DECREF(__pyx_v_self->initstring);
+  __pyx_v_self->initstring = Py_None;
+
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_tp_new_5_proj_Proj(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_5_proj_Proj *p;
+  PyObject *o = (*t->tp_alloc)(t, 0);
+  if (!o) return 0;
+  p = ((struct __pyx_obj_5_proj_Proj *)o);
+  p->proj_version = Py_None; Py_INCREF(Py_None);
+  p->srs = Py_None; Py_INCREF(Py_None);
+  if (__pyx_pw_5_proj_4Proj_1__cinit__(o, a, k) < 0) {
+    Py_DECREF(o); o = 0;
+  }
+  return o;
+}
+
+static void __pyx_tp_dealloc_5_proj_Proj(PyObject *o) {
+  struct __pyx_obj_5_proj_Proj *p = (struct __pyx_obj_5_proj_Proj *)o;
+  PyObject_GC_UnTrack(o);
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_pw_5_proj_4Proj_3__dealloc__(o);
+    if (PyErr_Occurred()) PyErr_WriteUnraisable(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
+  }
+  Py_CLEAR(p->proj_version);
+  Py_CLEAR(p->srs);
+  PyObject_GC_Track(o);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_5_proj_Proj(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_5_proj_Proj *p = (struct __pyx_obj_5_proj_Proj *)o;
+  if (p->proj_version) {
+    e = (*v)(p->proj_version, a); if (e) return e;
+  }
+  if (p->srs) {
+    e = (*v)(p->srs, a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_5_proj_Proj(PyObject *o) {
+  struct __pyx_obj_5_proj_Proj *p = (struct __pyx_obj_5_proj_Proj *)o;
+  PyObject* tmp;
+  tmp = ((PyObject*)p->proj_version);
+  p->proj_version = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->srs);
+  p->srs = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  return 0;
+}
+
+static PyObject *__pyx_getprop_5_proj_4Proj_proj_version(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5_proj_4Proj_12proj_version_1__get__(o);
+}
+
+static int __pyx_setprop_5_proj_4Proj_proj_version(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5_proj_4Proj_12proj_version_3__set__(o, v);
+  }
+  else {
+    return __pyx_pw_5_proj_4Proj_12proj_version_5__del__(o);
+  }
+}
+
+static PyObject *__pyx_getprop_5_proj_4Proj_srs(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5_proj_4Proj_3srs_1__get__(o);
+}
+
+static int __pyx_setprop_5_proj_4Proj_srs(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_5_proj_4Proj_3srs_3__set__(o, v);
+  }
+  else {
+    return __pyx_pw_5_proj_4Proj_3srs_5__del__(o);
+  }
+}
+
+static PyMethodDef __pyx_methods_5_proj_Proj[] = {
+  {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__pyx_pw_5_proj_4Proj_5__reduce__, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5_proj_4Proj_4__reduce__)},
+  {__Pyx_NAMESTR("_fwd"), (PyCFunction)__pyx_pw_5_proj_4Proj_7_fwd, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5_proj_4Proj_6_fwd)},
+  {__Pyx_NAMESTR("_inv"), (PyCFunction)__pyx_pw_5_proj_4Proj_9_inv, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5_proj_4Proj_8_inv)},
+  {__Pyx_NAMESTR("is_latlong"), (PyCFunction)__pyx_pw_5_proj_4Proj_11is_latlong, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("is_geocent"), (PyCFunction)__pyx_pw_5_proj_4Proj_13is_geocent, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {0, 0, 0, 0}
+};
+
+static struct PyGetSetDef __pyx_getsets_5_proj_Proj[] = {
+  {(char *)"proj_version", __pyx_getprop_5_proj_4Proj_proj_version, __pyx_setprop_5_proj_4Proj_proj_version, 0, 0},
+  {(char *)"srs", __pyx_getprop_5_proj_4Proj_srs, __pyx_setprop_5_proj_4Proj_srs, 0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyNumberMethods __pyx_tp_as_number_Proj = {
+  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_Proj = {
+  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_Proj = {
+  0, /*mp_length*/
+  0, /*mp_subscript*/
+  0, /*mp_ass_subscript*/
+};
+
+static PyBufferProcs __pyx_tp_as_buffer_Proj = {
+  #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_proj_Proj = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("_proj.Proj"), /*tp_name*/
+  sizeof(struct __pyx_obj_5_proj_Proj), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_5_proj_Proj, /*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_Proj, /*tp_as_number*/
+  &__pyx_tp_as_sequence_Proj, /*tp_as_sequence*/
+  &__pyx_tp_as_mapping_Proj, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  &__pyx_tp_as_buffer_Proj, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_5_proj_Proj, /*tp_traverse*/
+  __pyx_tp_clear_5_proj_Proj, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_5_proj_Proj, /*tp_methods*/
+  0, /*tp_members*/
+  __pyx_getsets_5_proj_Proj, /*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_proj_Proj, /*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 PyObject *__pyx_tp_new_5_proj_Geod(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_5_proj_Geod *p;
+  PyObject *o = (*t->tp_alloc)(t, 0);
+  if (!o) return 0;
+  p = ((struct __pyx_obj_5_proj_Geod *)o);
+  p->initstring = Py_None; Py_INCREF(Py_None);
+  if (__pyx_pw_5_proj_4Geod_1__cinit__(o, a, k) < 0) {
+    Py_DECREF(o); o = 0;
+  }
+  return o;
+}
+
+static void __pyx_tp_dealloc_5_proj_Geod(PyObject *o) {
+  struct __pyx_obj_5_proj_Geod *p = (struct __pyx_obj_5_proj_Geod *)o;
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->initstring);
+  PyObject_GC_Track(o);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_5_proj_Geod(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_5_proj_Geod *p = (struct __pyx_obj_5_proj_Geod *)o;
+  if (p->initstring) {
+    e = (*v)(p->initstring, a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_5_proj_Geod(PyObject *o) {
+  struct __pyx_obj_5_proj_Geod *p = (struct __pyx_obj_5_proj_Geod *)o;
+  PyObject* tmp;
+  tmp = ((PyObject*)p->initstring);
+  p->initstring = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  return 0;
 }
 
-static PyObject *__pyx_getprop_5_proj_4Proj_srs(PyObject *o, void *x) {
-  return __pyx_pf_5_proj_4Proj_3srs___get__(o);
+static PyObject *__pyx_getprop_5_proj_4Geod_initstring(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_5_proj_4Geod_10initstring_1__get__(o);
 }
 
-static int __pyx_setprop_5_proj_4Proj_srs(PyObject *o, PyObject *v, void *x) {
+static int __pyx_setprop_5_proj_4Geod_initstring(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
   if (v) {
-    return __pyx_pf_5_proj_4Proj_3srs_1__set__(o, v);
+    return __pyx_pw_5_proj_4Geod_10initstring_3__set__(o, v);
   }
   else {
-    return __pyx_pf_5_proj_4Proj_3srs_2__del__(o);
+    return __pyx_pw_5_proj_4Geod_10initstring_5__del__(o);
   }
 }
 
-static PyMethodDef __pyx_methods_5_proj_Proj[] = {
-  {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__pyx_pf_5_proj_4Proj_2__reduce__, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5_proj_4Proj_2__reduce__)},
-  {__Pyx_NAMESTR("_fwd"), (PyCFunction)__pyx_pf_5_proj_4Proj_3_fwd, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5_proj_4Proj_3_fwd)},
-  {__Pyx_NAMESTR("_inv"), (PyCFunction)__pyx_pf_5_proj_4Proj_4_inv, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5_proj_4Proj_4_inv)},
-  {__Pyx_NAMESTR("is_latlong"), (PyCFunction)__pyx_pf_5_proj_4Proj_5is_latlong, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("is_geocent"), (PyCFunction)__pyx_pf_5_proj_4Proj_6is_geocent, METH_NOARGS, __Pyx_DOCSTR(0)},
+static PyMethodDef __pyx_methods_5_proj_Geod[] = {
+  {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__pyx_pw_5_proj_4Geod_3__reduce__, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_5_proj_4Geod_2__reduce__)},
+  {__Pyx_NAMESTR("_fwd"), (PyCFunction)__pyx_pw_5_proj_4Geod_5_fwd, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5_proj_4Geod_4_fwd)},
+  {__Pyx_NAMESTR("_inv"), (PyCFunction)__pyx_pw_5_proj_4Geod_7_inv, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5_proj_4Geod_6_inv)},
+  {__Pyx_NAMESTR("_npts"), (PyCFunction)__pyx_pw_5_proj_4Geod_9_npts, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_5_proj_4Geod_8_npts)},
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_5_proj_Proj[] = {
-  {(char *)"proj_version", __pyx_getprop_5_proj_4Proj_proj_version, __pyx_setprop_5_proj_4Proj_proj_version, 0, 0},
-  {(char *)"srs", __pyx_getprop_5_proj_4Proj_srs, __pyx_setprop_5_proj_4Proj_srs, 0, 0},
+static struct PyGetSetDef __pyx_getsets_5_proj_Geod[] = {
+  {(char *)"initstring", __pyx_getprop_5_proj_4Geod_initstring, __pyx_setprop_5_proj_4Geod_initstring, 0, 0},
   {0, 0, 0, 0, 0}
 };
 
-static PyNumberMethods __pyx_tp_as_number_Proj = {
+static PyNumberMethods __pyx_tp_as_number_Geod = {
   0, /*nb_add*/
   0, /*nb_subtract*/
   0, /*nb_multiply*/
@@ -3075,7 +5434,7 @@ static PyNumberMethods __pyx_tp_as_number_Proj = {
   #endif
 };
 
-static PySequenceMethods __pyx_tp_as_sequence_Proj = {
+static PySequenceMethods __pyx_tp_as_sequence_Geod = {
   0, /*sq_length*/
   0, /*sq_concat*/
   0, /*sq_repeat*/
@@ -3088,13 +5447,13 @@ static PySequenceMethods __pyx_tp_as_sequence_Proj = {
   0, /*sq_inplace_repeat*/
 };
 
-static PyMappingMethods __pyx_tp_as_mapping_Proj = {
+static PyMappingMethods __pyx_tp_as_mapping_Geod = {
   0, /*mp_length*/
   0, /*mp_subscript*/
   0, /*mp_ass_subscript*/
 };
 
-static PyBufferProcs __pyx_tp_as_buffer_Proj = {
+static PyBufferProcs __pyx_tp_as_buffer_Geod = {
   #if PY_MAJOR_VERSION < 3
   0, /*bf_getreadbuffer*/
   #endif
@@ -3115,12 +5474,12 @@ static PyBufferProcs __pyx_tp_as_buffer_Proj = {
   #endif
 };
 
-static PyTypeObject __pyx_type_5_proj_Proj = {
+static PyTypeObject __pyx_type_5_proj_Geod = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("_proj.Proj"), /*tp_name*/
-  sizeof(struct __pyx_obj_5_proj_Proj), /*tp_basicsize*/
+  __Pyx_NAMESTR("_proj.Geod"), /*tp_name*/
+  sizeof(struct __pyx_obj_5_proj_Geod), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_5_proj_Proj, /*tp_dealloc*/
+  __pyx_tp_dealloc_5_proj_Geod, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -3130,26 +5489,26 @@ static PyTypeObject __pyx_type_5_proj_Proj = {
   0, /*reserved*/
   #endif
   0, /*tp_repr*/
-  &__pyx_tp_as_number_Proj, /*tp_as_number*/
-  &__pyx_tp_as_sequence_Proj, /*tp_as_sequence*/
-  &__pyx_tp_as_mapping_Proj, /*tp_as_mapping*/
+  &__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_Proj, /*tp_as_buffer*/
+  &__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*/
   0, /*tp_doc*/
-  __pyx_tp_traverse_5_proj_Proj, /*tp_traverse*/
-  __pyx_tp_clear_5_proj_Proj, /*tp_clear*/
+  __pyx_tp_traverse_5_proj_Geod, /*tp_traverse*/
+  __pyx_tp_clear_5_proj_Geod, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_5_proj_Proj, /*tp_methods*/
+  __pyx_methods_5_proj_Geod, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_5_proj_Proj, /*tp_getset*/
+  __pyx_getsets_5_proj_Geod, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -3157,7 +5516,7 @@ static PyTypeObject __pyx_type_5_proj_Proj = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_5_proj_Proj, /*tp_new*/
+  __pyx_tp_new_5_proj_Geod, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -3192,181 +5551,349 @@ static struct PyModuleDef __pyx_moduledef = {
 static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_kp_s_15, __pyx_k_15, sizeof(__pyx_k_15), 0, 0, 1, 0},
   {&__pyx_kp_s_17, __pyx_k_17, sizeof(__pyx_k_17), 0, 0, 1, 0},
+  {&__pyx_kp_s_20, __pyx_k_20, sizeof(__pyx_k_20), 0, 0, 1, 0},
+  {&__pyx_kp_s_26, __pyx_k_26, sizeof(__pyx_k_26), 0, 0, 1, 0},
+  {&__pyx_kp_s_29, __pyx_k_29, sizeof(__pyx_k_29), 0, 0, 1, 0},
   {&__pyx_kp_s_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 0, 1, 0},
   {&__pyx_kp_s_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 0, 1, 0},
   {&__pyx_n_s__AttributeError, __pyx_k__AttributeError, sizeof(__pyx_k__AttributeError), 0, 0, 1, 1},
   {&__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___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__a, __pyx_k__a, sizeof(__pyx_k__a), 0, 0, 1, 1},
   {&__pyx_n_s__ascii, __pyx_k__ascii, sizeof(__pyx_k__ascii), 0, 0, 1, 1},
+  {&__pyx_n_s__az, __pyx_k__az, sizeof(__pyx_k__az), 0, 0, 1, 1},
+  {&__pyx_n_s__buflenx, __pyx_k__buflenx, sizeof(__pyx_k__buflenx), 0, 0, 1, 1},
+  {&__pyx_n_s__bufleny, __pyx_k__bufleny, sizeof(__pyx_k__bufleny), 0, 0, 1, 1},
+  {&__pyx_n_s__buflenz, __pyx_k__buflenz, sizeof(__pyx_k__buflenz), 0, 0, 1, 1},
+  {&__pyx_n_s__bytestr, __pyx_k__bytestr, sizeof(__pyx_k__bytestr), 0, 0, 1, 1},
+  {&__pyx_n_s__datapath, __pyx_k__datapath, sizeof(__pyx_k__datapath), 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__err, __pyx_k__err, sizeof(__pyx_k__err), 0, 0, 1, 1},
   {&__pyx_n_s__errcheck, __pyx_k__errcheck, sizeof(__pyx_k__errcheck), 0, 0, 1, 1},
+  {&__pyx_n_s__f, __pyx_k__f, sizeof(__pyx_k__f), 0, 0, 1, 1},
+  {&__pyx_n_s__i, __pyx_k__i, sizeof(__pyx_k__i), 0, 0, 1, 1},
   {&__pyx_n_s__inx, __pyx_k__inx, sizeof(__pyx_k__inx), 0, 0, 1, 1},
   {&__pyx_n_s__iny, __pyx_k__iny, sizeof(__pyx_k__iny), 0, 0, 1, 1},
   {&__pyx_n_s__inz, __pyx_k__inz, sizeof(__pyx_k__inz), 0, 0, 1, 1},
   {&__pyx_n_s__is_latlong, __pyx_k__is_latlong, sizeof(__pyx_k__is_latlong), 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__p1, __pyx_k__p1, sizeof(__pyx_k__p1), 0, 0, 1, 1},
   {&__pyx_n_s__p2, __pyx_k__p2, sizeof(__pyx_k__p2), 0, 0, 1, 1},
-  {&__pyx_n_s__pjinitstring, __pyx_k__pjinitstring, sizeof(__pyx_k__pjinitstring), 0, 0, 1, 1},
-  {&__pyx_n_s__proj_version, __pyx_k__proj_version, sizeof(__pyx_k__proj_version), 0, 0, 1, 1},
-  {&__pyx_n_s__projpj, __pyx_k__projpj, sizeof(__pyx_k__projpj), 0, 0, 1, 1},
   {&__pyx_n_s__projstring, __pyx_k__projstring, sizeof(__pyx_k__projstring), 0, 0, 1, 1},
   {&__pyx_n_s__radians, __pyx_k__radians, sizeof(__pyx_k__radians), 0, 0, 1, 1},
+  {&__pyx_n_s__searchpath, __pyx_k__searchpath, sizeof(__pyx_k__searchpath), 0, 0, 1, 1},
   {&__pyx_n_s__set_datapath, __pyx_k__set_datapath, sizeof(__pyx_k__set_datapath), 0, 0, 1, 1},
-  {&__pyx_n_s__srs, __pyx_k__srs, sizeof(__pyx_k__srs), 0, 0, 1, 1},
-  {&__pyx_n_s__u, __pyx_k__u, sizeof(__pyx_k__u), 0, 0, 1, 1},
-  {&__pyx_n_s__v, __pyx_k__v, sizeof(__pyx_k__v), 0, 0, 1, 1},
   {&__pyx_n_s__x, __pyx_k__x, sizeof(__pyx_k__x), 0, 0, 1, 1},
+  {&__pyx_n_s__xdata, __pyx_k__xdata, sizeof(__pyx_k__xdata), 0, 0, 1, 1},
+  {&__pyx_n_s__xx, __pyx_k__xx, sizeof(__pyx_k__xx), 0, 0, 1, 1},
   {&__pyx_n_s__y, __pyx_k__y, sizeof(__pyx_k__y), 0, 0, 1, 1},
+  {&__pyx_n_s__ydata, __pyx_k__ydata, sizeof(__pyx_k__ydata), 0, 0, 1, 1},
+  {&__pyx_n_s__yy, __pyx_k__yy, sizeof(__pyx_k__yy), 0, 0, 1, 1},
+  {&__pyx_n_s__zdata, __pyx_k__zdata, sizeof(__pyx_k__zdata), 0, 0, 1, 1},
+  {&__pyx_n_s__zz, __pyx_k__zz, sizeof(__pyx_k__zz), 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 = 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 = 80; __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 = 350; __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 = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   return 0;
   __pyx_L1_error:;
   return -1;
 }
 
 static int __Pyx_InitCachedConstants(void) {
-  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants");
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
 
-  /* "_proj.pyx":58
+  /* "_proj.pyx":113
  *         # process data in buffer
  *         if buflenx != bufleny:
  *             raise RuntimeError("Buffer lengths not the same")             # <<<<<<<<<<<<<<
  *         ndim = buflenx//_doublesize
  *         lonsdata = <double *>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_GOTREF(((PyObject *)__pyx_k_tuple_4));
+  __pyx_k_tuple_4 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__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":122
  *                 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_GOTREF(((PyObject *)__pyx_k_tuple_6));
+  __pyx_k_tuple_6 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__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":141
  *                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_GOTREF(((PyObject *)__pyx_k_tuple_7));
+  __pyx_k_tuple_7 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__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":148
  *                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_GOTREF(((PyObject *)__pyx_k_tuple_8));
+  __pyx_k_tuple_8 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__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":174
  *         # (for numpy/regular python arrays).
  *         if buflenx != bufleny:
  *             raise RuntimeError("Buffer lengths not the same")             # <<<<<<<<<<<<<<
  *         ndim = buflenx//_doublesize
  *         xdatab = <double *>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_GOTREF(((PyObject *)__pyx_k_tuple_11));
+  __pyx_k_tuple_11 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__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":183
  *                 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_GOTREF(((PyObject *)__pyx_k_tuple_12));
+  __pyx_k_tuple_12 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__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":198
  *                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_GOTREF(((PyObject *)__pyx_k_tuple_13));
+  __pyx_k_tuple_13 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__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":207
  *                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_GOTREF(((PyObject *)__pyx_k_tuple_14));
+  __pyx_k_tuple_14 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__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":325
  *         buflenz = bufleny
  *     if not (buflenx == bufleny == buflenz):
  *         raise RuntimeError('x,y and z must be same size')             # <<<<<<<<<<<<<<
  *     xx = <double *>xdata
  *     yy = <double *>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_GOTREF(((PyObject *)__pyx_k_tuple_16));
+  __pyx_k_tuple_16 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_16);
   __Pyx_INCREF(((PyObject *)__pyx_kp_s_15));
   PyTuple_SET_ITEM(__pyx_k_tuple_16, 0, ((PyObject *)__pyx_kp_s_15));
   __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_15));
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_16));
+
+  /* "_proj.pyx":387
+ *         # process data in buffer
+ *         if not buflenlons == buflenlats == buflenaz == buflend:
+ *             raise RuntimeError("Buffer lengths not the same")             # <<<<<<<<<<<<<<
+ *         ndim = buflenlons//_doublesize
+ *         lonsdata = <double *>londata
+ */
+  __pyx_k_tuple_19 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_19);
+  __Pyx_INCREF(((PyObject *)__pyx_kp_s_3));
+  PyTuple_SET_ITEM(__pyx_k_tuple_19, 0, ((PyObject *)__pyx_kp_s_3));
+  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_3));
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_19));
+
+  /* "_proj.pyx":414
+ *             # check for NaN.
+ *             if pazi2 != pazi2:
+ *                 raise ValueError('undefined inverse geodesic (may be an antipodal point)')             # <<<<<<<<<<<<<<
+ *             if not radians:
+ *                 lonsdata[i] = plon2
+ */
+  __pyx_k_tuple_21 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_21)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_21);
+  __Pyx_INCREF(((PyObject *)__pyx_kp_s_20));
+  PyTuple_SET_ITEM(__pyx_k_tuple_21, 0, ((PyObject *)__pyx_kp_s_20));
+  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_20));
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_21));
+
+  /* "_proj.pyx":445
+ *         # process data in buffer
+ *         if not buflenlons == buflenlats == buflenaz == buflend:
+ *             raise RuntimeError("Buffer lengths not the same")             # <<<<<<<<<<<<<<
+ *         ndim = buflenlons//_doublesize
+ *         lonsdata = <double *>londata
+ */
+  __pyx_k_tuple_23 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_23);
+  __Pyx_INCREF(((PyObject *)__pyx_kp_s_3));
+  PyTuple_SET_ITEM(__pyx_k_tuple_23, 0, ((PyObject *)__pyx_kp_s_3));
+  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_3));
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_23));
+
+  /* "_proj.pyx":472
+ *                 pazi2 = pazi2+180.
+ *             if ps12 != ps12: # check for NaN
+ *                 raise ValueError('undefined inverse geodesic (may be an antipodal point)')             # <<<<<<<<<<<<<<
+ *             if radians:
+ *                 lonsdata[i] = _rad2dg*pazi1
+ */
+  __pyx_k_tuple_24 = PyTuple_New(1); if (unlikely(!__pyx_k_tuple_24)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_24);
+  __Pyx_INCREF(((PyObject *)__pyx_kp_s_20));
+  PyTuple_SET_ITEM(__pyx_k_tuple_24, 0, ((PyObject *)__pyx_kp_s_20));
+  __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_20));
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_24));
+
+  /* "_proj.pyx":56
+ *     int PyObject_AsWriteBuffer(object, void **rbuf, Py_ssize_t *len)
+ * 
+ * def set_datapath(datapath):             # <<<<<<<<<<<<<<
+ *     cdef char *searchpath
+ *     bytestr = _strencode(datapath)
+ */
+  __pyx_k_tuple_27 = PyTuple_New(3); if (unlikely(!__pyx_k_tuple_27)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_27);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__datapath));
+  PyTuple_SET_ITEM(__pyx_k_tuple_27, 0, ((PyObject *)__pyx_n_s__datapath));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__datapath));
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__searchpath));
+  PyTuple_SET_ITEM(__pyx_k_tuple_27, 1, ((PyObject *)__pyx_n_s__searchpath));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__searchpath));
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__bytestr));
+  PyTuple_SET_ITEM(__pyx_k_tuple_27, 2, ((PyObject *)__pyx_n_s__bytestr));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__bytestr));
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_27));
+  __pyx_k_codeobj_28 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_29, __pyx_n_s__set_datapath, 56, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_28)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "_proj.pyx":309
+ *             return False
+ * 
+ * def _transform(Proj p1, Proj p2, inx, iny, inz, radians):             # <<<<<<<<<<<<<<
+ *     # private function to call pj_transform
+ *     cdef void *xdata, *ydata, *zdata
+ */
+  __pyx_k_tuple_30 = PyTuple_New(18); if (unlikely(!__pyx_k_tuple_30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_30);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__p1));
+  PyTuple_SET_ITEM(__pyx_k_tuple_30, 0, ((PyObject *)__pyx_n_s__p1));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__p1));
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__p2));
+  PyTuple_SET_ITEM(__pyx_k_tuple_30, 1, ((PyObject *)__pyx_n_s__p2));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__p2));
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__inx));
+  PyTuple_SET_ITEM(__pyx_k_tuple_30, 2, ((PyObject *)__pyx_n_s__inx));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__inx));
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__iny));
+  PyTuple_SET_ITEM(__pyx_k_tuple_30, 3, ((PyObject *)__pyx_n_s__iny));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iny));
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__inz));
+  PyTuple_SET_ITEM(__pyx_k_tuple_30, 4, ((PyObject *)__pyx_n_s__inz));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__inz));
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__radians));
+  PyTuple_SET_ITEM(__pyx_k_tuple_30, 5, ((PyObject *)__pyx_n_s__radians));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__radians));
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__xdata));
+  PyTuple_SET_ITEM(__pyx_k_tuple_30, 6, ((PyObject *)__pyx_n_s__xdata));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__xdata));
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__ydata));
+  PyTuple_SET_ITEM(__pyx_k_tuple_30, 7, ((PyObject *)__pyx_n_s__ydata));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__ydata));
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__zdata));
+  PyTuple_SET_ITEM(__pyx_k_tuple_30, 8, ((PyObject *)__pyx_n_s__zdata));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__zdata));
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__xx));
+  PyTuple_SET_ITEM(__pyx_k_tuple_30, 9, ((PyObject *)__pyx_n_s__xx));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__xx));
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__yy));
+  PyTuple_SET_ITEM(__pyx_k_tuple_30, 10, ((PyObject *)__pyx_n_s__yy));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__yy));
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__zz));
+  PyTuple_SET_ITEM(__pyx_k_tuple_30, 11, ((PyObject *)__pyx_n_s__zz));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__zz));
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__buflenx));
+  PyTuple_SET_ITEM(__pyx_k_tuple_30, 12, ((PyObject *)__pyx_n_s__buflenx));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__buflenx));
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__bufleny));
+  PyTuple_SET_ITEM(__pyx_k_tuple_30, 13, ((PyObject *)__pyx_n_s__bufleny));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__bufleny));
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__buflenz));
+  PyTuple_SET_ITEM(__pyx_k_tuple_30, 14, ((PyObject *)__pyx_n_s__buflenz));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__buflenz));
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__npts));
+  PyTuple_SET_ITEM(__pyx_k_tuple_30, 15, ((PyObject *)__pyx_n_s__npts));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__npts));
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__i));
+  PyTuple_SET_ITEM(__pyx_k_tuple_30, 16, ((PyObject *)__pyx_n_s__i));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__i));
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__err));
+  PyTuple_SET_ITEM(__pyx_k_tuple_30, 17, ((PyObject *)__pyx_n_s__err));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__err));
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_30));
+  __pyx_k_codeobj_31 = (PyObject*)__Pyx_PyCode_New(6, 0, 18, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_30, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_29, __pyx_n_s___transform, 309, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_31)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -3392,8 +5919,9 @@ 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
-  void* __pyx_refnanny = NULL;
   __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
   if (!__Pyx_RefNanny) {
       PyErr_Clear();
@@ -3401,12 +5929,19 @@ PyMODINIT_FUNC PyInit__proj(void)
       if (!__Pyx_RefNanny)
           Py_FatalError("failed to import 'refnanny' module");
   }
-  __pyx_refnanny = __Pyx_RefNanny->SetupContext("PyMODINIT_FUNC PyInit__proj(void)", __LINE__, __FILE__);
   #endif
+  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit__proj(void)", 0);
+  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;}
+  #ifdef __Pyx_CyFunction_USED
+  if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #endif
+  #ifdef __Pyx_FusedFunction_USED
+  if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #endif
+  #ifdef __Pyx_Generator_USED
+  if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   #endif
   /*--- Library function declarations ---*/
   /*--- Threads initialization code ---*/
@@ -3417,16 +5952,23 @@ PyMODINIT_FUNC PyInit__proj(void)
   #endif
   /*--- Module creation code ---*/
   #if PY_MAJOR_VERSION < 3
-  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("_proj"), __pyx_methods, 0, 0, PYTHON_API_VERSION);
+  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("_proj"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
   #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);
+  if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #if PY_MAJOR_VERSION >= 3
+  {
+    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!PyDict_GetItemString(modules, "_proj")) {
+      if (unlikely(PyDict_SetItemString(modules, "_proj", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    }
+  }
+  #endif
+  __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #if CYTHON_COMPILING_IN_PYPY
+  Py_INCREF(__pyx_b);
   #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;}
@@ -3438,162 +5980,210 @@ PyMODINIT_FUNC PyInit__proj(void)
   /*--- 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_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 = 62; __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 = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_5_proj_Proj = &__pyx_type_5_proj_Proj;
+  if (PyType_Ready(&__pyx_type_5_proj_Geod) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 353; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "Geod", (PyObject *)&__pyx_type_5_proj_Geod) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 353; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5_proj_Geod = &__pyx_type_5_proj_Geod;
   /*--- 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); 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_GOTREF(((PyObject *)__pyx_t_3));
+  __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(__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.8.9"
+ * __version__ = "1.9.3"
  */
-  __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_GOTREF(((PyObject *)__pyx_t_2));
+  __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(__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.8.9"
+ * __version__ = "1.9.3"
  * 
  */
-  __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.8.9"             # <<<<<<<<<<<<<<
+ * __version__ = "1.9.3"             # <<<<<<<<<<<<<<
  * 
- * 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_26)) < 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":56
+ *     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_1set_datapath, NULL, __pyx_n_s___proj); 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);
-  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 = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "_proj.pyx":38
+  /* "_proj.pyx":92
  *         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 = 92; __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 = 92; __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":153
  *                 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 = 153; __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 = 153; __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":309
  *             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_3_transform, NULL, __pyx_n_s___proj); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __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 = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
+  /* "_proj.pyx":365
+ *         return (self.__class__,(self.initstring,))
+ * 
+ *     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 = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_k_18 = __pyx_t_1;
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "_proj.pyx":424
+ *                 azdata[i] = _rad2dg*pazi2
+ * 
+ *     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 = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_k_22 = __pyx_t_1;
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "_proj.pyx":481
+ *             azdata[i] = ps12
+ * 
+ *     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 = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_k_25 = __pyx_t_1;
+  __Pyx_GIVEREF(__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));
@@ -3605,7 +6195,7 @@ PyMODINIT_FUNC PyInit__proj(void)
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
   if (__pyx_m) {
-    __Pyx_AddTraceback("init _proj");
+    __Pyx_AddTraceback("init _proj", __pyx_clineno, __pyx_lineno, __pyx_filename);
     Py_DECREF(__pyx_m); __pyx_m = 0;
   } else if (!PyErr_Occurred()) {
     PyErr_SetString(PyExc_ImportError, "init _proj");
@@ -3620,12 +6210,34 @@ PyMODINIT_FUNC PyInit__proj(void)
 }
 
 /* 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)
-        PyErr_SetObject(PyExc_NameError, name);
+    if (!result) {
+        if (dict != __pyx_b) {
+            PyErr_Clear();
+            result = PyObject_GetAttr(__pyx_b, name);
+        }
+        if (!result) {
+            PyErr_SetObject(PyExc_NameError, name);
+        }
+    }
     return result;
 }
 
@@ -3638,7 +6250,7 @@ static void __Pyx_RaiseDoubleKeywordsError(
         "%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));
+        PyString_AsString(kw_name));
         #endif
 }
 
@@ -3654,55 +6266,77 @@ static int __Pyx_ParseOptionalKeywords(
     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) {
+            continue;
+        }
+        name = first_kw_arg;
+        #if PY_MAJOR_VERSION < 3
+        if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
+            while (*name) {
+                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
+                        && _PyString_Eq(**name, key)) {
                     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;
+                    break;
+                }
+                name++;
+            }
+            if (*name) continue;
+            else {
+                PyObject*** argname = argnames;
+                while (argname != first_kw_arg) {
+                    if ((**argname == key) || (
+                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
+                             && _PyString_Eq(**argname, key))) {
+                        goto arg_passed_twice;
                     }
+                    argname++;
+                }
+            }
+        } else
+        #endif
+        if (likely(PyUnicode_Check(key))) {
+            while (*name) {
+                int cmp = (**name == key) ? 0 :
+                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
+                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
+                #endif
+                    PyUnicode_Compare(**name, key);
+                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
+                if (cmp == 0) {
+                    values[name-argnames] = value;
+                    break;
+                }
+                name++;
+            }
+            if (*name) continue;
+            else {
+                PyObject*** argname = argnames;
+                while (argname != first_kw_arg) {
+                    int cmp = (**argname == key) ? 0 :
+                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
+                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
+                    #endif
+                        PyUnicode_Compare(**argname, key);
+                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
+                    if (cmp == 0) goto arg_passed_twice;
+                    argname++;
                 }
             }
+        } else
+            goto invalid_keyword_type;
+        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);
+    __Pyx_RaiseDoubleKeywordsError(function_name, key);
     goto bad;
 invalid_keyword_type:
     PyErr_Format(PyExc_TypeError,
@@ -3729,8 +6363,7 @@ static void __Pyx_RaiseArgtupleInvalid(
     Py_ssize_t num_found)
 {
     Py_ssize_t num_expected;
-    const char *number, *more_or_less;
-
+    const char *more_or_less;
     if (num_found < num_min) {
         num_expected = num_min;
         more_or_less = "at least";
@@ -3741,20 +6374,16 @@ static void __Pyx_RaiseArgtupleInvalid(
     if (exact) {
         more_or_less = "exactly";
     }
-    number = (num_expected == 1) ? "" : "s";
     PyErr_Format(PyExc_TypeError,
-        #if PY_VERSION_HEX < 0x02050000
-            "%s() takes %s %d positional argument%s (%d given)",
-        #else
-            "%s() takes %s %zd positional argument%s (%zd given)",
-        #endif
-        func_name, more_or_less, num_expected, number, num_found);
+                 "%s() takes %s %" CYTHON_FORMAT_SSIZE_T "d positional argument%s (%" CYTHON_FORMAT_SSIZE_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) {
+#if CYTHON_COMPILING_IN_CPYTHON
     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;
@@ -3764,54 +6393,60 @@ static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyOb
     Py_XDECREF(tmp_type);
     Py_XDECREF(tmp_value);
     Py_XDECREF(tmp_tb);
+#else
+    PyErr_Restore(type, value, tb);
+#endif
 }
-
 static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
+#if CYTHON_COMPILING_IN_CPYTHON
     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;
+#else
+    PyErr_Fetch(type, value, tb);
+#endif
 }
 
-
 #if PY_MAJOR_VERSION < 3
-static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) {
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
+                        CYTHON_UNUSED PyObject *cause) {
     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;
+    if (!value || value == Py_None)
+        value = NULL;
+    else
         Py_INCREF(value);
+    if (!tb || tb == Py_None)
+        tb = NULL;
+    else {
+        Py_INCREF(tb);
+        if (!PyTraceBack_Check(tb)) {
+            PyErr_SetString(PyExc_TypeError,
+                "raise: arg 3 must be a traceback or None");
+            goto raise_error;
+        }
     }
     #if PY_VERSION_HEX < 0x02050000
-    if (!PyClass_Check(type))
+    if (PyClass_Check(type)) {
     #else
-    if (!PyType_Check(type))
+    if (PyType_Check(type)) {
     #endif
-    {
-        /* Raising an instance.  The value should be a dummy. */
-        if (value != Py_None) {
+#if CYTHON_COMPILING_IN_PYPY
+        if (!value) {
+            Py_INCREF(Py_None);
+            value = Py_None;
+        }
+#endif
+        PyErr_NormalizeException(&type, &value, &tb);
+    } else {
+        if (value) {
             PyErr_SetString(PyExc_TypeError,
                 "instance exception may not have a separate value");
             goto raise_error;
         }
-        /* Normalize to raise <class>, <instance> */
-        Py_DECREF(value);
         value = type;
         #if PY_VERSION_HEX < 0x02050000
             if (PyInstance_Check(type)) {
@@ -3834,7 +6469,6 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) {
             }
         #endif
     }
-
     __Pyx_ErrRestore(type, value, tb);
     return;
 raise_error:
@@ -3843,10 +6477,9 @@ raise_error:
     Py_XDECREF(tb);
     return;
 }
-
 #else /* Python 3+ */
-
-static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) {
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
+    PyObject* owned_instance = NULL;
     if (tb == Py_None) {
         tb = 0;
     } else if (tb && !PyTraceBack_Check(tb)) {
@@ -3856,7 +6489,6 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) {
     }
     if (value == Py_None)
         value = 0;
-
     if (PyExceptionInstance_Check(type)) {
         if (value) {
             PyErr_SetString(PyExc_TypeError,
@@ -3865,14 +6497,55 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) {
         }
         value = type;
         type = (PyObject*) Py_TYPE(value);
-    } else if (!PyExceptionClass_Check(type)) {
+    } else if (PyExceptionClass_Check(type)) {
+        PyObject *args;
+        if (!value)
+            args = PyTuple_New(0);
+        else if (PyTuple_Check(value)) {
+            Py_INCREF(value);
+            args = value;
+        }
+        else
+            args = PyTuple_Pack(1, value);
+        if (!args)
+            goto bad;
+        owned_instance = PyEval_CallObject(type, args);
+        Py_DECREF(args);
+        if (!owned_instance)
+            goto bad;
+        value = owned_instance;
+        if (!PyExceptionInstance_Check(value)) {
+            PyErr_Format(PyExc_TypeError,
+                         "calling %R should have returned an instance of "
+                         "BaseException, not %R",
+                         type, Py_TYPE(value));
+            goto bad;
+        }
+    } else {
         PyErr_SetString(PyExc_TypeError,
             "raise: exception class must be a subclass of BaseException");
         goto bad;
     }
-
+    if (cause && cause != Py_None) {
+        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;
+        }
+        PyException_SetCause(value, fixed_cause);
+    }
     PyErr_SetObject(type, value);
-
     if (tb) {
         PyThreadState *tstate = PyThreadState_GET();
         PyObject* tmp_tb = tstate->curexc_traceback;
@@ -3882,8 +6555,8 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) {
             Py_XDECREF(tmp_tb);
         }
     }
-
 bad:
+    Py_XDECREF(owned_instance);
     return;
 }
 #endif
@@ -3917,6 +6590,7 @@ static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t a, Py_ssize_t b)
 
 static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) {
     PyObject *local_type, *local_value, *local_tb;
+#if CYTHON_COMPILING_IN_CPYTHON
     PyObject *tmp_type, *tmp_value, *tmp_tb;
     PyThreadState *tstate = PyThreadState_GET();
     local_type = tstate->curexc_type;
@@ -3925,19 +6599,27 @@ static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb)
     tstate->curexc_type = 0;
     tstate->curexc_value = 0;
     tstate->curexc_traceback = 0;
+#else
+    PyErr_Fetch(&local_type, &local_value, &local_tb);
+#endif
     PyErr_NormalizeException(&local_type, &local_value, &local_tb);
+#if CYTHON_COMPILING_IN_CPYTHON
     if (unlikely(tstate->curexc_type))
+#else
+    if (unlikely(PyErr_Occurred()))
+#endif
         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);
+    *type = local_type;
+    *value = local_value;
+    *tb = local_tb;
+#if CYTHON_COMPILING_IN_CPYTHON
     tmp_type = tstate->exc_type;
     tmp_value = tstate->exc_value;
     tmp_tb = tstate->exc_traceback;
@@ -3945,10 +6627,13 @@ static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb)
     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). */
+       these objects (DECREF may run arbitrary code). */
     Py_XDECREF(tmp_type);
     Py_XDECREF(tmp_value);
     Py_XDECREF(tmp_tb);
+#else
+    PyErr_SetExcInfo(local_type, local_value, local_tb);
+#endif
     return 0;
 bad:
     *type = 0;
@@ -3960,8 +6645,8 @@ bad:
     return -1;
 }
 
-
 static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) {
+#if CYTHON_COMPILING_IN_CPYTHON
     PyThreadState *tstate = PyThreadState_GET();
     *type = tstate->exc_type;
     *value = tstate->exc_value;
@@ -3969,9 +6654,12 @@ static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value,
     Py_XINCREF(*type);
     Py_XINCREF(*value);
     Py_XINCREF(*tb);
+#else
+    PyErr_GetExcInfo(type, value, tb);
+#endif
 }
-
 static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) {
+#if CYTHON_COMPILING_IN_CPYTHON
     PyObject *tmp_type, *tmp_value, *tmp_tb;
     PyThreadState *tstate = PyThreadState_GET();
     tmp_type = tstate->exc_type;
@@ -3983,9 +6671,12 @@ static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb)
     Py_XDECREF(tmp_type);
     Py_XDECREF(tmp_value);
     Py_XDECREF(tmp_tb);
+#else
+    PyErr_SetExcInfo(type, value, tb);
+#endif
 }
 
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list) {
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, long level) {
     PyObject *py_import = 0;
     PyObject *empty_list = 0;
     PyObject *module = 0;
@@ -4009,8 +6700,44 @@ static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list) {
     empty_dict = PyDict_New();
     if (!empty_dict)
         goto bad;
+    #if PY_VERSION_HEX >= 0x02050000
+    {
+        #if PY_MAJOR_VERSION >= 3
+        if (level == -1) {
+            if (strchr(__Pyx_MODULE_NAME, '.')) {
+                /* try package relative import first */
+                PyObject *py_level = PyInt_FromLong(1);
+                if (!py_level)
+                    goto bad;
+                module = PyObject_CallFunctionObjArgs(py_import,
+                    name, global_dict, empty_dict, list, py_level, NULL);
+                Py_DECREF(py_level);
+                if (!module) {
+                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
+                        goto bad;
+                    PyErr_Clear();
+                }
+            }
+            level = 0; /* try absolute import on failure */
+        }
+        #endif
+        if (!module) {
+            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);
@@ -4229,9 +6956,9 @@ static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) {
                                 "can't convert negative value to unsigned long");
                 return (unsigned long)-1;
             }
-            return PyLong_AsUnsignedLong(x);
+            return (unsigned long)PyLong_AsUnsignedLong(x);
         } else {
-            return PyLong_AsLong(x);
+            return (unsigned long)PyLong_AsLong(x);
         }
     } else {
         unsigned long val;
@@ -4264,9 +6991,9 @@ static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObje
                                 "can't convert negative value to unsigned PY_LONG_LONG");
                 return (unsigned PY_LONG_LONG)-1;
             }
-            return PyLong_AsUnsignedLongLong(x);
+            return (unsigned PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
         } else {
-            return PyLong_AsLongLong(x);
+            return (unsigned PY_LONG_LONG)PyLong_AsLongLong(x);
         }
     } else {
         unsigned PY_LONG_LONG val;
@@ -4299,9 +7026,9 @@ static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) {
                                 "can't convert negative value to long");
                 return (long)-1;
             }
-            return PyLong_AsUnsignedLong(x);
+            return (long)PyLong_AsUnsignedLong(x);
         } else {
-            return PyLong_AsLong(x);
+            return (long)PyLong_AsLong(x);
         }
     } else {
         long val;
@@ -4334,9 +7061,9 @@ static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) {
                                 "can't convert negative value to PY_LONG_LONG");
                 return (PY_LONG_LONG)-1;
             }
-            return PyLong_AsUnsignedLongLong(x);
+            return (PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
         } else {
-            return PyLong_AsLongLong(x);
+            return (PY_LONG_LONG)PyLong_AsLongLong(x);
         }
     } else {
         PY_LONG_LONG val;
@@ -4369,9 +7096,9 @@ static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) {
                                 "can't convert negative value to signed long");
                 return (signed long)-1;
             }
-            return PyLong_AsUnsignedLong(x);
+            return (signed long)PyLong_AsUnsignedLong(x);
         } else {
-            return PyLong_AsLong(x);
+            return (signed long)PyLong_AsLong(x);
         }
     } else {
         signed long val;
@@ -4404,9 +7131,9 @@ static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject*
                                 "can't convert negative value to signed PY_LONG_LONG");
                 return (signed PY_LONG_LONG)-1;
             }
-            return PyLong_AsUnsignedLongLong(x);
+            return (signed PY_LONG_LONG)PyLong_AsUnsignedLongLong(x);
         } else {
-            return PyLong_AsLongLong(x);
+            return (signed PY_LONG_LONG)PyLong_AsLongLong(x);
         }
     } else {
         signed PY_LONG_LONG val;
@@ -4418,28 +7145,124 @@ static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject*
     }
 }
 
+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;
+}
+
+static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
+    int start = 0, mid = 0, end = count - 1;
+    if (end >= 0 && code_line > entries[end].code_line) {
+        return count;
+    }
+    while (start < end) {
+        mid = (start + end) / 2;
+        if (code_line < entries[mid].code_line) {
+            end = mid;
+        } else if (code_line > entries[mid].code_line) {
+             start = mid + 1;
+        } else {
+            return mid;
+        }
+    }
+    if (code_line <= entries[mid].code_line) {
+        return mid;
+    } else {
+        return mid + 1;
+    }
+}
+static PyCodeObject *__pyx_find_code_object(int code_line) {
+    PyCodeObject* code_object;
+    int pos;
+    if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
+        return NULL;
+    }
+    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
+    if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
+        return NULL;
+    }
+    code_object = __pyx_code_cache.entries[pos].code_object;
+    Py_INCREF(code_object);
+    return code_object;
+}
+static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
+    int pos, i;
+    __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
+    if (unlikely(!code_line)) {
+        return;
+    }
+    if (unlikely(!entries)) {
+        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
+        if (likely(entries)) {
+            __pyx_code_cache.entries = entries;
+            __pyx_code_cache.max_count = 64;
+            __pyx_code_cache.count = 1;
+            entries[0].code_line = code_line;
+            entries[0].code_object = code_object;
+            Py_INCREF(code_object);
+        }
+        return;
+    }
+    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
+    if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
+        PyCodeObject* tmp = entries[pos].code_object;
+        entries[pos].code_object = code_object;
+        Py_DECREF(tmp);
+        return;
+    }
+    if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
+        int new_max = __pyx_code_cache.max_count + 64;
+        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
+            __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry));
+        if (unlikely(!entries)) {
+            return;
+        }
+        __pyx_code_cache.entries = entries;
+        __pyx_code_cache.max_count = new_max;
+    }
+    for (i=__pyx_code_cache.count; i>pos; i--) {
+        entries[i] = entries[i-1];
+    }
+    entries[pos].code_line = code_line;
+    entries[pos].code_object = code_object;
+    __pyx_code_cache.count++;
+    Py_INCREF(code_object);
+}
+
 #include "compile.h"
 #include "frameobject.h"
 #include "traceback.h"
-
-static void __Pyx_AddTraceback(const char *funcname) {
+static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
+            const char *funcname, int c_line,
+            int py_line, const char *filename) {
+    PyCodeObject *py_code = 0;
     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);
+    py_srcfile = PyString_FromString(filename);
     #else
-    py_srcfile = PyUnicode_FromString(__pyx_filename);
+    py_srcfile = PyUnicode_FromString(filename);
     #endif
     if (!py_srcfile) goto bad;
-    if (__pyx_clineno) {
+    if (c_line) {
         #if PY_MAJOR_VERSION < 3
-        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno);
+        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
         #else
-        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno);
+        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
         #endif
     }
     else {
@@ -4450,28 +7273,45 @@ static void __Pyx_AddTraceback(const char *funcname) {
         #endif
     }
     if (!py_funcname) goto bad;
-    py_globals = PyModule_GetDict(__pyx_m);
-    if (!py_globals) goto bad;
-    py_code = PyCode_New(
+    py_code = __Pyx_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,*/
+        __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,*/
+        py_line,      /*int firstlineno,*/
         __pyx_empty_bytes  /*PyObject *lnotab*/
     );
-    if (!py_code) goto bad;
+    Py_DECREF(py_srcfile);
+    Py_DECREF(py_funcname);
+    return py_code;
+bad:
+    Py_XDECREF(py_srcfile);
+    Py_XDECREF(py_funcname);
+    return NULL;
+}
+static void __Pyx_AddTraceback(const char *funcname, int c_line,
+                               int py_line, const char *filename) {
+    PyCodeObject *py_code = 0;
+    PyObject *py_globals = 0;
+    PyFrameObject *py_frame = 0;
+    py_code = __pyx_find_code_object(c_line ? c_line : py_line);
+    if (!py_code) {
+        py_code = __Pyx_CreateCodeObjectForTraceback(
+            funcname, c_line, py_line, filename);
+        if (!py_code) goto bad;
+        __pyx_insert_code_object(c_line ? c_line : py_line, py_code);
+    }
+    py_globals = PyModule_GetDict(__pyx_m);
+    if (!py_globals) goto bad;
     py_frame = PyFrame_New(
         PyThreadState_GET(), /*PyThreadState *tstate,*/
         py_code,             /*PyCodeObject *code,*/
@@ -4479,11 +7319,9 @@ static void __Pyx_AddTraceback(const char *funcname) {
         0                    /*PyObject *locals*/
     );
     if (!py_frame) goto bad;
-    py_frame->f_lineno = __pyx_lineno;
+    py_frame->f_lineno = py_line;
     PyTraceBack_Here(py_frame);
 bad:
-    Py_XDECREF(py_srcfile);
-    Py_XDECREF(py_funcname);
     Py_XDECREF(py_code);
     Py_XDECREF(py_frame);
 }
@@ -4518,6 +7356,7 @@ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
     return 0;
 }
 
+
 /* Type Conversion Functions */
 
 static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
diff --git a/_proj.pyx b/_proj.pyx
index c21270b..0a6bbe0 100644
--- a/_proj.pyx
+++ b/_proj.pyx
@@ -1,35 +1,89 @@
-# 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.3"
+
+cdef extern from "math.h":
+    cdef enum:
+        HUGE_VAL
+        FP_NAN
+
+cdef extern from "geodesic.h":
+  struct Geodesic:
+        pass
+  void GeodesicInit(Geodesic* g, double a, double f)
+  void Direct(Geodesic* g,\
+              double lat1, double lon1, double azi1, double s12,\
+              double* plat2, double* plon2, double* pazi2)
+  void Inverse(Geodesic* g,\
+               double lat1, double lon1, double lat2, double lon2,\
+               double* ps12, double* pazi1, double* pazi2)
+
+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
     cdef public object proj_version
     cdef char *pjinitstring
     cdef public object srs
 
     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))
+        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.
 
     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"""
@@ -48,6 +102,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 +128,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(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.
             # also check for NaNs.
@@ -128,8 +185,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(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.
             # also check for NaNs.
@@ -165,6 +224,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 = <projUV *>lonlat.data
@@ -176,8 +236,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(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.
 #           if projxyout.u == HUGE_VAL:
@@ -207,8 +269,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(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.
 #           if projlonlatout.u == HUGE_VAL:
@@ -247,6 +311,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 +333,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
@@ -284,3 +349,162 @@ cdef _strencode(pystr,encoding='ascii'):
         return pystr.encode(encoding)
     except AttributeError:
         return pystr # already bytes?
+
+cdef class Geod:
+    cdef Geodesic _Geodesic
+    cdef public object initstring
+
+    def __cinit__(self, a, f):
+        self.initstring = '+a=%s +f=%s' % (a, f)
+        GeodesicInit(&self._Geodesic, <double> a, <double> f)
+
+    def __reduce__(self):
+        """special method that allows pyproj.Geod instance to be pickled"""
+        return (self.__class__,(self.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.
+        """
+        cdef Py_ssize_t buflenlons, buflenlats, buflenaz, buflend, ndim, i
+        cdef double lat1,lon1,az1,s12,plon2,plat2,pazi2
+        cdef double *lonsdata, *latsdata, *azdata, *distdata
+        cdef void *londata, *latdata, *azdat, *distdat
+        # 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 = <double *>londata
+        latsdata = <double *>latdata
+        azdata = <double *>azdat
+        distdata = <double *>distdat
+        for i from 0 <= i < ndim:
+            if not radians:
+                lon1 = lonsdata[i]
+                lat1 = latsdata[i]
+                az1 = azdata[i]
+                s12 = distdata[i]
+            else:
+                lon1 = _dg2rad*lonsdata[i]
+                lat1 = _dg2rad*latsdata[i]
+                az1 = _dg2rad*azdata[i]
+                s12 = distdata[i]
+            Direct(&self._Geodesic, lat1, lon1, az1, s12,\
+                   &plat2, &plon2, &pazi2)
+            # back azimuth needs to be flipped 180 degrees
+            # to match what proj4 geod utility produces.
+            if pazi2 > 0:
+                pazi2 = pazi2-180.
+            elif pazi2 < 0:
+                pazi2 = pazi2+180.
+            # check for NaN.
+            if pazi2 != pazi2:
+                raise ValueError('undefined inverse geodesic (may be an antipodal point)')
+            if not radians:
+                lonsdata[i] = plon2
+                latsdata[i] = plat2
+                azdata[i] = pazi2
+            else:
+                lonsdata[i] = _rad2dg*plon2
+                latsdata[i] = _rad2dg*plat2
+                azdata[i] = _rad2dg*pazi2
+
+    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 double lat1,lon1,lat2,lon2,pazi1,pazi2,ps12
+        cdef Py_ssize_t buflenlons, buflenlats, buflenaz, buflend, ndim, i
+        cdef double *lonsdata, *latsdata, *azdata, *distdata
+        cdef void *londata, *latdata, *azdat, *distdat
+        # 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 = <double *>londata
+        latsdata = <double *>latdata
+        azdata = <double *>azdat
+        distdata = <double *>distdat
+        errmsg = 'undefined inverse geodesic (may be an antipodal point)'
+        for i from 0 <= i < ndim:
+            if radians:
+                lon1 = _rad2dg*lonsdata[i]
+                lat1 = _rad2dg*latsdata[i]
+                lon2 = _rad2dg*azdata[i]
+                lat2 = _rad2dg*distdata[i]
+            else:
+                lon1 = lonsdata[i]
+                lat1 = latsdata[i]
+                lon2 = azdata[i]
+                lat2 = distdata[i]
+            Inverse(&self._Geodesic, lat1, lon1, lat2, lon2,
+                    &ps12, &pazi1, &pazi2)
+            # back azimuth needs to be flipped 180 degrees
+            # to match what proj4 geod utility produces.
+            if pazi2 > 0:
+                pazi2 = pazi2-180.
+            elif pazi2 < 0:
+                pazi2 = pazi2+180.
+            if ps12 != ps12: # check for NaN
+                raise ValueError('undefined inverse geodesic (may be an antipodal point)')
+            if radians:
+                lonsdata[i] = _rad2dg*pazi1
+                latsdata[i] = _rad2dg*pazi2
+            else:
+                lonsdata[i] = pazi1
+                latsdata[i] = pazi2
+            azdata[i] = ps12
+
+    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,ps12,pazi1,pazi2,s12,plon2,plat2
+        if radians:
+            lon1 = _rad2dg*lon1
+            lat1 = _rad2dg*lat1
+            lon2 = _rad2dg*lon2
+            lat2 = _rad2dg*lat2
+        # do inverse computation to set azimuths, distance.
+        Inverse(&self._Geodesic, lat1, lon1,  lat2, lon2,
+                &ps12, &pazi1, &pazi2)
+        # distance increment.
+        del_s = ps12/(npts+1)
+        # initialize output tuples.
+        lats = ()
+        lons = ()
+        # loop over intermediate points, compute lat/lons.
+        for i from 1 <= i < npts+1:
+            s12 = i*del_s
+            Direct(&self._Geodesic, lat1, lon1, pazi1, s12,\
+                   &plat2, &plon2, &pazi2)
+            if radians:
+                lats = lats + (_dg2rad*plat2,)
+                lons = lons + (_dg2rad*plon2,)
+            else:
+                lats = lats + (plat2,)
+                lons = lons + (plon2,)
+        return lons, lats
diff --git a/_pyproj.pxi b/_pyproj.pxi
deleted file mode 100644
index 0a3ca11..0000000
--- a/_pyproj.pxi
+++ /dev/null
@@ -1,59 +0,0 @@
-import math
-
-_dg2rad = math.radians(1.)
-_rad2dg = math.degrees(1.)
-_doublesize = sizeof(double)
-__version__ = "1.8.9"
-
-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 double *projPJ
-    projPJ pj_init_plus(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_free(projPJ)
-    void pj_set_searchpath ( int count, char **path )
-    cdef extern int pj_errno
-    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)
diff --git a/create_docs.sh b/create_docs.sh
new file mode 100755
index 0000000..eb6e79d
--- /dev/null
+++ b/create_docs.sh
@@ -0,0 +1,2 @@
+# svn propset svn:mime-type text/html docs/*html
+epydoc -v --exclude=_geod --exclude=datadir --exclude=_proj --no-frames --no-private --introspect-only -o docs pyproj
diff --git a/docs/api-objects.txt b/docs/api-objects.txt
new file mode 100644
index 0000000..f51a515
--- /dev/null
+++ b/docs/api-objects.txt
@@ -0,0 +1,21 @@
+pyproj	pyproj-module.html
+pyproj._dict2string	pyproj-module.html#_dict2string
+pyproj._copytobuffer_return_scalar	pyproj-module.html#_copytobuffer_return_scalar
+pyproj.pj_ellps	pyproj-module.html#pj_ellps
+pyproj.pyproj_datadir	pyproj-module.html#pyproj_datadir
+pyproj.__package__	pyproj-module.html#__package__
+pyproj.transform	pyproj-module.html#transform
+pyproj._copytobuffer	pyproj-module.html#_copytobuffer
+pyproj._convertback	pyproj-module.html#_convertback
+pyproj.pj_list	pyproj-module.html#pj_list
+pyproj.test	pyproj-module.html#test
+pyproj.Geod	pyproj.Geod-class.html
+pyproj.Geod.__new__	pyproj.Geod-class.html#__new__
+pyproj.Geod.fwd	pyproj.Geod-class.html#fwd
+pyproj.Geod.inv	pyproj.Geod-class.html#inv
+pyproj.Geod.npts	pyproj.Geod-class.html#npts
+pyproj.Proj	pyproj.Proj-class.html
+pyproj.Proj.is_latlong	pyproj.Proj-class.html#is_latlong
+pyproj.Proj.__new__	pyproj.Proj-class.html#__new__
+pyproj.Proj.is_geocent	pyproj.Proj-class.html#is_geocent
+pyproj.Proj.__call__	pyproj.Proj-class.html#__call__
diff --git a/docs/class-tree.html b/docs/class-tree.html
new file mode 100644
index 0000000..d6bb2f6
--- /dev/null
+++ b/docs/class-tree.html
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>Class Hierarchy</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>   <a
+        href="pyproj-module.html">Home</a>   </th>
+
+  <!-- Tree link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >   Trees   </th>
+
+  <!-- Index link -->
+      <th>   <a
+        href="identifier-index.html">Indices</a>   </th>
+
+  <!-- Help link -->
+      <th>   <a
+        href="help.html">Help</a>   </th>
+
+      <th class="navbar" width="100%"></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%"> </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+      </table>
+    </td>
+  </tr>
+</table>
+<center><b>
+ [ <a href="module-tree.html">Module Hierarchy</a>
+ | <a href="class-tree.html">Class Hierarchy</a> ]
+</b></center><br />
+<h1 class="epydoc">Class Hierarchy</h1>
+<ul class="nomargin-top">
+    <li> <strong class="uidlink">object</strong>:
+      <em class="summary">The most base type</em>
+    <ul>
+    <li> <strong class="uidlink"><i>unreachable</i>.Geod</strong>
+    <ul>
+    <li> <strong class="uidlink"><a href="pyproj.Geod-class.html">pyproj.Geod</a></strong>:
+      <em class="summary">performs forward and inverse geodetic, or Great Circle, 
+        computations.</em>
+    </li>
+    </ul>
+    </li>
+    <li> <strong class="uidlink"><i>unreachable</i>.Proj</strong>
+    <ul>
+    <li> <strong class="uidlink"><a href="pyproj.Proj-class.html">pyproj.Proj</a></strong>:
+      <em class="summary">performs cartographic transformations (converts from 
+        longitude,latitude to native map projection x,y coordinates and 
+        vice versa) using proj (http://trac.osgeo.org/proj/).</em>
+    </li>
+    </ul>
+    </li>
+    </ul>
+    </li>
+</ul>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>   <a
+        href="pyproj-module.html">Home</a>   </th>
+
+  <!-- Tree link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >   Trees   </th>
+
+  <!-- Index link -->
+      <th>   <a
+        href="identifier-index.html">Indices</a>   </th>
+
+  <!-- Help link -->
+      <th>   <a
+        href="help.html">Help</a>   </th>
+
+      <th class="navbar" width="100%"></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Jan 11 09:07:23 2013
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/docs/crarr.png b/docs/crarr.png
new file mode 100644
index 0000000..26b43c5
Binary files /dev/null and b/docs/crarr.png differ
diff --git a/docs/epydoc.css b/docs/epydoc.css
new file mode 100644
index 0000000..86d4170
--- /dev/null
+++ b/docs/epydoc.css
@@ -0,0 +1,322 @@
+
+
+/* Epydoc CSS Stylesheet
+ *
+ * This stylesheet can be used to customize the appearance of epydoc's
+ * HTML output.
+ *
+ */
+
+/* Default Colors & Styles
+ *   - Set the default foreground & background color with 'body'; and 
+ *     link colors with 'a:link' and 'a:visited'.
+ *   - Use bold for decision list terms.
+ *   - The heading styles defined here are used for headings *within*
+ *     docstring descriptions.  All headings used by epydoc itself use
+ *     either class='epydoc' or class='toc' (CSS styles for both
+ *     defined below).
+ */
+body                        { background: #ffffff; color: #000000; }
+p                           { margin-top: 0.5em; margin-bottom: 0.5em; }
+a:link                      { color: #0000ff; }
+a:visited                   { color: #204080; }
+dt                          { font-weight: bold; }
+h1                          { font-size: +140%; font-style: italic;
+                              font-weight: bold; }
+h2                          { font-size: +125%; font-style: italic;
+                              font-weight: bold; }
+h3                          { font-size: +110%; font-style: italic;
+                              font-weight: normal; }
+code                        { font-size: 100%; }
+/* N.B.: class, not pseudoclass */
+a.link                      { font-family: monospace; }
+ 
+/* Page Header & Footer
+ *   - The standard page header consists of a navigation bar (with
+ *     pointers to standard pages such as 'home' and 'trees'); a
+ *     breadcrumbs list, which can be used to navigate to containing
+ *     classes or modules; options links, to show/hide private
+ *     variables and to show/hide frames; and a page title (using
+ *     <h1>).  The page title may be followed by a link to the
+ *     corresponding source code (using 'span.codelink').
+ *   - The footer consists of a navigation bar, a timestamp, and a
+ *     pointer to epydoc's homepage.
+ */ 
+h1.epydoc                   { margin: 0; font-size: +140%; font-weight: bold; }
+h2.epydoc                   { font-size: +130%; font-weight: bold; }
+h3.epydoc                   { font-size: +115%; font-weight: bold;
+                              margin-top: 0.2em; }
+td h3.epydoc                { font-size: +115%; font-weight: bold;
+                              margin-bottom: 0; }
+table.navbar                { background: #a0c0ff; color: #000000;
+                              border: 2px groove #c0d0d0; }
+table.navbar table          { color: #000000; }
+th.navbar-select            { background: #70b0ff;
+                              color: #000000; } 
+table.navbar a              { text-decoration: none; }  
+table.navbar a:link         { color: #0000ff; }
+table.navbar a:visited      { color: #204080; }
+span.breadcrumbs            { font-size: 85%; font-weight: bold; }
+span.options                { font-size: 70%; }
+span.codelink               { font-size: 85%; }
+td.footer                   { font-size: 85%; }
+
+/* Table Headers
+ *   - Each summary table and details section begins with a 'header'
+ *     row.  This row contains a section title (marked by
+ *     'span.table-header') as well as a show/hide private link
+ *     (marked by 'span.options', defined above).
+ *   - Summary tables that contain user-defined groups mark those
+ *     groups using 'group header' rows.
+ */
+td.table-header             { background: #70b0ff; color: #000000;
+                              border: 1px solid #608090; }
+td.table-header table       { color: #000000; }
+td.table-header table a:link      { color: #0000ff; }
+td.table-header table a:visited   { color: #204080; }
+span.table-header           { font-size: 120%; font-weight: bold; }
+th.group-header             { background: #c0e0f8; color: #000000;
+                              text-align: left; font-style: italic; 
+                              font-size: 115%; 
+                              border: 1px solid #608090; }
+
+/* Summary Tables (functions, variables, etc)
+ *   - Each object is described by a single row of the table with
+ *     two cells.  The left cell gives the object's type, and is
+ *     marked with 'code.summary-type'.  The right cell gives the
+ *     object's name and a summary description.
+ *   - CSS styles for the table's header and group headers are
+ *     defined above, under 'Table Headers'
+ */
+table.summary               { border-collapse: collapse;
+                              background: #e8f0f8; color: #000000;
+                              border: 1px solid #608090;
+                              margin-bottom: 0.5em; }
+td.summary                  { border: 1px solid #608090; }
+code.summary-type           { font-size: 85%; }
+table.summary a:link        { color: #0000ff; }
+table.summary a:visited     { color: #204080; }
+
+
+/* Details Tables (functions, variables, etc)
+ *   - Each object is described in its own div.
+ *   - A single-row summary table w/ table-header is used as
+ *     a header for each details section (CSS style for table-header
+ *     is defined above, under 'Table Headers').
+ */
+table.details               { border-collapse: collapse;
+                              background: #e8f0f8; color: #000000;
+                              border: 1px solid #608090;
+                              margin: .2em 0 0 0; }
+table.details table         { color: #000000; }
+table.details a:link        { color: #0000ff; }
+table.details a:visited     { color: #204080; }
+
+/* Fields */
+dl.fields                   { margin-left: 2em; margin-top: 1em;
+                              margin-bottom: 1em; }
+dl.fields dd ul             { margin-left: 0em; padding-left: 0em; }
+dl.fields dd ul li ul       { margin-left: 2em; padding-left: 0em; }
+div.fields                  { margin-left: 2em; }
+div.fields p                { margin-bottom: 0.5em; }
+
+/* Index tables (identifier index, term index, etc)
+ *   - link-index is used for indices containing lists of links
+ *     (namely, the identifier index & term index).
+ *   - index-where is used in link indices for the text indicating
+ *     the container/source for each link.
+ *   - metadata-index is used for indices containing metadata
+ *     extracted from fields (namely, the bug index & todo index).
+ */
+table.link-index            { border-collapse: collapse;
+                              background: #e8f0f8; color: #000000;
+                              border: 1px solid #608090; }
+td.link-index               { border-width: 0px; }
+table.link-index a:link     { color: #0000ff; }
+table.link-index a:visited  { color: #204080; }
+span.index-where            { font-size: 70%; }
+table.metadata-index        { border-collapse: collapse;
+                              background: #e8f0f8; color: #000000;
+                              border: 1px solid #608090; 
+                              margin: .2em 0 0 0; }
+td.metadata-index           { border-width: 1px; border-style: solid; }
+table.metadata-index a:link { color: #0000ff; }
+table.metadata-index a:visited  { color: #204080; }
+
+/* Function signatures
+ *   - sig* is used for the signature in the details section.
+ *   - .summary-sig* is used for the signature in the summary 
+ *     table, and when listing property accessor functions.
+ * */
+.sig-name                   { color: #006080; }
+.sig-arg                    { color: #008060; }
+.sig-default                { color: #602000; }
+.summary-sig                { font-family: monospace; }
+.summary-sig-name           { color: #006080; font-weight: bold; }
+table.summary a.summary-sig-name:link
+                            { color: #006080; font-weight: bold; }
+table.summary a.summary-sig-name:visited
+                            { color: #006080; font-weight: bold; }
+.summary-sig-arg            { color: #006040; }
+.summary-sig-default        { color: #501800; }
+
+/* Subclass list
+ */
+ul.subclass-list { display: inline; }
+ul.subclass-list li { display: inline; }
+
+/* To render variables, classes etc. like functions */
+table.summary .summary-name { color: #006080; font-weight: bold;
+                              font-family: monospace; }
+table.summary
+     a.summary-name:link    { color: #006080; font-weight: bold;
+                              font-family: monospace; }
+table.summary
+    a.summary-name:visited  { color: #006080; font-weight: bold;
+                              font-family: monospace; }
+
+/* Variable values
+ *   - In the 'variable details' sections, each varaible's value is
+ *     listed in a 'pre.variable' box.  The width of this box is
+ *     restricted to 80 chars; if the value's repr is longer than
+ *     this it will be wrapped, using a backslash marked with
+ *     class 'variable-linewrap'.  If the value's repr is longer
+ *     than 3 lines, the rest will be ellided; and an ellipsis
+ *     marker ('...' marked with 'variable-ellipsis') will be used.
+ *   - If the value is a string, its quote marks will be marked
+ *     with 'variable-quote'.
+ *   - If the variable is a regexp, it is syntax-highlighted using
+ *     the re* CSS classes.
+ */
+pre.variable                { padding: .5em; margin: 0;
+                              background: #dce4ec; color: #000000;
+                              border: 1px solid #708890; }
+.variable-linewrap          { color: #604000; font-weight: bold; }
+.variable-ellipsis          { color: #604000; font-weight: bold; }
+.variable-quote             { color: #604000; font-weight: bold; }
+.variable-group             { color: #008000; font-weight: bold; }
+.variable-op                { color: #604000; font-weight: bold; }
+.variable-string            { color: #006030; }
+.variable-unknown           { color: #a00000; font-weight: bold; }
+.re                         { color: #000000; }
+.re-char                    { color: #006030; }
+.re-op                      { color: #600000; }
+.re-group                   { color: #003060; }
+.re-ref                     { color: #404040; }
+
+/* Base tree
+ *   - Used by class pages to display the base class hierarchy.
+ */
+pre.base-tree               { font-size: 80%; margin: 0; }
+
+/* Frames-based table of contents headers
+ *   - Consists of two frames: one for selecting modules; and
+ *     the other listing the contents of the selected module.
+ *   - h1.toc is used for each frame's heading
+ *   - h2.toc is used for subheadings within each frame.
+ */
+h1.toc                      { text-align: center; font-size: 105%;
+                              margin: 0; font-weight: bold;
+                              padding: 0; }
+h2.toc                      { font-size: 100%; font-weight: bold; 
+                              margin: 0.5em 0 0 -0.3em; }
+
+/* Syntax Highlighting for Source Code
+ *   - doctest examples are displayed in a 'pre.py-doctest' block.
+ *     If the example is in a details table entry, then it will use
+ *     the colors specified by the 'table pre.py-doctest' line.
+ *   - Source code listings are displayed in a 'pre.py-src' block.
+ *     Each line is marked with 'span.py-line' (used to draw a line
+ *     down the left margin, separating the code from the line
+ *     numbers).  Line numbers are displayed with 'span.py-lineno'.
+ *     The expand/collapse block toggle button is displayed with
+ *     'a.py-toggle' (Note: the CSS style for 'a.py-toggle' should not
+ *     modify the font size of the text.)
+ *   - If a source code page is opened with an anchor, then the
+ *     corresponding code block will be highlighted.  The code
+ *     block's header is highlighted with 'py-highlight-hdr'; and
+ *     the code block's body is highlighted with 'py-highlight'.
+ *   - The remaining py-* classes are used to perform syntax
+ *     highlighting (py-string for string literals, py-name for names,
+ *     etc.)
+ */
+pre.py-doctest              { padding: .5em; margin: 1em;
+                              background: #e8f0f8; color: #000000;
+                              border: 1px solid #708890; }
+table pre.py-doctest        { background: #dce4ec;
+                              color: #000000; }
+pre.py-src                  { border: 2px solid #000000; 
+                              background: #f0f0f0; color: #000000; }
+.py-line                    { border-left: 2px solid #000000; 
+                              margin-left: .2em; padding-left: .4em; }
+.py-lineno                  { font-style: italic; font-size: 90%;
+                              padding-left: .5em; }
+a.py-toggle                 { text-decoration: none; }
+div.py-highlight-hdr        { border-top: 2px solid #000000;
+                              border-bottom: 2px solid #000000;
+                              background: #d8e8e8; }
+div.py-highlight            { border-bottom: 2px solid #000000;
+                              background: #d0e0e0; }
+.py-prompt                  { color: #005050; font-weight: bold;}
+.py-more                    { color: #005050; font-weight: bold;}
+.py-string                  { color: #006030; }
+.py-comment                 { color: #003060; }
+.py-keyword                 { color: #600000; }
+.py-output                  { color: #404040; }
+.py-name                    { color: #000050; }
+.py-name:link               { color: #000050 !important; }
+.py-name:visited            { color: #000050 !important; }
+.py-number                  { color: #005000; }
+.py-defname                 { color: #000060; font-weight: bold; }
+.py-def-name                { color: #000060; font-weight: bold; }
+.py-base-class              { color: #000060; }
+.py-param                   { color: #000060; }
+.py-docstring               { color: #006030; }
+.py-decorator               { color: #804020; }
+/* Use this if you don't want links to names underlined: */
+/*a.py-name                   { text-decoration: none; }*/
+
+/* Graphs & Diagrams
+ *   - These CSS styles are used for graphs & diagrams generated using
+ *     Graphviz dot.  'img.graph-without-title' is used for bare
+ *     diagrams (to remove the border created by making the image
+ *     clickable).
+ */
+img.graph-without-title     { border: none; }
+img.graph-with-title        { border: 1px solid #000000; }
+span.graph-title            { font-weight: bold; }
+span.graph-caption          { }
+
+/* General-purpose classes
+ *   - 'p.indent-wrapped-lines' defines a paragraph whose first line
+ *     is not indented, but whose subsequent lines are.
+ *   - The 'nomargin-top' class is used to remove the top margin (e.g.
+ *     from lists).  The 'nomargin' class is used to remove both the
+ *     top and bottom margin (but not the left or right margin --
+ *     for lists, that would cause the bullets to disappear.)
+ */
+p.indent-wrapped-lines      { padding: 0 0 0 7em; text-indent: -7em; 
+                              margin: 0; }
+.nomargin-top               { margin-top: 0; }
+.nomargin                   { margin-top: 0; margin-bottom: 0; }
+
+/* HTML Log */
+div.log-block               { padding: 0; margin: .5em 0 .5em 0;
+                              background: #e8f0f8; color: #000000;
+                              border: 1px solid #000000; }
+div.log-error               { padding: .1em .3em .1em .3em; margin: 4px;
+                              background: #ffb0b0; color: #000000;
+                              border: 1px solid #000000; }
+div.log-warning             { padding: .1em .3em .1em .3em; margin: 4px;
+                              background: #ffffb0; color: #000000;
+                              border: 1px solid #000000; }
+div.log-info               { padding: .1em .3em .1em .3em; margin: 4px;
+                              background: #b0ffb0; color: #000000;
+                              border: 1px solid #000000; }
+h2.log-hdr                  { background: #70b0ff; color: #000000;
+                              margin: 0; padding: 0em 0.5em 0em 0.5em;
+                              border-bottom: 1px solid #000000; font-size: 110%; }
+p.log                       { font-weight: bold; margin: .5em 0 .5em 0; }
+tr.opt-changed              { color: #000000; font-weight: bold; }
+tr.opt-default              { color: #606060; }
+pre.log                     { margin: 0; padding: 0; padding-left: 1em; }
diff --git a/docs/epydoc.js b/docs/epydoc.js
new file mode 100644
index 0000000..e787dbc
--- /dev/null
+++ b/docs/epydoc.js
@@ -0,0 +1,293 @@
+function toggle_private() {
+        // Search for any private/public links on this page.  Store
+        // their old text in "cmd," so we will know what action to
+        // take; and change their text to the opposite action.
+        var cmd = "?";
+        var elts = document.getElementsByTagName("a");
+        for(var i=0; i<elts.length; i++) {
+          if (elts[i].className == "privatelink") {
+            cmd = elts[i].innerHTML;
+            elts[i].innerHTML = ((cmd && cmd.substr(0,4)=="show")?
+                                    "hide private":"show private");
+          }
+        }
+        // Update all DIVs containing private objects.
+        var elts = document.getElementsByTagName("div");
+        for(var i=0; i<elts.length; i++) {
+          if (elts[i].className == "private") {
+            elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block");
+          }
+          else if (elts[i].className == "public") {
+            elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"block":"none");
+          }
+        }
+        // Update all table rows containing private objects.  Note, we
+        // use "" instead of "block" becaue IE & firefox disagree on what
+        // this should be (block vs table-row), and "" just gives the
+        // default for both browsers.
+        var elts = document.getElementsByTagName("tr");
+        for(var i=0; i<elts.length; i++) {
+          if (elts[i].className == "private") {
+            elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"");
+          }
+        }
+        // Update all list items containing private objects.
+        var elts = document.getElementsByTagName("li");
+        for(var i=0; i<elts.length; i++) {
+          if (elts[i].className == "private") {
+            elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?
+                                        "none":"");
+          }
+        }
+        // Update all list items containing private objects.
+        var elts = document.getElementsByTagName("ul");
+        for(var i=0; i<elts.length; i++) {
+          if (elts[i].className == "private") {
+            elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block");
+          }
+        }
+        // Set a cookie to remember the current option.
+        document.cookie = "EpydocPrivate="+cmd;
+      }
+function show_private() {
+        var elts = document.getElementsByTagName("a");
+        for(var i=0; i<elts.length; i++) {
+          if (elts[i].className == "privatelink") {
+            cmd = elts[i].innerHTML;
+            if (cmd && cmd.substr(0,4)=="show")
+                toggle_private();
+          }
+        }
+      }
+function getCookie(name) {
+        var dc = document.cookie;
+        var prefix = name + "=";
+        var begin = dc.indexOf("; " + prefix);
+        if (begin == -1) {
+          begin = dc.indexOf(prefix);
+          if (begin != 0) return null;
+        } else
+        { begin += 2; }
+        var end = document.cookie.indexOf(";", begin);
+        if (end == -1)
+        { end = dc.length; }
+        return unescape(dc.substring(begin + prefix.length, end));
+      }
+function setFrame(url1, url2) {
+          parent.frames[1].location.href = url1;
+          parent.frames[2].location.href = url2;
+      }
+function checkCookie() {
+        var cmd=getCookie("EpydocPrivate");
+        if (cmd && cmd.substr(0,4)!="show" && location.href.indexOf("#_") < 0)
+            toggle_private();
+      }
+function toggleCallGraph(id) {
+        var elt = document.getElementById(id);
+        if (elt.style.display == "none")
+            elt.style.display = "block";
+        else
+            elt.style.display = "none";
+      }
+function expand(id) {
+  var elt = document.getElementById(id+"-expanded");
+  if (elt) elt.style.display = "block";
+  var elt = document.getElementById(id+"-expanded-linenums");
+  if (elt) elt.style.display = "block";
+  var elt = document.getElementById(id+"-collapsed");
+  if (elt) { elt.innerHTML = ""; elt.style.display = "none"; }
+  var elt = document.getElementById(id+"-collapsed-linenums");
+  if (elt) { elt.innerHTML = ""; elt.style.display = "none"; }
+  var elt = document.getElementById(id+"-toggle");
+  if (elt) { elt.innerHTML = "-"; }
+}
+
+function collapse(id) {
+  var elt = document.getElementById(id+"-expanded");
+  if (elt) elt.style.display = "none";
+  var elt = document.getElementById(id+"-expanded-linenums");
+  if (elt) elt.style.display = "none";
+  var elt = document.getElementById(id+"-collapsed-linenums");
+  if (elt) { elt.innerHTML = "<br />"; elt.style.display="block"; }
+  var elt = document.getElementById(id+"-toggle");
+  if (elt) { elt.innerHTML = "+"; }
+  var elt = document.getElementById(id+"-collapsed");
+  if (elt) {
+    elt.style.display = "block";
+    
+    var indent = elt.getAttribute("indent");
+    var pad = elt.getAttribute("pad");
+    var s = "<tt class='py-lineno'>";
+    for (var i=0; i<pad.length; i++) { s += " " }
+    s += "</tt>";
+    s += "  <tt class='py-line'>";
+    for (var i=0; i<indent.length; i++) { s += " " }
+    s += "<a href='#' onclick='expand(\"" + id;
+    s += "\");return false'>...</a></tt><br />";
+    elt.innerHTML = s;
+  }
+}
+
+function toggle(id) {
+  elt = document.getElementById(id+"-toggle");
+  if (elt.innerHTML == "-")
+      collapse(id); 
+  else
+      expand(id);
+  return false;
+}
+
+function highlight(id) {
+  var elt = document.getElementById(id+"-def");
+  if (elt) elt.className = "py-highlight-hdr";
+  var elt = document.getElementById(id+"-expanded");
+  if (elt) elt.className = "py-highlight";
+  var elt = document.getElementById(id+"-collapsed");
+  if (elt) elt.className = "py-highlight";
+}
+
+function num_lines(s) {
+  var n = 1;
+  var pos = s.indexOf("\n");
+  while ( pos > 0) {
+    n += 1;
+    pos = s.indexOf("\n", pos+1);
+  }
+  return n;
+}
+
+// Collapse all blocks that mave more than `min_lines` lines.
+function collapse_all(min_lines) {
+  var elts = document.getElementsByTagName("div");
+  for (var i=0; i<elts.length; i++) {
+    var elt = elts[i];
+    var split = elt.id.indexOf("-");
+    if (split > 0)
+      if (elt.id.substring(split, elt.id.length) == "-expanded")
+        if (num_lines(elt.innerHTML) > min_lines)
+          collapse(elt.id.substring(0, split));
+  }
+}
+
+function expandto(href) {
+  var start = href.indexOf("#")+1;
+  if (start != 0 && start != href.length) {
+    if (href.substring(start, href.length) != "-") {
+      collapse_all(4);
+      pos = href.indexOf(".", start);
+      while (pos != -1) {
+        var id = href.substring(start, pos);
+        expand(id);
+        pos = href.indexOf(".", pos+1);
+      }
+      var id = href.substring(start, href.length);
+      expand(id);
+      highlight(id);
+    }
+  }
+}
+
+function kill_doclink(id) {
+  var parent = document.getElementById(id);
+  parent.removeChild(parent.childNodes.item(0));
+}
+function auto_kill_doclink(ev) {
+  if (!ev) var ev = window.event;
+  if (!this.contains(ev.toElement)) {
+    var parent = document.getElementById(this.parentID);
+    parent.removeChild(parent.childNodes.item(0));
+  }
+}
+
+function doclink(id, name, targets_id) {
+  var elt = document.getElementById(id);
+
+  // If we already opened the box, then destroy it.
+  // (This case should never occur, but leave it in just in case.)
+  if (elt.childNodes.length > 1) {
+    elt.removeChild(elt.childNodes.item(0));
+  }
+  else {
+    // The outer box: relative + inline positioning.
+    var box1 = document.createElement("div");
+    box1.style.position = "relative";
+    box1.style.display = "inline";
+    box1.style.top = 0;
+    box1.style.left = 0;
+  
+    // A shadow for fun
+    var shadow = document.createElement("div");
+    shadow.style.position = "absolute";
+    shadow.style.left = "-1.3em";
+    shadow.style.top = "-1.3em";
+    shadow.style.background = "#404040";
+    
+    // The inner box: absolute positioning.
+    var box2 = document.createElement("div");
+    box2.style.position = "relative";
+    box2.style.border = "1px solid #a0a0a0";
+    box2.style.left = "-.2em";
+    box2.style.top = "-.2em";
+    box2.style.background = "white";
+    box2.style.padding = ".3em .4em .3em .4em";
+    box2.style.fontStyle = "normal";
+    box2.onmouseout=auto_kill_doclink;
+    box2.parentID = id;
+
+    // Get the targets
+    var targets_elt = document.getElementById(targets_id);
+    var targets = targets_elt.getAttribute("targets");
+    var links = "";
+    target_list = targets.split(",");
+    for (var i=0; i<target_list.length; i++) {
+        var target = target_list[i].split("=");
+        links += "<li><a href='" + target[1] + 
+               "' style='text-decoration:none'>" +
+               target[0] + "</a></li>";
+    }
+  
+    // Put it all together.
+    elt.insertBefore(box1, elt.childNodes.item(0));
+    //box1.appendChild(box2);
+    box1.appendChild(shadow);
+    shadow.appendChild(box2);
+    box2.innerHTML =
+        "Which <b>"+name+"</b> do you want to see documentation for?" +
+        "<ul style='margin-bottom: 0;'>" +
+        links + 
+        "<li><a href='#' style='text-decoration:none' " +
+        "onclick='kill_doclink(\""+id+"\");return false;'>"+
+        "<i>None of the above</i></a></li></ul>";
+  }
+  return false;
+}
+
+function get_anchor() {
+          var href = location.href;
+          var start = href.indexOf("#")+1;
+          if ((start != 0) && (start != href.length))
+              return href.substring(start, href.length);
+      }
+function redirect_url(dottedName) {
+          // Scan through each element of the "pages" list, and check
+          // if "name" matches with any of them.
+          for (var i=0; i<pages.length; i++) {
+
+              // Each page has the form "<pagename>-m" or "<pagename>-c";
+              // extract the <pagename> portion & compare it to dottedName.
+              var pagename = pages[i].substring(0, pages[i].length-2);
+              if (pagename == dottedName.substring(0,pagename.length)) {
+
+                  // We've found a page that matches `dottedName`;
+                  // construct its URL, using leftover `dottedName`
+                  // content to form an anchor.
+                  var pagetype = pages[i].charAt(pages[i].length-1);
+                  var url = pagename + ((pagetype=="m")?"-module.html":
+                                                        "-class.html");
+                  if (dottedName.length > pagename.length)
+                      url += "#" + dottedName.substring(pagename.length+1,
+                                                        dottedName.length);
+                  return url;
+              }
+          }
+      }
diff --git a/docs/help.html b/docs/help.html
new file mode 100644
index 0000000..7d380f1
--- /dev/null
+++ b/docs/help.html
@@ -0,0 +1,262 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>Help</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>   <a
+        href="pyproj-module.html">Home</a>   </th>
+
+  <!-- Tree link -->
+      <th>   <a
+        href="module-tree.html">Trees</a>   </th>
+
+  <!-- Index link -->
+      <th>   <a
+        href="identifier-index.html">Indices</a>   </th>
+
+  <!-- Help link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >   Help   </th>
+
+      <th class="navbar" width="100%"></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%"> </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+      </table>
+    </td>
+  </tr>
+</table>
+
+<h1 class="epydoc"> API Documentation </h1>
+
+<p> This document contains the API (Application Programming Interface)
+documentation for this project.  Documentation for the Python
+objects defined by the project is divided into separate pages for each
+package, module, and class.  The API documentation also includes two
+pages containing information about the project as a whole: a trees
+page, and an index page.  </p>
+
+<h2> Object Documentation </h2>
+
+  <p>Each <strong>Package Documentation</strong> page contains: </p>
+  <ul>
+    <li> A description of the package. </li>
+    <li> A list of the modules and sub-packages contained by the
+    package.  </li>
+    <li> A summary of the classes defined by the package. </li>
+    <li> A summary of the functions defined by the package. </li>
+    <li> A summary of the variables defined by the package. </li>
+    <li> A detailed description of each function defined by the
+    package. </li>
+    <li> A detailed description of each variable defined by the
+    package. </li>
+  </ul>
+  
+  <p>Each <strong>Module Documentation</strong> page contains:</p>
+  <ul>
+    <li> A description of the module. </li>
+    <li> A summary of the classes defined by the module. </li>
+    <li> A summary of the functions defined by the module. </li>
+    <li> A summary of the variables defined by the module. </li>
+    <li> A detailed description of each function defined by the
+    module. </li>
+    <li> A detailed description of each variable defined by the
+    module. </li>
+  </ul>
+  
+  <p>Each <strong>Class Documentation</strong> page contains: </p>
+  <ul>
+    <li> A class inheritance diagram. </li>
+    <li> A list of known subclasses. </li>
+    <li> A description of the class. </li>
+    <li> A summary of the methods defined by the class. </li>
+    <li> A summary of the instance variables defined by the class. </li>
+    <li> A summary of the class (static) variables defined by the
+    class. </li> 
+    <li> A detailed description of each method defined by the
+    class. </li>
+    <li> A detailed description of each instance variable defined by the
+    class. </li> 
+    <li> A detailed description of each class (static) variable defined
+    by the class. </li> 
+  </ul>
+
+<h2> Project Documentation </h2>
+
+  <p> The <strong>Trees</strong> page contains the module and class hierarchies: </p>
+  <ul>
+    <li> The <em>module hierarchy</em> lists every package and module, with
+    modules grouped into packages.  At the top level, and within each
+    package, modules and sub-packages are listed alphabetically. </li>
+    <li> The <em>class hierarchy</em> lists every class, grouped by base
+    class.  If a class has more than one base class, then it will be
+    listed under each base class.  At the top level, and under each base
+    class, classes are listed alphabetically. </li>
+  </ul>
+  
+  <p> The <strong>Index</strong> page contains indices of terms and
+  identifiers: </p>
+  <ul>
+    <li> The <em>term index</em> lists every term indexed by any object's
+    documentation.  For each term, the index provides links to each
+    place where the term is indexed. </li>
+    <li> The <em>identifier index</em> lists the (short) name of every package,
+    module, class, method, function, variable, and parameter.  For each
+    identifier, the index provides a short description, and a link to
+    its documentation. </li>
+  </ul>
+
+<h2> The Table of Contents </h2>
+
+<p> The table of contents occupies the two frames on the left side of
+the window.  The upper-left frame displays the <em>project
+contents</em>, and the lower-left frame displays the <em>module
+contents</em>: </p>
+
+<table class="help summary" border="1" cellspacing="0" cellpadding="3">
+  <tr style="height: 30%">
+    <td align="center" style="font-size: small">
+       Project<br />Contents<hr />...</td>
+    <td align="center" style="font-size: small" rowspan="2" width="70%">
+      API<br />Documentation<br />Frame<br /><br /><br />
+    </td>
+  </tr>
+  <tr>
+    <td align="center" style="font-size: small">
+      Module<br />Contents<hr /> <br />...<br /> 
+    </td>
+  </tr>
+</table><br />
+
+<p> The <strong>project contents frame</strong> contains a list of all packages
+and modules that are defined by the project.  Clicking on an entry
+will display its contents in the module contents frame.  Clicking on a
+special entry, labeled "Everything," will display the contents of
+the entire project. </p>
+
+<p> The <strong>module contents frame</strong> contains a list of every
+submodule, class, type, exception, function, and variable defined by a
+module or package.  Clicking on an entry will display its
+documentation in the API documentation frame.  Clicking on the name of
+the module, at the top of the frame, will display the documentation
+for the module itself. </p>
+
+<p> The "<strong>frames</strong>" and "<strong>no frames</strong>" buttons below the top
+navigation bar can be used to control whether the table of contents is
+displayed or not. </p>
+
+<h2> The Navigation Bar </h2>
+
+<p> A navigation bar is located at the top and bottom of every page.
+It indicates what type of page you are currently viewing, and allows
+you to go to related pages.  The following table describes the labels
+on the navigation bar.  Note that not some labels (such as
+[Parent]) are not displayed on all pages. </p>
+
+<table class="summary" border="1" cellspacing="0" cellpadding="3" width="100%">
+<tr class="summary">
+  <th>Label</th>
+  <th>Highlighted when...</th>
+  <th>Links to...</th>
+</tr>
+  <tr><td valign="top"><strong>[Parent]</strong></td>
+      <td valign="top"><em>(never highlighted)</em></td>
+      <td valign="top"> the parent of the current package </td></tr>
+  <tr><td valign="top"><strong>[Package]</strong></td>
+      <td valign="top">viewing a package</td>
+      <td valign="top">the package containing the current object
+      </td></tr>
+  <tr><td valign="top"><strong>[Module]</strong></td>
+      <td valign="top">viewing a module</td>
+      <td valign="top">the module containing the current object
+      </td></tr> 
+  <tr><td valign="top"><strong>[Class]</strong></td>
+      <td valign="top">viewing a class </td>
+      <td valign="top">the class containing the current object</td></tr>
+  <tr><td valign="top"><strong>[Trees]</strong></td>
+      <td valign="top">viewing the trees page</td>
+      <td valign="top"> the trees page </td></tr>
+  <tr><td valign="top"><strong>[Index]</strong></td>
+      <td valign="top">viewing the index page</td>
+      <td valign="top"> the index page </td></tr>
+  <tr><td valign="top"><strong>[Help]</strong></td>
+      <td valign="top">viewing the help page</td>
+      <td valign="top"> the help page </td></tr>
+</table>
+
+<p> The "<strong>show private</strong>" and "<strong>hide private</strong>" buttons below
+the top navigation bar can be used to control whether documentation
+for private objects is displayed.  Private objects are usually defined
+as objects whose (short) names begin with a single underscore, but do
+not end with an underscore.  For example, "<code>_x</code>",
+"<code>__pprint</code>", and "<code>epydoc.epytext._tokenize</code>"
+are private objects; but "<code>re.sub</code>",
+"<code>__init__</code>", and "<code>type_</code>" are not.  However,
+if a module defines the "<code>__all__</code>" variable, then its
+contents are used to decide which objects are private. </p>
+
+<p> A timestamp below the bottom navigation bar indicates when each
+page was last updated. </p>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>   <a
+        href="pyproj-module.html">Home</a>   </th>
+
+  <!-- Tree link -->
+      <th>   <a
+        href="module-tree.html">Trees</a>   </th>
+
+  <!-- Index link -->
+      <th>   <a
+        href="identifier-index.html">Indices</a>   </th>
+
+  <!-- Help link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >   Help   </th>
+
+      <th class="navbar" width="100%"></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Jan 11 09:07:23 2013
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/docs/identifier-index.html b/docs/identifier-index.html
new file mode 100644
index 0000000..b23ec0e
--- /dev/null
+++ b/docs/identifier-index.html
@@ -0,0 +1,228 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>Identifier Index</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>   <a
+        href="pyproj-module.html">Home</a>   </th>
+
+  <!-- Tree link -->
+      <th>   <a
+        href="module-tree.html">Trees</a>   </th>
+
+  <!-- Index link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >   Indices   </th>
+
+  <!-- Help link -->
+      <th>   <a
+        href="help.html">Help</a>   </th>
+
+      <th class="navbar" width="100%"></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%"> </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+      </table>
+    </td>
+  </tr>
+</table>
+<table border="0" width="100%">
+<tr valign="bottom"><td>
+<h1 class="epydoc">Identifier Index</h1>
+</td><td>
+[
+  A
+  B
+  C
+  D
+  E
+ <a href="#F">F</a>
+ <a href="#G">G</a>
+  H
+ <a href="#I">I</a>
+  J
+  K
+  L
+  M
+ <a href="#N">N</a>
+  O
+ <a href="#P">P</a>
+  Q
+  R
+  S
+ <a href="#T">T</a>
+  U
+  V
+  W
+  X
+  Y
+  Z
+ <a href="#_">_</a>
+]
+</td></table>
+<table border="0" width="100%">
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="F">F</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="pyproj.Geod-class.html#fwd">fwd()</a><br />
+<span class="index-where">(in <a href="pyproj.Geod-class.html">Geod</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="G">G</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="pyproj.Geod-class.html">Geod</a><br />
+<span class="index-where">(in <a href="pyproj-module.html">pyproj</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="I">I</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="pyproj.Geod-class.html#inv">inv()</a><br />
+<span class="index-where">(in <a href="pyproj.Geod-class.html">Geod</a>)</span></td>
+<td width="33%" class="link-index"><a href="pyproj.Proj-class.html#is_geocent">is_geocent()</a><br />
+<span class="index-where">(in <a href="pyproj.Proj-class.html">Proj</a>)</span></td>
+<td width="33%" class="link-index"><a href="pyproj.Proj-class.html#is_latlong">is_latlong()</a><br />
+<span class="index-where">(in <a href="pyproj.Proj-class.html">Proj</a>)</span></td>
+</tr>
+<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="N">N</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="pyproj.Geod-class.html#npts">npts()</a><br />
+<span class="index-where">(in <a href="pyproj.Geod-class.html">Geod</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="P">P</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="pyproj-module.html#pj_ellps">pj_ellps</a><br />
+<span class="index-where">(in <a href="pyproj-module.html">pyproj</a>)</span></td>
+<td width="33%" class="link-index"><a href="pyproj.Proj-class.html">Proj</a><br />
+<span class="index-where">(in <a href="pyproj-module.html">pyproj</a>)</span></td>
+<td width="33%" class="link-index"><a href="pyproj-module.html#pyproj_datadir">pyproj_datadir</a><br />
+<span class="index-where">(in <a href="pyproj-module.html">pyproj</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="pyproj-module.html#pj_list">pj_list</a><br />
+<span class="index-where">(in <a href="pyproj-module.html">pyproj</a>)</span></td>
+<td width="33%" class="link-index"><a href="pyproj-module.html">pyproj</a></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="T">T</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="pyproj-module.html#test">test()</a><br />
+<span class="index-where">(in <a href="pyproj-module.html">pyproj</a>)</span></td>
+<td width="33%" class="link-index"><a href="pyproj-module.html#transform">transform()</a><br />
+<span class="index-where">(in <a href="pyproj-module.html">pyproj</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr>
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="_">_</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
+<tr>
+<td width="33%" class="link-index"><a href="pyproj.Proj-class.html#__call__">__call__()</a><br />
+<span class="index-where">(in <a href="pyproj.Proj-class.html">Proj</a>)</span></td>
+<td width="33%" class="link-index"><a href="pyproj.Proj-class.html#__new__">__new__()</a><br />
+<span class="index-where">(in <a href="pyproj.Proj-class.html">Proj</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="pyproj.Geod-class.html#__new__">__new__()</a><br />
+<span class="index-where">(in <a href="pyproj.Geod-class.html">Geod</a>)</span></td>
+<td width="33%" class="link-index"><a href="pyproj-module.html#__package__">__package__</a><br />
+<span class="index-where">(in <a href="pyproj-module.html">pyproj</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+</table>
+</td></tr>
+</table>
+<br /><br /><!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>   <a
+        href="pyproj-module.html">Home</a>   </th>
+
+  <!-- Tree link -->
+      <th>   <a
+        href="module-tree.html">Trees</a>   </th>
+
+  <!-- Index link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >   Indices   </th>
+
+  <!-- Help link -->
+      <th>   <a
+        href="help.html">Help</a>   </th>
+
+      <th class="navbar" width="100%"></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Jan 11 09:07:23 2013
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/docs/index.html b/docs/index.html
new file mode 100644
index 0000000..f8d98fb
--- /dev/null
+++ b/docs/index.html
@@ -0,0 +1,440 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>pyproj</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >   Home   </th>
+
+  <!-- Tree link -->
+      <th>   <a
+        href="module-tree.html">Trees</a>   </th>
+
+  <!-- Index link -->
+      <th>   <a
+        href="identifier-index.html">Indices</a>   </th>
+
+  <!-- Help link -->
+      <th>   <a
+        href="help.html">Help</a>   </th>
+
+      <th class="navbar" width="100%"></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package pyproj
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== PACKAGE DESCRIPTION ==================== -->
+<h1 class="epydoc">Package pyproj</h1><p class="nomargin-top"><span class="codelink"><a href="pyproj-pysrc.html">source code</a></span></p>
+<p>Cython wrapper to provide python interfaces to PROJ.4 
+  (http://trac.osgeo.org/proj/) functions.</p>
+  <p>Performs cartographic transformations and geodetic computations.</p>
+  <p>The Proj class can convert from geographic (longitude,latitude) to 
+  native map projection (x,y) coordinates and vice versa, or from one map 
+  projection coordinate system directly to another. The module variable 
+  pj_list is a dictionary containing all the available projections and 
+  their descriptions.</p>
+  <p>The Geod class can perform forward and inverse geodetic, or Great 
+  Circle, computations.  The forward computation involves determining 
+  latitude, longitude and back azimuth of a terminus point given the 
+  latitude and longitude of an initial point, plus azimuth and distance. 
+  The inverse computation involves determining the forward and back 
+  azimuths and distance given the latitudes and longitudes of an initial 
+  and terminus point.</p>
+  <p>Input coordinates can be given as python arrays, lists/tuples, scalars
+  or numpy/Numeric/numarray arrays. Optimized for objects that support the 
+  Python buffer protocol (regular python and numpy array objects).</p>
+  <p>Download: http://code.google.com/p/pyproj/downloads/list</p>
+  <p>Requirements: python 2.4 or higher.</p>
+  <p>Example scripts are in 'test' subdirectory of source distribution. The
+  'test()' function will run the examples in the docstrings.</p>
+  <p>Contact:  Jeffrey Whitaker <jeffrey.s.whitaker at noaa.gov</p>
+  <p>copyright (c) 2006 by Jeffrey Whitaker.</p>
+  <p>Permission to use, copy, modify, and distribute this software and its 
+  documentation for any purpose and without fee is hereby granted, provided
+  that the above copyright notice appear in all copies and that both the 
+  copyright notice and this permission notice appear in supporting 
+  documentation. THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS 
+  SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+  FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT
+  OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+  USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 
+  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 
+  PERFORMANCE OF THIS SOFTWARE.</p>
+
+<hr />
+<div class="fields">      <p><strong>Version:</strong>
+        1.9.3
+      </p>
+</div><!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td align="left" colspan="2" class="table-header">
+    <span class="table-header">Classes</span></td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a href="pyproj.Geod-class.html" class="summary-name">Geod</a><br />
+      performs forward and inverse geodetic, or Great Circle, 
+        computations.
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a href="pyproj.Proj-class.html" class="summary-name">Proj</a><br />
+      performs cartographic transformations (converts from 
+        longitude,latitude to native map projection x,y coordinates and 
+        vice versa) using proj (http://trac.osgeo.org/proj/).
+    </td>
+  </tr>
+</table>
+<!-- ==================== FUNCTIONS ==================== -->
+<a name="section-Functions"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td align="left" colspan="2" class="table-header">
+    <span class="table-header">Functions</span></td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="test"></a><span class="summary-sig-name">test</span>()</span><br />
+      run the examples in the docstrings using the doctest module</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="pyproj-pysrc.html#test">source code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="pyproj-module.html#transform" class="summary-sig-name">transform</a>(<span class="summary-sig-arg">p1</span>,
+        <span class="summary-sig-arg">p2</span>,
+        <span class="summary-sig-arg">x</span>,
+        <span class="summary-sig-arg">y</span>,
+        <span class="summary-sig-arg">z</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">radians</span>=<span class="summary-sig-default">False</span>)</span><br />
+      x2, y2, z2 = transform(p1, p2, x1, y1, z1, radians=False)</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="pyproj-pysrc.html#transform">source code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td align="left" colspan="2" class="table-header">
+    <span class="table-header">Variables</span></td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="'pyproj'"><code class="variable-quote">'</code><code class="variable-string">pyproj</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a href="pyproj-module.html#pj_ellps" class="summary-name">pj_ellps</a> = <code title="{'APL4.9': {'a': 6378137.0,
+            'description': 'Appl. Physics. 1965',
+            'rf': 298.25},
+ 'CPM': {'a': 6375738.7,
+         'description': 'Comm. des Poids et Mesures 1799',
+         'rf': 334.29},
+ 'GRS67': {'a': 6378160.0,
+           'description': 'GRS 67(IUGG 1967)',
+..."><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">APL4.9</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">a</code><code class="variable-quote">'</code><code class="variable-op">: </code>6378137.0<code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">des [...]
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a href="pyproj-module.html#pj_list" class="summary-name">pj_list</a> = <code title="{'aea': 'Albers Equal Area',
+ 'aeqd': 'Azimuthal Equidistant',
+ 'airy': 'Airy',
+ 'aitoff': 'Aitoff',
+ 'alsk': 'Mod. Stererographics of Alaska',
+ 'apian': 'Apian Globular I',
+ 'august': 'August Epicycloidal',
+ 'bacon': 'Bacon Globular',
+..."><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">aea</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">Albers Equal Area</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">aeqd</code><code class="variable-quote">'</code><code class="variable-o [...]
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a href="pyproj-module.html#pyproj_datadir" class="summary-name">pyproj_datadir</a> = <code title="'/Users/jsw/Library/Python/2.7/lib/python/site-packages/pyproj/data'"><code class="variable-quote">'</code><code class="variable-string">/Users/jsw/Library/Python/2.7/lib/python/sit</code><code class="variable-ellipsis">...</code></code>
+    </td>
+  </tr>
+</table>
+<!-- ==================== FUNCTION DETAILS ==================== -->
+<a name="section-FunctionDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td align="left" colspan="2" class="table-header">
+    <span class="table-header">Function Details</span></td>
+</tr>
+</table>
+<a name="transform"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">transform</span>(<span class="sig-arg">p1</span>,
+        <span class="sig-arg">p2</span>,
+        <span class="sig-arg">x</span>,
+        <span class="sig-arg">y</span>,
+        <span class="sig-arg">z</span>=<span class="sig-default">None</span>,
+        <span class="sig-arg">radians</span>=<span class="sig-default">False</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="pyproj-pysrc.html#transform">source code</a></span> 
+    </td>
+  </tr></table>
+  
+  <p>x2, y2, z2 = transform(p1, p2, x1, y1, z1, radians=False)</p>
+  <p>Transform points between two coordinate systems defined by the Proj 
+  instances p1 and p2.</p>
+  <p>The points x1,y1,z1 in the coordinate system defined by p1 are 
+  transformed to x2,y2,z2 in the coordinate system defined by p2.</p>
+  <p>z1 is optional, if it is not set it is assumed to be zero (and only x2
+  and y2 are returned).</p>
+  <p>In addition to converting between cartographic and geographic 
+  projection coordinates, this function can take care of datum shifts 
+  (which cannot be done using the __call__ method of the Proj instances). 
+  It also allows for one of the coordinate systems to be geographic (proj =
+  'latlong').</p>
+  <p>If optional keyword 'radians' is True (default is False) and p1 is 
+  defined in geographic coordinate (pj.is_latlong() is True), x1,y1 is 
+  interpreted as radians instead of the default degrees. Similarly, if p2 
+  is defined in geographic coordinates and radians=True, x2, y2 are 
+  returned in radians instead of degrees. if p1.is_latlong() and 
+  p2.is_latlong() both are False, the radians keyword has no effect.</p>
+  <p>x,y and z can be numpy or regular python arrays, python lists/tuples 
+  or scalars. Arrays are fastest.  For projections in geocentric 
+  coordinates, values of x and y are given in meters. z is always 
+  meters.</p>
+  <p>Example usage:</p>
+<pre class="py-doctest">
+<span class="py-prompt">>>> </span><span class="py-comment"># projection 1: UTM zone 15, grs80 ellipse, NAD83 datum</span>
+<span class="py-prompt">>>> </span><span class="py-comment"># (defined by epsg code 26915)</span>
+<span class="py-prompt">>>> </span>p1 = Proj(init=<span class="py-string">'epsg:26915'</span>)
+<span class="py-prompt">>>> </span><span class="py-comment"># projection 2: UTM zone 15, clrk66 ellipse, NAD27 datum</span>
+<span class="py-prompt">>>> </span>p2 = Proj(init=<span class="py-string">'epsg:26715'</span>)
+<span class="py-prompt">>>> </span><span class="py-comment"># find x,y of Jefferson City, MO.</span>
+<span class="py-prompt">>>> </span>x1, y1 = p1(-92.199881,38.56694)
+<span class="py-prompt">>>> </span><span class="py-comment"># transform this point to projection 2 coordinates.</span>
+<span class="py-prompt">>>> </span>x2, y2 = transform(p1,p2,x1,y1)
+<span class="py-prompt">>>> </span><span class="py-string">'%9.3f %11.3f'</span> % (x1,y1)
+<span class="py-output">'569704.566 4269024.671'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span><span class="py-string">'%9.3f %11.3f'</span> % (x2,y2)
+<span class="py-output">'569722.342 4268814.027'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span><span class="py-string">'%8.3f %5.3f'</span> % p2(x2,y2,inverse=True)
+<span class="py-output">' -92.200 38.567'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span><span class="py-comment"># process 3 points at a time in a tuple</span>
+<span class="py-prompt">>>> </span>lats = (38.83,39.32,38.75) <span class="py-comment"># Columbia, KC and StL Missouri</span>
+<span class="py-prompt">>>> </span>lons = (-92.22,-94.72,-90.37)
+<span class="py-prompt">>>> </span>x1, y1 = p1(lons,lats)
+<span class="py-prompt">>>> </span>x2, y2 = transform(p1,p2,x1,y1)
+<span class="py-prompt">>>> </span>xy = x1+y1
+<span class="py-prompt">>>> </span><span class="py-string">'%9.3f %9.3f %9.3f %11.3f %11.3f %11.3f'</span> % xy
+<span class="py-output">'567703.344 351730.944 728553.093 4298200.739 4353698.725 4292319.005'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span>xy = x2+y2
+<span class="py-prompt">>>> </span><span class="py-string">'%9.3f %9.3f %9.3f %11.3f %11.3f %11.3f'</span> % xy
+<span class="py-output">'567721.149 351747.558 728569.133 4297989.112 4353489.644 4292106.305'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span>lons, lats = p2(x2,y2,inverse=True)
+<span class="py-prompt">>>> </span>xy = lons+lats
+<span class="py-prompt">>>> </span><span class="py-string">'%8.3f %8.3f %8.3f %5.3f %5.3f %5.3f'</span> % xy
+<span class="py-output">' -92.220  -94.720  -90.370 38.830 39.320 38.750'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span><span class="py-comment"># test datum shifting, installation of extra datum grid files.</span>
+<span class="py-prompt">>>> </span>p1 = Proj(proj=<span class="py-string">'latlong'</span>,datum=<span class="py-string">'WGS84'</span>)
+<span class="py-prompt">>>> </span>x1 = -111.5; y1 = 45.25919444444
+<span class="py-prompt">>>> </span>p2 = Proj(proj=<span class="py-string">"utm"</span>,zone=10,datum=<span class="py-string">'NAD27'</span>)
+<span class="py-prompt">>>> </span>x2, y2 = transform(p1, p2, x1, y1)
+<span class="py-prompt">>>> </span><span class="py-string">"%12.3f %12.3f"</span> % (x2,y2)
+<span class="py-output">' 1402285.991  5076292.423'</span></pre>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== VARIABLES DETAILS ==================== -->
+<a name="section-VariablesDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td align="left" colspan="2" class="table-header">
+    <span class="table-header">Variables Details</span></td>
+</tr>
+</table>
+<a name="pj_ellps"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <h3 class="epydoc">pj_ellps</h3>
+  
+  <dl class="fields">
+  </dl>
+  <dl class="fields">
+    <dt>Value:</dt>
+      <dd><table><tr><td><pre class="variable">
+<code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">APL4.9</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">a</code><code class="variable-quote">'</code><code class="variable-op">: </code>6378137.0<code class="variable-op">,</code>
+            <code class="variable-quote">'</code><code class="variable-string">description</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">Appl. Physics. 1965</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+            <code class="variable-quote">'</code><code class="variable-string">rf</code><code class="variable-quote">'</code><code class="variable-op">: </code>298.25<code class="variable-group">}</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">CPM</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">a</code><code class="variable-quote">'</code><code class="variable-op">: </code>6375738.7<code class="variable-op">,</code>
+         <code class="variable-quote">'</code><code class="variable-string">description</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">Comm. des Poids et Mesures 1799</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+         <code class="variable-quote">'</code><code class="variable-string">rf</code><code class="variable-quote">'</code><code class="variable-op">: </code>334.29<code class="variable-group">}</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">GRS67</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">a</code><code class="variable-quote">'</code><code class="variable-op">: </code>6378160.0<code class="variable-op">,</code>
+           <code class="variable-quote">'</code><code class="variable-string">description</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">GRS 67(IUGG 1967)</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+<code class="variable-ellipsis">...</code>
+</pre></td></tr></table>
+</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="pj_list"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <h3 class="epydoc">pj_list</h3>
+  
+  <dl class="fields">
+  </dl>
+  <dl class="fields">
+    <dt>Value:</dt>
+      <dd><table><tr><td><pre class="variable">
+<code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">aea</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">Albers Equal Area</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">aeqd</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">Azimuthal Equidistant</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">airy</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">Airy</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">aitoff</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">Aitoff</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">alsk</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">Mod. Stererographics of Alaska</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">apian</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">Apian Globular I</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">august</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">August Epicycloidal</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">bacon</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">Bacon Globular</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+<code class="variable-ellipsis">...</code>
+</pre></td></tr></table>
+</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="pyproj_datadir"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <h3 class="epydoc">pyproj_datadir</h3>
+  
+  <dl class="fields">
+  </dl>
+  <dl class="fields">
+    <dt>Value:</dt>
+      <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">/Users/jsw/Library/Python/2.7/lib/python/site-packages/pyproj/data</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+  </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >   Home   </th>
+
+  <!-- Tree link -->
+      <th>   <a
+        href="module-tree.html">Trees</a>   </th>
+
+  <!-- Index link -->
+      <th>   <a
+        href="identifier-index.html">Indices</a>   </th>
+
+  <!-- Help link -->
+      <th>   <a
+        href="help.html">Help</a>   </th>
+
+      <th class="navbar" width="100%"></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Jan 11 09:07:23 2013
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/docs/module-tree.html b/docs/module-tree.html
new file mode 100644
index 0000000..2141c6b
--- /dev/null
+++ b/docs/module-tree.html
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>Module Hierarchy</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>   <a
+        href="pyproj-module.html">Home</a>   </th>
+
+  <!-- Tree link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >   Trees   </th>
+
+  <!-- Index link -->
+      <th>   <a
+        href="identifier-index.html">Indices</a>   </th>
+
+  <!-- Help link -->
+      <th>   <a
+        href="help.html">Help</a>   </th>
+
+      <th class="navbar" width="100%"></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%"> </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+      </table>
+    </td>
+  </tr>
+</table>
+<center><b>
+ [ <a href="module-tree.html">Module Hierarchy</a>
+ | <a href="class-tree.html">Class Hierarchy</a> ]
+</b></center><br />
+<h1 class="epydoc">Module Hierarchy</h1>
+<ul class="nomargin-top">
+    <li> <strong class="uidlink"><a href="pyproj-module.html">pyproj</a></strong>: <em class="summary">Cython wrapper to provide python interfaces to PROJ.4 
+        (http://trac.osgeo.org/proj/) functions.</em>    </li>
+</ul>
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>   <a
+        href="pyproj-module.html">Home</a>   </th>
+
+  <!-- Tree link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >   Trees   </th>
+
+  <!-- Index link -->
+      <th>   <a
+        href="identifier-index.html">Indices</a>   </th>
+
+  <!-- Help link -->
+      <th>   <a
+        href="help.html">Help</a>   </th>
+
+      <th class="navbar" width="100%"></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Jan 11 09:07:23 2013
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/docs/pyproj-module.html b/docs/pyproj-module.html
new file mode 100644
index 0000000..f8d98fb
--- /dev/null
+++ b/docs/pyproj-module.html
@@ -0,0 +1,440 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>pyproj</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >   Home   </th>
+
+  <!-- Tree link -->
+      <th>   <a
+        href="module-tree.html">Trees</a>   </th>
+
+  <!-- Index link -->
+      <th>   <a
+        href="identifier-index.html">Indices</a>   </th>
+
+  <!-- Help link -->
+      <th>   <a
+        href="help.html">Help</a>   </th>
+
+      <th class="navbar" width="100%"></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package pyproj
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== PACKAGE DESCRIPTION ==================== -->
+<h1 class="epydoc">Package pyproj</h1><p class="nomargin-top"><span class="codelink"><a href="pyproj-pysrc.html">source code</a></span></p>
+<p>Cython wrapper to provide python interfaces to PROJ.4 
+  (http://trac.osgeo.org/proj/) functions.</p>
+  <p>Performs cartographic transformations and geodetic computations.</p>
+  <p>The Proj class can convert from geographic (longitude,latitude) to 
+  native map projection (x,y) coordinates and vice versa, or from one map 
+  projection coordinate system directly to another. The module variable 
+  pj_list is a dictionary containing all the available projections and 
+  their descriptions.</p>
+  <p>The Geod class can perform forward and inverse geodetic, or Great 
+  Circle, computations.  The forward computation involves determining 
+  latitude, longitude and back azimuth of a terminus point given the 
+  latitude and longitude of an initial point, plus azimuth and distance. 
+  The inverse computation involves determining the forward and back 
+  azimuths and distance given the latitudes and longitudes of an initial 
+  and terminus point.</p>
+  <p>Input coordinates can be given as python arrays, lists/tuples, scalars
+  or numpy/Numeric/numarray arrays. Optimized for objects that support the 
+  Python buffer protocol (regular python and numpy array objects).</p>
+  <p>Download: http://code.google.com/p/pyproj/downloads/list</p>
+  <p>Requirements: python 2.4 or higher.</p>
+  <p>Example scripts are in 'test' subdirectory of source distribution. The
+  'test()' function will run the examples in the docstrings.</p>
+  <p>Contact:  Jeffrey Whitaker <jeffrey.s.whitaker at noaa.gov</p>
+  <p>copyright (c) 2006 by Jeffrey Whitaker.</p>
+  <p>Permission to use, copy, modify, and distribute this software and its 
+  documentation for any purpose and without fee is hereby granted, provided
+  that the above copyright notice appear in all copies and that both the 
+  copyright notice and this permission notice appear in supporting 
+  documentation. THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS 
+  SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+  FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT
+  OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+  USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 
+  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 
+  PERFORMANCE OF THIS SOFTWARE.</p>
+
+<hr />
+<div class="fields">      <p><strong>Version:</strong>
+        1.9.3
+      </p>
+</div><!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td align="left" colspan="2" class="table-header">
+    <span class="table-header">Classes</span></td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a href="pyproj.Geod-class.html" class="summary-name">Geod</a><br />
+      performs forward and inverse geodetic, or Great Circle, 
+        computations.
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a href="pyproj.Proj-class.html" class="summary-name">Proj</a><br />
+      performs cartographic transformations (converts from 
+        longitude,latitude to native map projection x,y coordinates and 
+        vice versa) using proj (http://trac.osgeo.org/proj/).
+    </td>
+  </tr>
+</table>
+<!-- ==================== FUNCTIONS ==================== -->
+<a name="section-Functions"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td align="left" colspan="2" class="table-header">
+    <span class="table-header">Functions</span></td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="test"></a><span class="summary-sig-name">test</span>()</span><br />
+      run the examples in the docstrings using the doctest module</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="pyproj-pysrc.html#test">source code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="pyproj-module.html#transform" class="summary-sig-name">transform</a>(<span class="summary-sig-arg">p1</span>,
+        <span class="summary-sig-arg">p2</span>,
+        <span class="summary-sig-arg">x</span>,
+        <span class="summary-sig-arg">y</span>,
+        <span class="summary-sig-arg">z</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">radians</span>=<span class="summary-sig-default">False</span>)</span><br />
+      x2, y2, z2 = transform(p1, p2, x1, y1, z1, radians=False)</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="pyproj-pysrc.html#transform">source code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td align="left" colspan="2" class="table-header">
+    <span class="table-header">Variables</span></td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="'pyproj'"><code class="variable-quote">'</code><code class="variable-string">pyproj</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a href="pyproj-module.html#pj_ellps" class="summary-name">pj_ellps</a> = <code title="{'APL4.9': {'a': 6378137.0,
+            'description': 'Appl. Physics. 1965',
+            'rf': 298.25},
+ 'CPM': {'a': 6375738.7,
+         'description': 'Comm. des Poids et Mesures 1799',
+         'rf': 334.29},
+ 'GRS67': {'a': 6378160.0,
+           'description': 'GRS 67(IUGG 1967)',
+..."><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">APL4.9</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">a</code><code class="variable-quote">'</code><code class="variable-op">: </code>6378137.0<code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">des [...]
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a href="pyproj-module.html#pj_list" class="summary-name">pj_list</a> = <code title="{'aea': 'Albers Equal Area',
+ 'aeqd': 'Azimuthal Equidistant',
+ 'airy': 'Airy',
+ 'aitoff': 'Aitoff',
+ 'alsk': 'Mod. Stererographics of Alaska',
+ 'apian': 'Apian Globular I',
+ 'august': 'August Epicycloidal',
+ 'bacon': 'Bacon Globular',
+..."><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">aea</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">Albers Equal Area</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">aeqd</code><code class="variable-quote">'</code><code class="variable-o [...]
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a href="pyproj-module.html#pyproj_datadir" class="summary-name">pyproj_datadir</a> = <code title="'/Users/jsw/Library/Python/2.7/lib/python/site-packages/pyproj/data'"><code class="variable-quote">'</code><code class="variable-string">/Users/jsw/Library/Python/2.7/lib/python/sit</code><code class="variable-ellipsis">...</code></code>
+    </td>
+  </tr>
+</table>
+<!-- ==================== FUNCTION DETAILS ==================== -->
+<a name="section-FunctionDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td align="left" colspan="2" class="table-header">
+    <span class="table-header">Function Details</span></td>
+</tr>
+</table>
+<a name="transform"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">transform</span>(<span class="sig-arg">p1</span>,
+        <span class="sig-arg">p2</span>,
+        <span class="sig-arg">x</span>,
+        <span class="sig-arg">y</span>,
+        <span class="sig-arg">z</span>=<span class="sig-default">None</span>,
+        <span class="sig-arg">radians</span>=<span class="sig-default">False</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="pyproj-pysrc.html#transform">source code</a></span> 
+    </td>
+  </tr></table>
+  
+  <p>x2, y2, z2 = transform(p1, p2, x1, y1, z1, radians=False)</p>
+  <p>Transform points between two coordinate systems defined by the Proj 
+  instances p1 and p2.</p>
+  <p>The points x1,y1,z1 in the coordinate system defined by p1 are 
+  transformed to x2,y2,z2 in the coordinate system defined by p2.</p>
+  <p>z1 is optional, if it is not set it is assumed to be zero (and only x2
+  and y2 are returned).</p>
+  <p>In addition to converting between cartographic and geographic 
+  projection coordinates, this function can take care of datum shifts 
+  (which cannot be done using the __call__ method of the Proj instances). 
+  It also allows for one of the coordinate systems to be geographic (proj =
+  'latlong').</p>
+  <p>If optional keyword 'radians' is True (default is False) and p1 is 
+  defined in geographic coordinate (pj.is_latlong() is True), x1,y1 is 
+  interpreted as radians instead of the default degrees. Similarly, if p2 
+  is defined in geographic coordinates and radians=True, x2, y2 are 
+  returned in radians instead of degrees. if p1.is_latlong() and 
+  p2.is_latlong() both are False, the radians keyword has no effect.</p>
+  <p>x,y and z can be numpy or regular python arrays, python lists/tuples 
+  or scalars. Arrays are fastest.  For projections in geocentric 
+  coordinates, values of x and y are given in meters. z is always 
+  meters.</p>
+  <p>Example usage:</p>
+<pre class="py-doctest">
+<span class="py-prompt">>>> </span><span class="py-comment"># projection 1: UTM zone 15, grs80 ellipse, NAD83 datum</span>
+<span class="py-prompt">>>> </span><span class="py-comment"># (defined by epsg code 26915)</span>
+<span class="py-prompt">>>> </span>p1 = Proj(init=<span class="py-string">'epsg:26915'</span>)
+<span class="py-prompt">>>> </span><span class="py-comment"># projection 2: UTM zone 15, clrk66 ellipse, NAD27 datum</span>
+<span class="py-prompt">>>> </span>p2 = Proj(init=<span class="py-string">'epsg:26715'</span>)
+<span class="py-prompt">>>> </span><span class="py-comment"># find x,y of Jefferson City, MO.</span>
+<span class="py-prompt">>>> </span>x1, y1 = p1(-92.199881,38.56694)
+<span class="py-prompt">>>> </span><span class="py-comment"># transform this point to projection 2 coordinates.</span>
+<span class="py-prompt">>>> </span>x2, y2 = transform(p1,p2,x1,y1)
+<span class="py-prompt">>>> </span><span class="py-string">'%9.3f %11.3f'</span> % (x1,y1)
+<span class="py-output">'569704.566 4269024.671'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span><span class="py-string">'%9.3f %11.3f'</span> % (x2,y2)
+<span class="py-output">'569722.342 4268814.027'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span><span class="py-string">'%8.3f %5.3f'</span> % p2(x2,y2,inverse=True)
+<span class="py-output">' -92.200 38.567'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span><span class="py-comment"># process 3 points at a time in a tuple</span>
+<span class="py-prompt">>>> </span>lats = (38.83,39.32,38.75) <span class="py-comment"># Columbia, KC and StL Missouri</span>
+<span class="py-prompt">>>> </span>lons = (-92.22,-94.72,-90.37)
+<span class="py-prompt">>>> </span>x1, y1 = p1(lons,lats)
+<span class="py-prompt">>>> </span>x2, y2 = transform(p1,p2,x1,y1)
+<span class="py-prompt">>>> </span>xy = x1+y1
+<span class="py-prompt">>>> </span><span class="py-string">'%9.3f %9.3f %9.3f %11.3f %11.3f %11.3f'</span> % xy
+<span class="py-output">'567703.344 351730.944 728553.093 4298200.739 4353698.725 4292319.005'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span>xy = x2+y2
+<span class="py-prompt">>>> </span><span class="py-string">'%9.3f %9.3f %9.3f %11.3f %11.3f %11.3f'</span> % xy
+<span class="py-output">'567721.149 351747.558 728569.133 4297989.112 4353489.644 4292106.305'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span>lons, lats = p2(x2,y2,inverse=True)
+<span class="py-prompt">>>> </span>xy = lons+lats
+<span class="py-prompt">>>> </span><span class="py-string">'%8.3f %8.3f %8.3f %5.3f %5.3f %5.3f'</span> % xy
+<span class="py-output">' -92.220  -94.720  -90.370 38.830 39.320 38.750'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span><span class="py-comment"># test datum shifting, installation of extra datum grid files.</span>
+<span class="py-prompt">>>> </span>p1 = Proj(proj=<span class="py-string">'latlong'</span>,datum=<span class="py-string">'WGS84'</span>)
+<span class="py-prompt">>>> </span>x1 = -111.5; y1 = 45.25919444444
+<span class="py-prompt">>>> </span>p2 = Proj(proj=<span class="py-string">"utm"</span>,zone=10,datum=<span class="py-string">'NAD27'</span>)
+<span class="py-prompt">>>> </span>x2, y2 = transform(p1, p2, x1, y1)
+<span class="py-prompt">>>> </span><span class="py-string">"%12.3f %12.3f"</span> % (x2,y2)
+<span class="py-output">' 1402285.991  5076292.423'</span></pre>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== VARIABLES DETAILS ==================== -->
+<a name="section-VariablesDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td align="left" colspan="2" class="table-header">
+    <span class="table-header">Variables Details</span></td>
+</tr>
+</table>
+<a name="pj_ellps"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <h3 class="epydoc">pj_ellps</h3>
+  
+  <dl class="fields">
+  </dl>
+  <dl class="fields">
+    <dt>Value:</dt>
+      <dd><table><tr><td><pre class="variable">
+<code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">APL4.9</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">a</code><code class="variable-quote">'</code><code class="variable-op">: </code>6378137.0<code class="variable-op">,</code>
+            <code class="variable-quote">'</code><code class="variable-string">description</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">Appl. Physics. 1965</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+            <code class="variable-quote">'</code><code class="variable-string">rf</code><code class="variable-quote">'</code><code class="variable-op">: </code>298.25<code class="variable-group">}</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">CPM</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">a</code><code class="variable-quote">'</code><code class="variable-op">: </code>6375738.7<code class="variable-op">,</code>
+         <code class="variable-quote">'</code><code class="variable-string">description</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">Comm. des Poids et Mesures 1799</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+         <code class="variable-quote">'</code><code class="variable-string">rf</code><code class="variable-quote">'</code><code class="variable-op">: </code>334.29<code class="variable-group">}</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">GRS67</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">a</code><code class="variable-quote">'</code><code class="variable-op">: </code>6378160.0<code class="variable-op">,</code>
+           <code class="variable-quote">'</code><code class="variable-string">description</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">GRS 67(IUGG 1967)</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+<code class="variable-ellipsis">...</code>
+</pre></td></tr></table>
+</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="pj_list"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <h3 class="epydoc">pj_list</h3>
+  
+  <dl class="fields">
+  </dl>
+  <dl class="fields">
+    <dt>Value:</dt>
+      <dd><table><tr><td><pre class="variable">
+<code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">aea</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">Albers Equal Area</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">aeqd</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">Azimuthal Equidistant</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">airy</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">Airy</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">aitoff</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">Aitoff</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">alsk</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">Mod. Stererographics of Alaska</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">apian</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">Apian Globular I</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">august</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">August Epicycloidal</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">bacon</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">Bacon Globular</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+<code class="variable-ellipsis">...</code>
+</pre></td></tr></table>
+</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="pyproj_datadir"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <h3 class="epydoc">pyproj_datadir</h3>
+  
+  <dl class="fields">
+  </dl>
+  <dl class="fields">
+    <dt>Value:</dt>
+      <dd><table><tr><td><pre class="variable">
+<code class="variable-quote">'</code><code class="variable-string">/Users/jsw/Library/Python/2.7/lib/python/site-packages/pyproj/data</code><code class="variable-quote">'</code>
+</pre></td></tr></table>
+</dd>
+  </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >   Home   </th>
+
+  <!-- Tree link -->
+      <th>   <a
+        href="module-tree.html">Trees</a>   </th>
+
+  <!-- Index link -->
+      <th>   <a
+        href="identifier-index.html">Indices</a>   </th>
+
+  <!-- Help link -->
+      <th>   <a
+        href="help.html">Help</a>   </th>
+
+      <th class="navbar" width="100%"></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Jan 11 09:07:23 2013
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/docs/pyproj-pysrc.html b/docs/pyproj-pysrc.html
new file mode 100644
index 0000000..3792e3d
--- /dev/null
+++ b/docs/pyproj-pysrc.html
@@ -0,0 +1,969 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>pyproj</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >   Home   </th>
+
+  <!-- Tree link -->
+      <th>   <a
+        href="module-tree.html">Trees</a>   </th>
+
+  <!-- Index link -->
+      <th>   <a
+        href="identifier-index.html">Indices</a>   </th>
+
+  <!-- Help link -->
+      <th>   <a
+        href="help.html">Help</a>   </th>
+
+      <th class="navbar" width="100%"></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        Package pyproj
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+      </table>
+    </td>
+  </tr>
+</table>
+<h1 class="epydoc">Source Code for <a href="pyproj-module.html">Package pyproj</a></h1>
+<pre class="py-src">
+<a name="L1"></a><tt class="py-lineno">  1</tt>  <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
+<a name="L2"></a><tt class="py-lineno">  2</tt>  <tt class="py-line"><tt class="py-docstring">Cython wrapper to provide python interfaces to</tt> </tt>
+<a name="L3"></a><tt class="py-lineno">  3</tt>  <tt class="py-line"><tt class="py-docstring">PROJ.4 (http://trac.osgeo.org/proj/) functions.</tt> </tt>
+<a name="L4"></a><tt class="py-lineno">  4</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L5"></a><tt class="py-lineno">  5</tt>  <tt class="py-line"><tt class="py-docstring">Performs cartographic transformations and geodetic computations.</tt> </tt>
+<a name="L6"></a><tt class="py-lineno">  6</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L7"></a><tt class="py-lineno">  7</tt>  <tt class="py-line"><tt class="py-docstring">The Proj class can convert from geographic (longitude,latitude)</tt> </tt>
+<a name="L8"></a><tt class="py-lineno">  8</tt>  <tt class="py-line"><tt class="py-docstring">to native map projection (x,y) coordinates and vice versa, or</tt> </tt>
+<a name="L9"></a><tt class="py-lineno">  9</tt>  <tt class="py-line"><tt class="py-docstring">from one map projection coordinate system directly to another.</tt> </tt>
+<a name="L10"></a><tt class="py-lineno"> 10</tt>  <tt class="py-line"><tt class="py-docstring">The module variable pj_list is a dictionary containing all the</tt> </tt>
+<a name="L11"></a><tt class="py-lineno"> 11</tt>  <tt class="py-line"><tt class="py-docstring">available projections and their descriptions.</tt> </tt>
+<a name="L12"></a><tt class="py-lineno"> 12</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L13"></a><tt class="py-lineno"> 13</tt>  <tt class="py-line"><tt class="py-docstring">The Geod class can perform forward and inverse geodetic, or</tt> </tt>
+<a name="L14"></a><tt class="py-lineno"> 14</tt>  <tt class="py-line"><tt class="py-docstring">Great Circle, computations.  The forward computation involves</tt> </tt>
+<a name="L15"></a><tt class="py-lineno"> 15</tt>  <tt class="py-line"><tt class="py-docstring">determining latitude, longitude and back azimuth of a terminus</tt> </tt>
+<a name="L16"></a><tt class="py-lineno"> 16</tt>  <tt class="py-line"><tt class="py-docstring">point given the latitude and longitude of an initial point, plus</tt> </tt>
+<a name="L17"></a><tt class="py-lineno"> 17</tt>  <tt class="py-line"><tt class="py-docstring">azimuth and distance. The inverse computation involves</tt> </tt>
+<a name="L18"></a><tt class="py-lineno"> 18</tt>  <tt class="py-line"><tt class="py-docstring">determining the forward and back azimuths and distance given the</tt> </tt>
+<a name="L19"></a><tt class="py-lineno"> 19</tt>  <tt class="py-line"><tt class="py-docstring">latitudes and longitudes of an initial and terminus point.</tt> </tt>
+<a name="L20"></a><tt class="py-lineno"> 20</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L21"></a><tt class="py-lineno"> 21</tt>  <tt class="py-line"><tt class="py-docstring">Input coordinates can be given as python arrays, lists/tuples,</tt> </tt>
+<a name="L22"></a><tt class="py-lineno"> 22</tt>  <tt class="py-line"><tt class="py-docstring">scalars or numpy/Numeric/numarray arrays. Optimized for objects</tt> </tt>
+<a name="L23"></a><tt class="py-lineno"> 23</tt>  <tt class="py-line"><tt class="py-docstring">that support the Python buffer protocol (regular python and</tt> </tt>
+<a name="L24"></a><tt class="py-lineno"> 24</tt>  <tt class="py-line"><tt class="py-docstring">numpy array objects).</tt> </tt>
+<a name="L25"></a><tt class="py-lineno"> 25</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L26"></a><tt class="py-lineno"> 26</tt>  <tt class="py-line"><tt class="py-docstring">Download: http://code.google.com/p/pyproj/downloads/list</tt> </tt>
+<a name="L27"></a><tt class="py-lineno"> 27</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L28"></a><tt class="py-lineno"> 28</tt>  <tt class="py-line"><tt class="py-docstring">Requirements: python 2.4 or higher.</tt> </tt>
+<a name="L29"></a><tt class="py-lineno"> 29</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L30"></a><tt class="py-lineno"> 30</tt>  <tt class="py-line"><tt class="py-docstring">Example scripts are in 'test' subdirectory of source distribution.</tt> </tt>
+<a name="L31"></a><tt class="py-lineno"> 31</tt>  <tt class="py-line"><tt class="py-docstring">The 'test()' function will run the examples in the docstrings.</tt> </tt>
+<a name="L32"></a><tt class="py-lineno"> 32</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L33"></a><tt class="py-lineno"> 33</tt>  <tt class="py-line"><tt class="py-docstring">Contact:  Jeffrey Whitaker <jeffrey.s.whitaker at noaa.gov</tt> </tt>
+<a name="L34"></a><tt class="py-lineno"> 34</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L35"></a><tt class="py-lineno"> 35</tt>  <tt class="py-line"><tt class="py-docstring">copyright (c) 2006 by Jeffrey Whitaker.</tt> </tt>
+<a name="L36"></a><tt class="py-lineno"> 36</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L37"></a><tt class="py-lineno"> 37</tt>  <tt class="py-line"><tt class="py-docstring">Permission to use, copy, modify, and distribute this software</tt> </tt>
+<a name="L38"></a><tt class="py-lineno"> 38</tt>  <tt class="py-line"><tt class="py-docstring">and its documentation for any purpose and without fee is hereby</tt> </tt>
+<a name="L39"></a><tt class="py-lineno"> 39</tt>  <tt class="py-line"><tt class="py-docstring">granted, provided that the above copyright notice appear in all</tt> </tt>
+<a name="L40"></a><tt class="py-lineno"> 40</tt>  <tt class="py-line"><tt class="py-docstring">copies and that both the copyright notice and this permission</tt> </tt>
+<a name="L41"></a><tt class="py-lineno"> 41</tt>  <tt class="py-line"><tt class="py-docstring">notice appear in supporting documentation. THE AUTHOR DISCLAIMS</tt> </tt>
+<a name="L42"></a><tt class="py-lineno"> 42</tt>  <tt class="py-line"><tt class="py-docstring">ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL</tt> </tt>
+<a name="L43"></a><tt class="py-lineno"> 43</tt>  <tt class="py-line"><tt class="py-docstring">IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT</tt> </tt>
+<a name="L44"></a><tt class="py-lineno"> 44</tt>  <tt class="py-line"><tt class="py-docstring">SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR</tt> </tt>
+<a name="L45"></a><tt class="py-lineno"> 45</tt>  <tt class="py-line"><tt class="py-docstring">CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM</tt> </tt>
+<a name="L46"></a><tt class="py-lineno"> 46</tt>  <tt class="py-line"><tt class="py-docstring">LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,</tt> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt>  <tt class="py-line"><tt class="py-docstring">NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN</tt> </tt>
+<a name="L48"></a><tt class="py-lineno"> 48</tt>  <tt class="py-line"><tt class="py-docstring">CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. """</tt> </tt>
+<a name="L49"></a><tt class="py-lineno"> 49</tt>  <tt class="py-line"> </tt>
+<a name="L50"></a><tt class="py-lineno"> 50</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Package pyproj=pyproj-module.html"><a title="pyproj" class="py-name" href="#" onclick="return doclink('link-0', 'pyproj', 'link-0');">pyproj</a></tt> <tt class="py-keyword">import</tt> <tt class="py-name">_proj</tt> </tt>
+<a name="L51"></a><tt class="py-lineno"> 51</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-1" class="py-name"><a title="pyproj" class="py-name" href="#" onclick="return doclink('link-1', 'pyproj', 'link-0');">pyproj</a></tt><tt class="py-op">.</tt><tt class="py-name">datadir</tt> <tt class="py-keyword">import</tt> <tt id="link-2" class="py-name" targets="Variable pyproj.pyproj_datadir=pyproj-module.html#pyproj_datadir"><a title="pyproj.pyproj_datadir" class="py-n [...]
+<a name="L52"></a><tt class="py-lineno"> 52</tt>  <tt class="py-line"><tt class="py-name">__version__</tt> <tt class="py-op">=</tt>  <tt class="py-name">_proj</tt><tt class="py-op">.</tt><tt class="py-name">__version__</tt> </tt>
+<a name="L53"></a><tt class="py-lineno"> 53</tt>  <tt class="py-line"><tt class="py-name">set_datapath</tt> <tt class="py-op">=</tt>  <tt class="py-name">_proj</tt><tt class="py-op">.</tt><tt class="py-name">set_datapath</tt> </tt>
+<a name="L54"></a><tt class="py-lineno"> 54</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">array</tt> <tt class="py-keyword">import</tt> <tt class="py-name">array</tt> </tt>
+<a name="L55"></a><tt class="py-lineno"> 55</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt><tt class="py-op">,</tt> <tt class="py-name">math</tt> </tt>
+<a name="L56"></a><tt class="py-lineno"> 56</tt>  <tt class="py-line"><tt class="py-comment">#import numpy as np</tt> </tt>
+<a name="L57"></a><tt class="py-lineno"> 57</tt>  <tt class="py-line"><tt id="link-3" class="py-name" targets="Variable pyproj.pj_list=pyproj-module.html#pj_list"><a title="pyproj.pj_list" class="py-name" href="#" onclick="return doclink('link-3', 'pj_list', 'link-3');">pj_list</a></tt><tt class="py-op">=</tt><tt class="py-op">{</tt> </tt>
+<a name="L58"></a><tt class="py-lineno"> 58</tt>  <tt class="py-line"><tt class="py-string">'aea'</tt><tt class="py-op">:</tt> <tt class="py-string">"Albers Equal Area"</tt><tt class="py-op">,</tt> </tt>
+<a name="L59"></a><tt class="py-lineno"> 59</tt>  <tt class="py-line"><tt class="py-string">'aeqd'</tt><tt class="py-op">:</tt> <tt class="py-string">"Azimuthal Equidistant"</tt><tt class="py-op">,</tt> </tt>
+<a name="L60"></a><tt class="py-lineno"> 60</tt>  <tt class="py-line"><tt class="py-string">'airy'</tt><tt class="py-op">:</tt> <tt class="py-string">"Airy"</tt><tt class="py-op">,</tt> </tt>
+<a name="L61"></a><tt class="py-lineno"> 61</tt>  <tt class="py-line"><tt class="py-string">'aitoff'</tt><tt class="py-op">:</tt> <tt class="py-string">"Aitoff"</tt><tt class="py-op">,</tt> </tt>
+<a name="L62"></a><tt class="py-lineno"> 62</tt>  <tt class="py-line"><tt class="py-string">'alsk'</tt><tt class="py-op">:</tt> <tt class="py-string">"Mod. Stererographics of Alaska"</tt><tt class="py-op">,</tt> </tt>
+<a name="L63"></a><tt class="py-lineno"> 63</tt>  <tt class="py-line"><tt class="py-string">'apian'</tt><tt class="py-op">:</tt> <tt class="py-string">"Apian Globular I"</tt><tt class="py-op">,</tt> </tt>
+<a name="L64"></a><tt class="py-lineno"> 64</tt>  <tt class="py-line"><tt class="py-string">'august'</tt><tt class="py-op">:</tt> <tt class="py-string">"August Epicycloidal"</tt><tt class="py-op">,</tt> </tt>
+<a name="L65"></a><tt class="py-lineno"> 65</tt>  <tt class="py-line"><tt class="py-string">'bacon'</tt><tt class="py-op">:</tt> <tt class="py-string">"Bacon Globular"</tt><tt class="py-op">,</tt> </tt>
+<a name="L66"></a><tt class="py-lineno"> 66</tt>  <tt class="py-line"><tt class="py-string">'bipc'</tt><tt class="py-op">:</tt> <tt class="py-string">"Bipolar conic of western hemisphere"</tt><tt class="py-op">,</tt> </tt>
+<a name="L67"></a><tt class="py-lineno"> 67</tt>  <tt class="py-line"><tt class="py-string">'boggs'</tt><tt class="py-op">:</tt> <tt class="py-string">"Boggs Eumorphic"</tt><tt class="py-op">,</tt> </tt>
+<a name="L68"></a><tt class="py-lineno"> 68</tt>  <tt class="py-line"><tt class="py-string">'bonne'</tt><tt class="py-op">:</tt> <tt class="py-string">"Bonne (Werner lat_1=90)"</tt><tt class="py-op">,</tt> </tt>
+<a name="L69"></a><tt class="py-lineno"> 69</tt>  <tt class="py-line"><tt class="py-string">'cass'</tt><tt class="py-op">:</tt> <tt class="py-string">"Cassini"</tt><tt class="py-op">,</tt> </tt>
+<a name="L70"></a><tt class="py-lineno"> 70</tt>  <tt class="py-line"><tt class="py-string">'cc'</tt><tt class="py-op">:</tt> <tt class="py-string">"Central Cylindrical"</tt><tt class="py-op">,</tt> </tt>
+<a name="L71"></a><tt class="py-lineno"> 71</tt>  <tt class="py-line"><tt class="py-string">'cea'</tt><tt class="py-op">:</tt> <tt class="py-string">"Equal Area Cylindrical"</tt><tt class="py-op">,</tt> </tt>
+<a name="L72"></a><tt class="py-lineno"> 72</tt>  <tt class="py-line"><tt class="py-string">'chamb'</tt><tt class="py-op">:</tt> <tt class="py-string">"Chamberlin Trimetric"</tt><tt class="py-op">,</tt> </tt>
+<a name="L73"></a><tt class="py-lineno"> 73</tt>  <tt class="py-line"><tt class="py-string">'collg'</tt><tt class="py-op">:</tt> <tt class="py-string">"Collignon"</tt><tt class="py-op">,</tt> </tt>
+<a name="L74"></a><tt class="py-lineno"> 74</tt>  <tt class="py-line"><tt class="py-string">'crast'</tt><tt class="py-op">:</tt> <tt class="py-string">"Craster Parabolic (Putnins P4)"</tt><tt class="py-op">,</tt> </tt>
+<a name="L75"></a><tt class="py-lineno"> 75</tt>  <tt class="py-line"><tt class="py-string">'denoy'</tt><tt class="py-op">:</tt> <tt class="py-string">"Denoyer Semi-Elliptical"</tt><tt class="py-op">,</tt> </tt>
+<a name="L76"></a><tt class="py-lineno"> 76</tt>  <tt class="py-line"><tt class="py-string">'eck1'</tt><tt class="py-op">:</tt> <tt class="py-string">"Eckert I"</tt><tt class="py-op">,</tt> </tt>
+<a name="L77"></a><tt class="py-lineno"> 77</tt>  <tt class="py-line"><tt class="py-string">'eck2'</tt><tt class="py-op">:</tt> <tt class="py-string">"Eckert II"</tt><tt class="py-op">,</tt> </tt>
+<a name="L78"></a><tt class="py-lineno"> 78</tt>  <tt class="py-line"><tt class="py-string">'eck3'</tt><tt class="py-op">:</tt> <tt class="py-string">"Eckert III"</tt><tt class="py-op">,</tt> </tt>
+<a name="L79"></a><tt class="py-lineno"> 79</tt>  <tt class="py-line"><tt class="py-string">'eck4'</tt><tt class="py-op">:</tt> <tt class="py-string">"Eckert IV"</tt><tt class="py-op">,</tt> </tt>
+<a name="L80"></a><tt class="py-lineno"> 80</tt>  <tt class="py-line"><tt class="py-string">'eck5'</tt><tt class="py-op">:</tt> <tt class="py-string">"Eckert V"</tt><tt class="py-op">,</tt> </tt>
+<a name="L81"></a><tt class="py-lineno"> 81</tt>  <tt class="py-line"><tt class="py-string">'eck6'</tt><tt class="py-op">:</tt> <tt class="py-string">"Eckert VI"</tt><tt class="py-op">,</tt> </tt>
+<a name="L82"></a><tt class="py-lineno"> 82</tt>  <tt class="py-line"><tt class="py-string">'eqc'</tt><tt class="py-op">:</tt> <tt class="py-string">"Equidistant Cylindrical (Plate Caree)"</tt><tt class="py-op">,</tt> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt>  <tt class="py-line"><tt class="py-string">'eqdc'</tt><tt class="py-op">:</tt> <tt class="py-string">"Equidistant Conic"</tt><tt class="py-op">,</tt> </tt>
+<a name="L84"></a><tt class="py-lineno"> 84</tt>  <tt class="py-line"><tt class="py-string">'etmerc'</tt><tt class="py-op">:</tt> <tt class="py-string">"Extended Transverse Mercator"</tt> <tt class="py-op">,</tt> </tt>
+<a name="L85"></a><tt class="py-lineno"> 85</tt>  <tt class="py-line"><tt class="py-string">'euler'</tt><tt class="py-op">:</tt> <tt class="py-string">"Euler"</tt><tt class="py-op">,</tt> </tt>
+<a name="L86"></a><tt class="py-lineno"> 86</tt>  <tt class="py-line"><tt class="py-string">'fahey'</tt><tt class="py-op">:</tt> <tt class="py-string">"Fahey"</tt><tt class="py-op">,</tt> </tt>
+<a name="L87"></a><tt class="py-lineno"> 87</tt>  <tt class="py-line"><tt class="py-string">'fouc'</tt><tt class="py-op">:</tt> <tt class="py-string">"Foucaut"</tt><tt class="py-op">,</tt> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt>  <tt class="py-line"><tt class="py-string">'fouc_s'</tt><tt class="py-op">:</tt> <tt class="py-string">"Foucaut Sinusoidal"</tt><tt class="py-op">,</tt> </tt>
+<a name="L89"></a><tt class="py-lineno"> 89</tt>  <tt class="py-line"><tt class="py-string">'gall'</tt><tt class="py-op">:</tt> <tt class="py-string">"Gall (Gall Stereographic)"</tt><tt class="py-op">,</tt> </tt>
+<a name="L90"></a><tt class="py-lineno"> 90</tt>  <tt class="py-line"><tt class="py-string">'geocent'</tt><tt class="py-op">:</tt> <tt class="py-string">"Geocentric"</tt><tt class="py-op">,</tt> </tt>
+<a name="L91"></a><tt class="py-lineno"> 91</tt>  <tt class="py-line"><tt class="py-string">'geos'</tt><tt class="py-op">:</tt> <tt class="py-string">"Geostationary Satellite View"</tt><tt class="py-op">,</tt> </tt>
+<a name="L92"></a><tt class="py-lineno"> 92</tt>  <tt class="py-line"><tt class="py-string">'gins8'</tt><tt class="py-op">:</tt> <tt class="py-string">"Ginsburg VIII (TsNIIGAiK)"</tt><tt class="py-op">,</tt> </tt>
+<a name="L93"></a><tt class="py-lineno"> 93</tt>  <tt class="py-line"><tt class="py-string">'gn_sinu'</tt><tt class="py-op">:</tt> <tt class="py-string">"General Sinusoidal Series"</tt><tt class="py-op">,</tt> </tt>
+<a name="L94"></a><tt class="py-lineno"> 94</tt>  <tt class="py-line"><tt class="py-string">'gnom'</tt><tt class="py-op">:</tt> <tt class="py-string">"Gnomonic"</tt><tt class="py-op">,</tt> </tt>
+<a name="L95"></a><tt class="py-lineno"> 95</tt>  <tt class="py-line"><tt class="py-string">'goode'</tt><tt class="py-op">:</tt> <tt class="py-string">"Goode Homolosine"</tt><tt class="py-op">,</tt> </tt>
+<a name="L96"></a><tt class="py-lineno"> 96</tt>  <tt class="py-line"><tt class="py-string">'gs48'</tt><tt class="py-op">:</tt> <tt class="py-string">"Mod. Stererographics of 48 U.S."</tt><tt class="py-op">,</tt> </tt>
+<a name="L97"></a><tt class="py-lineno"> 97</tt>  <tt class="py-line"><tt class="py-string">'gs50'</tt><tt class="py-op">:</tt> <tt class="py-string">"Mod. Stererographics of 50 U.S."</tt><tt class="py-op">,</tt> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt>  <tt class="py-line"><tt class="py-string">'hammer'</tt><tt class="py-op">:</tt> <tt class="py-string">"Hammer & Eckert-Greifendorff"</tt><tt class="py-op">,</tt> </tt>
+<a name="L99"></a><tt class="py-lineno"> 99</tt>  <tt class="py-line"><tt class="py-string">'hatano'</tt><tt class="py-op">:</tt> <tt class="py-string">"Hatano Asymmetrical Equal Area"</tt><tt class="py-op">,</tt> </tt>
+<a name="L100"></a><tt class="py-lineno">100</tt>  <tt class="py-line"><tt class="py-string">'healpix'</tt><tt class="py-op">:</tt> <tt class="py-string">"HEALPix"</tt><tt class="py-op">,</tt> </tt>
+<a name="L101"></a><tt class="py-lineno">101</tt>  <tt class="py-line"><tt class="py-string">'rhealpix'</tt><tt class="py-op">:</tt> <tt class="py-string">"rHEALPix"</tt><tt class="py-op">,</tt> </tt>
+<a name="L102"></a><tt class="py-lineno">102</tt>  <tt class="py-line"><tt class="py-string">'igh'</tt><tt class="py-op">:</tt>  <tt class="py-string">"Interrupted Goode Homolosine"</tt><tt class="py-op">,</tt> </tt>
+<a name="L103"></a><tt class="py-lineno">103</tt>  <tt class="py-line"><tt class="py-string">'imw_p'</tt><tt class="py-op">:</tt> <tt class="py-string">"Internation Map of the World Polyconic"</tt><tt class="py-op">,</tt> </tt>
+<a name="L104"></a><tt class="py-lineno">104</tt>  <tt class="py-line"><tt class="py-string">'isea'</tt><tt class="py-op">:</tt>  <tt class="py-string">"Icosahedral Snyder Equal Area"</tt><tt class="py-op">,</tt> </tt>
+<a name="L105"></a><tt class="py-lineno">105</tt>  <tt class="py-line"><tt class="py-string">'kav5'</tt><tt class="py-op">:</tt> <tt class="py-string">"Kavraisky V"</tt><tt class="py-op">,</tt> </tt>
+<a name="L106"></a><tt class="py-lineno">106</tt>  <tt class="py-line"><tt class="py-string">'kav7'</tt><tt class="py-op">:</tt> <tt class="py-string">"Kavraisky VII"</tt><tt class="py-op">,</tt> </tt>
+<a name="L107"></a><tt class="py-lineno">107</tt>  <tt class="py-line"><tt class="py-string">'krovak'</tt><tt class="py-op">:</tt> <tt class="py-string">"Krovak"</tt><tt class="py-op">,</tt> </tt>
+<a name="L108"></a><tt class="py-lineno">108</tt>  <tt class="py-line"><tt class="py-string">'labrd'</tt><tt class="py-op">:</tt> <tt class="py-string">"Laborde"</tt><tt class="py-op">,</tt> </tt>
+<a name="L109"></a><tt class="py-lineno">109</tt>  <tt class="py-line"><tt class="py-string">'laea'</tt><tt class="py-op">:</tt> <tt class="py-string">"Lambert Azimuthal Equal Area"</tt><tt class="py-op">,</tt> </tt>
+<a name="L110"></a><tt class="py-lineno">110</tt>  <tt class="py-line"><tt class="py-string">'lagrng'</tt><tt class="py-op">:</tt> <tt class="py-string">"Lagrange"</tt><tt class="py-op">,</tt> </tt>
+<a name="L111"></a><tt class="py-lineno">111</tt>  <tt class="py-line"><tt class="py-string">'larr'</tt><tt class="py-op">:</tt> <tt class="py-string">"Larrivee"</tt><tt class="py-op">,</tt> </tt>
+<a name="L112"></a><tt class="py-lineno">112</tt>  <tt class="py-line"><tt class="py-string">'lask'</tt><tt class="py-op">:</tt> <tt class="py-string">"Laskowski"</tt><tt class="py-op">,</tt> </tt>
+<a name="L113"></a><tt class="py-lineno">113</tt>  <tt class="py-line"><tt class="py-string">'lonlat'</tt><tt class="py-op">:</tt> <tt class="py-string">"Lat/long (Geodetic)"</tt><tt class="py-op">,</tt> </tt>
+<a name="L114"></a><tt class="py-lineno">114</tt>  <tt class="py-line"><tt class="py-string">'latlon'</tt><tt class="py-op">:</tt> <tt class="py-string">"Lat/long (Geodetic alias)"</tt><tt class="py-op">,</tt> </tt>
+<a name="L115"></a><tt class="py-lineno">115</tt>  <tt class="py-line"><tt class="py-string">'latlong'</tt><tt class="py-op">:</tt> <tt class="py-string">"Lat/long (Geodetic alias)"</tt><tt class="py-op">,</tt> </tt>
+<a name="L116"></a><tt class="py-lineno">116</tt>  <tt class="py-line"><tt class="py-string">'longlat'</tt><tt class="py-op">:</tt> <tt class="py-string">"Lat/long (Geodetic alias)"</tt><tt class="py-op">,</tt> </tt>
+<a name="L117"></a><tt class="py-lineno">117</tt>  <tt class="py-line"><tt class="py-string">'lcc'</tt><tt class="py-op">:</tt> <tt class="py-string">"Lambert Conformal Conic"</tt><tt class="py-op">,</tt> </tt>
+<a name="L118"></a><tt class="py-lineno">118</tt>  <tt class="py-line"><tt class="py-string">'lcca'</tt><tt class="py-op">:</tt> <tt class="py-string">"Lambert Conformal Conic Alternative"</tt><tt class="py-op">,</tt> </tt>
+<a name="L119"></a><tt class="py-lineno">119</tt>  <tt class="py-line"><tt class="py-string">'leac'</tt><tt class="py-op">:</tt> <tt class="py-string">"Lambert Equal Area Conic"</tt><tt class="py-op">,</tt> </tt>
+<a name="L120"></a><tt class="py-lineno">120</tt>  <tt class="py-line"><tt class="py-string">'lee_os'</tt><tt class="py-op">:</tt> <tt class="py-string">"Lee Oblated Stereographic"</tt><tt class="py-op">,</tt> </tt>
+<a name="L121"></a><tt class="py-lineno">121</tt>  <tt class="py-line"><tt class="py-string">'loxim'</tt><tt class="py-op">:</tt> <tt class="py-string">"Loximuthal"</tt><tt class="py-op">,</tt> </tt>
+<a name="L122"></a><tt class="py-lineno">122</tt>  <tt class="py-line"><tt class="py-string">'lsat'</tt><tt class="py-op">:</tt> <tt class="py-string">"Space oblique for LANDSAT"</tt><tt class="py-op">,</tt> </tt>
+<a name="L123"></a><tt class="py-lineno">123</tt>  <tt class="py-line"><tt class="py-string">'mbt_s'</tt><tt class="py-op">:</tt> <tt class="py-string">"McBryde-Thomas Flat-Polar Sine"</tt><tt class="py-op">,</tt> </tt>
+<a name="L124"></a><tt class="py-lineno">124</tt>  <tt class="py-line"><tt class="py-string">'mbt_fps'</tt><tt class="py-op">:</tt> <tt class="py-string">"McBryde-Thomas Flat-Pole Sine (No. 2)"</tt><tt class="py-op">,</tt> </tt>
+<a name="L125"></a><tt class="py-lineno">125</tt>  <tt class="py-line"><tt class="py-string">'mbtfpp'</tt><tt class="py-op">:</tt> <tt class="py-string">"McBride-Thomas Flat-Polar Parabolic"</tt><tt class="py-op">,</tt> </tt>
+<a name="L126"></a><tt class="py-lineno">126</tt>  <tt class="py-line"><tt class="py-string">'mbtfpq'</tt><tt class="py-op">:</tt> <tt class="py-string">"McBryde-Thomas Flat-Polar Quartic"</tt><tt class="py-op">,</tt> </tt>
+<a name="L127"></a><tt class="py-lineno">127</tt>  <tt class="py-line"><tt class="py-string">'mbtfps'</tt><tt class="py-op">:</tt> <tt class="py-string">"McBryde-Thomas Flat-Polar Sinusoidal"</tt><tt class="py-op">,</tt> </tt>
+<a name="L128"></a><tt class="py-lineno">128</tt>  <tt class="py-line"><tt class="py-string">'merc'</tt><tt class="py-op">:</tt> <tt class="py-string">"Mercator"</tt><tt class="py-op">,</tt> </tt>
+<a name="L129"></a><tt class="py-lineno">129</tt>  <tt class="py-line"><tt class="py-string">'mil_os'</tt><tt class="py-op">:</tt> <tt class="py-string">"Miller Oblated Stereographic"</tt><tt class="py-op">,</tt> </tt>
+<a name="L130"></a><tt class="py-lineno">130</tt>  <tt class="py-line"><tt class="py-string">'mill'</tt><tt class="py-op">:</tt> <tt class="py-string">"Miller Cylindrical"</tt><tt class="py-op">,</tt> </tt>
+<a name="L131"></a><tt class="py-lineno">131</tt>  <tt class="py-line"><tt class="py-string">'moll'</tt><tt class="py-op">:</tt> <tt class="py-string">"Mollweide"</tt><tt class="py-op">,</tt> </tt>
+<a name="L132"></a><tt class="py-lineno">132</tt>  <tt class="py-line"><tt class="py-string">'murd1'</tt><tt class="py-op">:</tt> <tt class="py-string">"Murdoch I"</tt><tt class="py-op">,</tt> </tt>
+<a name="L133"></a><tt class="py-lineno">133</tt>  <tt class="py-line"><tt class="py-string">'murd2'</tt><tt class="py-op">:</tt> <tt class="py-string">"Murdoch II"</tt><tt class="py-op">,</tt> </tt>
+<a name="L134"></a><tt class="py-lineno">134</tt>  <tt class="py-line"><tt class="py-string">'murd3'</tt><tt class="py-op">:</tt> <tt class="py-string">"Murdoch III"</tt><tt class="py-op">,</tt> </tt>
+<a name="L135"></a><tt class="py-lineno">135</tt>  <tt class="py-line"><tt class="py-string">'natearth'</tt><tt class="py-op">:</tt> <tt class="py-string">"Natural Earth"</tt><tt class="py-op">,</tt> </tt>
+<a name="L136"></a><tt class="py-lineno">136</tt>  <tt class="py-line"><tt class="py-string">'nell'</tt><tt class="py-op">:</tt> <tt class="py-string">"Nell"</tt><tt class="py-op">,</tt> </tt>
+<a name="L137"></a><tt class="py-lineno">137</tt>  <tt class="py-line"><tt class="py-string">'nell_h'</tt><tt class="py-op">:</tt> <tt class="py-string">"Nell-Hammer"</tt><tt class="py-op">,</tt> </tt>
+<a name="L138"></a><tt class="py-lineno">138</tt>  <tt class="py-line"><tt class="py-string">'nicol'</tt><tt class="py-op">:</tt> <tt class="py-string">"Nicolosi Globular"</tt><tt class="py-op">,</tt> </tt>
+<a name="L139"></a><tt class="py-lineno">139</tt>  <tt class="py-line"><tt class="py-string">'nsper'</tt><tt class="py-op">:</tt> <tt class="py-string">"Near-sided perspective"</tt><tt class="py-op">,</tt> </tt>
+<a name="L140"></a><tt class="py-lineno">140</tt>  <tt class="py-line"><tt class="py-string">'nzmg'</tt><tt class="py-op">:</tt> <tt class="py-string">"New Zealand Map Grid"</tt><tt class="py-op">,</tt> </tt>
+<a name="L141"></a><tt class="py-lineno">141</tt>  <tt class="py-line"><tt class="py-string">'ob_tran'</tt><tt class="py-op">:</tt> <tt class="py-string">"General Oblique Transformation"</tt><tt class="py-op">,</tt> </tt>
+<a name="L142"></a><tt class="py-lineno">142</tt>  <tt class="py-line"><tt class="py-string">'ocea'</tt><tt class="py-op">:</tt> <tt class="py-string">"Oblique Cylindrical Equal Area"</tt><tt class="py-op">,</tt> </tt>
+<a name="L143"></a><tt class="py-lineno">143</tt>  <tt class="py-line"><tt class="py-string">'oea'</tt><tt class="py-op">:</tt> <tt class="py-string">"Oblated Equal Area"</tt><tt class="py-op">,</tt> </tt>
+<a name="L144"></a><tt class="py-lineno">144</tt>  <tt class="py-line"><tt class="py-string">'omerc'</tt><tt class="py-op">:</tt> <tt class="py-string">"Oblique Mercator"</tt><tt class="py-op">,</tt> </tt>
+<a name="L145"></a><tt class="py-lineno">145</tt>  <tt class="py-line"><tt class="py-string">'ortel'</tt><tt class="py-op">:</tt> <tt class="py-string">"Ortelius Oval"</tt><tt class="py-op">,</tt> </tt>
+<a name="L146"></a><tt class="py-lineno">146</tt>  <tt class="py-line"><tt class="py-string">'ortho'</tt><tt class="py-op">:</tt> <tt class="py-string">"Orthographic"</tt><tt class="py-op">,</tt> </tt>
+<a name="L147"></a><tt class="py-lineno">147</tt>  <tt class="py-line"><tt class="py-string">'pconic'</tt><tt class="py-op">:</tt> <tt class="py-string">"Perspective Conic"</tt><tt class="py-op">,</tt> </tt>
+<a name="L148"></a><tt class="py-lineno">148</tt>  <tt class="py-line"><tt class="py-string">'poly'</tt><tt class="py-op">:</tt> <tt class="py-string">"Polyconic (American)"</tt><tt class="py-op">,</tt> </tt>
+<a name="L149"></a><tt class="py-lineno">149</tt>  <tt class="py-line"><tt class="py-string">'putp1'</tt><tt class="py-op">:</tt> <tt class="py-string">"Putnins P1"</tt><tt class="py-op">,</tt> </tt>
+<a name="L150"></a><tt class="py-lineno">150</tt>  <tt class="py-line"><tt class="py-string">'putp2'</tt><tt class="py-op">:</tt> <tt class="py-string">"Putnins P2"</tt><tt class="py-op">,</tt> </tt>
+<a name="L151"></a><tt class="py-lineno">151</tt>  <tt class="py-line"><tt class="py-string">'putp3'</tt><tt class="py-op">:</tt> <tt class="py-string">"Putnins P3"</tt><tt class="py-op">,</tt> </tt>
+<a name="L152"></a><tt class="py-lineno">152</tt>  <tt class="py-line"><tt class="py-string">'putp3p'</tt><tt class="py-op">:</tt> <tt class="py-string">"Putnins P3'"</tt><tt class="py-op">,</tt> </tt>
+<a name="L153"></a><tt class="py-lineno">153</tt>  <tt class="py-line"><tt class="py-string">'putp4p'</tt><tt class="py-op">:</tt> <tt class="py-string">"Putnins P4'"</tt><tt class="py-op">,</tt> </tt>
+<a name="L154"></a><tt class="py-lineno">154</tt>  <tt class="py-line"><tt class="py-string">'putp5'</tt><tt class="py-op">:</tt> <tt class="py-string">"Putnins P5"</tt><tt class="py-op">,</tt> </tt>
+<a name="L155"></a><tt class="py-lineno">155</tt>  <tt class="py-line"><tt class="py-string">'putp5p'</tt><tt class="py-op">:</tt> <tt class="py-string">"Putnins P5'"</tt><tt class="py-op">,</tt> </tt>
+<a name="L156"></a><tt class="py-lineno">156</tt>  <tt class="py-line"><tt class="py-string">'putp6'</tt><tt class="py-op">:</tt> <tt class="py-string">"Putnins P6"</tt><tt class="py-op">,</tt> </tt>
+<a name="L157"></a><tt class="py-lineno">157</tt>  <tt class="py-line"><tt class="py-string">'putp6p'</tt><tt class="py-op">:</tt> <tt class="py-string">"Putnins P6'"</tt><tt class="py-op">,</tt> </tt>
+<a name="L158"></a><tt class="py-lineno">158</tt>  <tt class="py-line"><tt class="py-string">'qua_aut'</tt><tt class="py-op">:</tt> <tt class="py-string">"Quartic Authalic"</tt><tt class="py-op">,</tt> </tt>
+<a name="L159"></a><tt class="py-lineno">159</tt>  <tt class="py-line"><tt class="py-string">'robin'</tt><tt class="py-op">:</tt> <tt class="py-string">"Robinson"</tt><tt class="py-op">,</tt> </tt>
+<a name="L160"></a><tt class="py-lineno">160</tt>  <tt class="py-line"><tt class="py-string">'rouss'</tt><tt class="py-op">:</tt> <tt class="py-string">"Roussilhe Stereographic"</tt><tt class="py-op">,</tt> </tt>
+<a name="L161"></a><tt class="py-lineno">161</tt>  <tt class="py-line"><tt class="py-string">'rpoly'</tt><tt class="py-op">:</tt> <tt class="py-string">"Rectangular Polyconic"</tt><tt class="py-op">,</tt> </tt>
+<a name="L162"></a><tt class="py-lineno">162</tt>  <tt class="py-line"><tt class="py-string">'sinu'</tt><tt class="py-op">:</tt> <tt class="py-string">"Sinusoidal (Sanson-Flamsteed)"</tt><tt class="py-op">,</tt> </tt>
+<a name="L163"></a><tt class="py-lineno">163</tt>  <tt class="py-line"><tt class="py-string">'somerc'</tt><tt class="py-op">:</tt> <tt class="py-string">"Swiss. Obl. Mercator"</tt><tt class="py-op">,</tt> </tt>
+<a name="L164"></a><tt class="py-lineno">164</tt>  <tt class="py-line"><tt class="py-string">'stere'</tt><tt class="py-op">:</tt> <tt class="py-string">"Stereographic"</tt><tt class="py-op">,</tt> </tt>
+<a name="L165"></a><tt class="py-lineno">165</tt>  <tt class="py-line"><tt class="py-string">'sterea'</tt><tt class="py-op">:</tt> <tt class="py-string">"Oblique Stereographic Alternative"</tt><tt class="py-op">,</tt> </tt>
+<a name="L166"></a><tt class="py-lineno">166</tt>  <tt class="py-line"><tt class="py-string">'gstmerc'</tt><tt class="py-op">:</tt> <tt class="py-string">"Gauss-Schreiber Transverse Mercator (aka Gauss-Laborde Reunion)"</tt><tt class="py-op">,</tt> </tt>
+<a name="L167"></a><tt class="py-lineno">167</tt>  <tt class="py-line"><tt class="py-string">'tcc'</tt><tt class="py-op">:</tt> <tt class="py-string">"Transverse Central Cylindrical"</tt><tt class="py-op">,</tt> </tt>
+<a name="L168"></a><tt class="py-lineno">168</tt>  <tt class="py-line"><tt class="py-string">'tcea'</tt><tt class="py-op">:</tt> <tt class="py-string">"Transverse Cylindrical Equal Area"</tt><tt class="py-op">,</tt> </tt>
+<a name="L169"></a><tt class="py-lineno">169</tt>  <tt class="py-line"><tt class="py-string">'tissot'</tt><tt class="py-op">:</tt> <tt class="py-string">"Tissot Conic"</tt><tt class="py-op">,</tt> </tt>
+<a name="L170"></a><tt class="py-lineno">170</tt>  <tt class="py-line"><tt class="py-string">'tmerc'</tt><tt class="py-op">:</tt> <tt class="py-string">"Transverse Mercator"</tt><tt class="py-op">,</tt> </tt>
+<a name="L171"></a><tt class="py-lineno">171</tt>  <tt class="py-line"><tt class="py-string">'tpeqd'</tt><tt class="py-op">:</tt> <tt class="py-string">"Two Point Equidistant"</tt><tt class="py-op">,</tt> </tt>
+<a name="L172"></a><tt class="py-lineno">172</tt>  <tt class="py-line"><tt class="py-string">'tpers'</tt><tt class="py-op">:</tt> <tt class="py-string">"Tilted perspective"</tt><tt class="py-op">,</tt> </tt>
+<a name="L173"></a><tt class="py-lineno">173</tt>  <tt class="py-line"><tt class="py-string">'ups'</tt><tt class="py-op">:</tt> <tt class="py-string">"Universal Polar Stereographic"</tt><tt class="py-op">,</tt> </tt>
+<a name="L174"></a><tt class="py-lineno">174</tt>  <tt class="py-line"><tt class="py-string">'urm5'</tt><tt class="py-op">:</tt> <tt class="py-string">"Urmaev V"</tt><tt class="py-op">,</tt> </tt>
+<a name="L175"></a><tt class="py-lineno">175</tt>  <tt class="py-line"><tt class="py-string">'urmfps'</tt><tt class="py-op">:</tt> <tt class="py-string">"Urmaev Flat-Polar Sinusoidal"</tt><tt class="py-op">,</tt> </tt>
+<a name="L176"></a><tt class="py-lineno">176</tt>  <tt class="py-line"><tt class="py-string">'utm'</tt><tt class="py-op">:</tt> <tt class="py-string">"Universal Transverse Mercator (UTM)"</tt><tt class="py-op">,</tt> </tt>
+<a name="L177"></a><tt class="py-lineno">177</tt>  <tt class="py-line"><tt class="py-string">'vandg'</tt><tt class="py-op">:</tt> <tt class="py-string">"van der Grinten (I)"</tt><tt class="py-op">,</tt> </tt>
+<a name="L178"></a><tt class="py-lineno">178</tt>  <tt class="py-line"><tt class="py-string">'vandg2'</tt><tt class="py-op">:</tt> <tt class="py-string">"van der Grinten II"</tt><tt class="py-op">,</tt> </tt>
+<a name="L179"></a><tt class="py-lineno">179</tt>  <tt class="py-line"><tt class="py-string">'vandg3'</tt><tt class="py-op">:</tt> <tt class="py-string">"van der Grinten III"</tt><tt class="py-op">,</tt> </tt>
+<a name="L180"></a><tt class="py-lineno">180</tt>  <tt class="py-line"><tt class="py-string">'vandg4'</tt><tt class="py-op">:</tt> <tt class="py-string">"van der Grinten IV"</tt><tt class="py-op">,</tt> </tt>
+<a name="L181"></a><tt class="py-lineno">181</tt>  <tt class="py-line"><tt class="py-string">'vitk1'</tt><tt class="py-op">:</tt> <tt class="py-string">"Vitkovsky I"</tt><tt class="py-op">,</tt> </tt>
+<a name="L182"></a><tt class="py-lineno">182</tt>  <tt class="py-line"><tt class="py-string">'wag1'</tt><tt class="py-op">:</tt> <tt class="py-string">"Wagner I (Kavraisky VI)"</tt><tt class="py-op">,</tt> </tt>
+<a name="L183"></a><tt class="py-lineno">183</tt>  <tt class="py-line"><tt class="py-string">'wag2'</tt><tt class="py-op">:</tt> <tt class="py-string">"Wagner II"</tt><tt class="py-op">,</tt> </tt>
+<a name="L184"></a><tt class="py-lineno">184</tt>  <tt class="py-line"><tt class="py-string">'wag3'</tt><tt class="py-op">:</tt> <tt class="py-string">"Wagner III"</tt><tt class="py-op">,</tt> </tt>
+<a name="L185"></a><tt class="py-lineno">185</tt>  <tt class="py-line"><tt class="py-string">'wag4'</tt><tt class="py-op">:</tt> <tt class="py-string">"Wagner IV"</tt><tt class="py-op">,</tt> </tt>
+<a name="L186"></a><tt class="py-lineno">186</tt>  <tt class="py-line"><tt class="py-string">'wag5'</tt><tt class="py-op">:</tt> <tt class="py-string">"Wagner V"</tt><tt class="py-op">,</tt> </tt>
+<a name="L187"></a><tt class="py-lineno">187</tt>  <tt class="py-line"><tt class="py-string">'wag6'</tt><tt class="py-op">:</tt> <tt class="py-string">"Wagner VI"</tt><tt class="py-op">,</tt> </tt>
+<a name="L188"></a><tt class="py-lineno">188</tt>  <tt class="py-line"><tt class="py-string">'wag7'</tt><tt class="py-op">:</tt> <tt class="py-string">"Wagner VII"</tt><tt class="py-op">,</tt> </tt>
+<a name="L189"></a><tt class="py-lineno">189</tt>  <tt class="py-line"><tt class="py-string">'weren'</tt><tt class="py-op">:</tt> <tt class="py-string">"Werenskiold I"</tt><tt class="py-op">,</tt> </tt>
+<a name="L190"></a><tt class="py-lineno">190</tt>  <tt class="py-line"><tt class="py-string">'wink1'</tt><tt class="py-op">:</tt> <tt class="py-string">"Winkel I"</tt><tt class="py-op">,</tt> </tt>
+<a name="L191"></a><tt class="py-lineno">191</tt>  <tt class="py-line"><tt class="py-string">'wink2'</tt><tt class="py-op">:</tt> <tt class="py-string">"Winkel II"</tt><tt class="py-op">,</tt> </tt>
+<a name="L192"></a><tt class="py-lineno">192</tt>  <tt class="py-line"><tt class="py-string">'wintri'</tt><tt class="py-op">:</tt> <tt class="py-string">"Winkel Tripel"</tt><tt class="py-op">}</tt> </tt>
+<a name="L193"></a><tt class="py-lineno">193</tt>  <tt class="py-line"> </tt>
+<a name="L194"></a><tt class="py-lineno">194</tt>  <tt class="py-line"><tt id="link-4" class="py-name" targets="Variable pyproj.pj_ellps=pyproj-module.html#pj_ellps"><a title="pyproj.pj_ellps" class="py-name" href="#" onclick="return doclink('link-4', 'pj_ellps', 'link-4');">pj_ellps</a></tt><tt class="py-op">=</tt><tt class="py-op">{</tt> </tt>
+<a name="L195"></a><tt class="py-lineno">195</tt>  <tt class="py-line"><tt class="py-string">"MERIT"</tt><tt class="py-op">:</tt>        <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378137.0</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">298.257</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"MERIT 1983"</tt>< [...]
+<a name="L196"></a><tt class="py-lineno">196</tt>  <tt class="py-line"><tt class="py-string">"SGS85"</tt><tt class="py-op">:</tt>        <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378136.0</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">298.257</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Soviet Geodetic S [...]
+<a name="L197"></a><tt class="py-lineno">197</tt>  <tt class="py-line"><tt class="py-string">"GRS80"</tt><tt class="py-op">:</tt>        <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378137.0</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">298.257222101</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"GRS 1980(IU [...]
+<a name="L198"></a><tt class="py-lineno">198</tt>  <tt class="py-line"><tt class="py-string">"IAU76"</tt><tt class="py-op">:</tt>        <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378140.0</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">298.257</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"IAU 1976"</tt><tt [...]
+<a name="L199"></a><tt class="py-lineno">199</tt>  <tt class="py-line"><tt class="py-string">"airy"</tt><tt class="py-op">:</tt>         <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6377563.396</tt><tt class="py-op">,</tt><tt class="py-string">'b'</tt><tt class="py-op">:</tt><tt class="py-number">6356256.910</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Airy 1830"</ [...]
+<a name="L200"></a><tt class="py-lineno">200</tt>  <tt class="py-line"><tt class="py-string">"APL4.9"</tt><tt class="py-op">:</tt>       <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378137.0</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">298.25</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Appl. Physics. 196 [...]
+<a name="L201"></a><tt class="py-lineno">201</tt>  <tt class="py-line"><tt class="py-string">"NWL9D"</tt><tt class="py-op">:</tt>        <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378145.0</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">298.25</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">" Naval Weapons Lab [...]
+<a name="L202"></a><tt class="py-lineno">202</tt>  <tt class="py-line"><tt class="py-string">"mod_airy"</tt><tt class="py-op">:</tt>     <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6377340.189</tt><tt class="py-op">,</tt><tt class="py-string">'b'</tt><tt class="py-op">:</tt><tt class="py-number">6356034.446</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Modified Air [...]
+<a name="L203"></a><tt class="py-lineno">203</tt>  <tt class="py-line"><tt class="py-string">"andrae"</tt><tt class="py-op">:</tt>       <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6377104.43</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">300.0</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Andrae 1876 (Den., [...]
+<a name="L204"></a><tt class="py-lineno">204</tt>  <tt class="py-line"><tt class="py-string">"aust_SA"</tt><tt class="py-op">:</tt>      <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378160.0</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">298.25</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Australian Natl &a [...]
+<a name="L205"></a><tt class="py-lineno">205</tt>  <tt class="py-line"><tt class="py-string">"GRS67"</tt><tt class="py-op">:</tt>        <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378160.0</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">298.2471674270</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"GRS 67(IUG [...]
+<a name="L206"></a><tt class="py-lineno">206</tt>  <tt class="py-line"><tt class="py-string">"bessel"</tt><tt class="py-op">:</tt>       <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6377397.155</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">299.1528128</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Bessel 1841 [...]
+<a name="L207"></a><tt class="py-lineno">207</tt>  <tt class="py-line"><tt class="py-string">"bess_nam"</tt><tt class="py-op">:</tt>     <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6377483.865</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">299.1528128</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Bessel 1841 [...]
+<a name="L208"></a><tt class="py-lineno">208</tt>  <tt class="py-line"><tt class="py-string">"clrk66"</tt><tt class="py-op">:</tt>       <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378206.4</tt><tt class="py-op">,</tt><tt class="py-string">'b'</tt><tt class="py-op">:</tt><tt class="py-number">6356583.8</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Clarke 1866"</tt [...]
+<a name="L209"></a><tt class="py-lineno">209</tt>  <tt class="py-line"><tt class="py-string">"clrk80"</tt><tt class="py-op">:</tt>       <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378249.145</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">293.4663</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Clarke 1880 mo [...]
+<a name="L210"></a><tt class="py-lineno">210</tt>  <tt class="py-line"><tt class="py-string">"CPM"</tt><tt class="py-op">:</tt>          <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6375738.7</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">334.29</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Comm. des Poids et [...]
+<a name="L211"></a><tt class="py-lineno">211</tt>  <tt class="py-line"><tt class="py-string">"delmbr"</tt><tt class="py-op">:</tt>       <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6376428.</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">311.5</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Delambre 1810 (Belgi [...]
+<a name="L212"></a><tt class="py-lineno">212</tt>  <tt class="py-line"><tt class="py-string">"engelis"</tt><tt class="py-op">:</tt>      <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378136.05</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">298.2566</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Engelis 1985"</ [...]
+<a name="L213"></a><tt class="py-lineno">213</tt>  <tt class="py-line"><tt class="py-string">"evrst30"</tt><tt class="py-op">:</tt>      <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6377276.345</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">300.8017</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Everest 1830"< [...]
+<a name="L214"></a><tt class="py-lineno">214</tt>  <tt class="py-line"><tt class="py-string">"evrst48"</tt><tt class="py-op">:</tt>      <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6377304.063</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">300.8017</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Everest 1948"< [...]
+<a name="L215"></a><tt class="py-lineno">215</tt>  <tt class="py-line"><tt class="py-string">"evrst56"</tt><tt class="py-op">:</tt>      <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6377301.243</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">300.8017</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Everest 1956"< [...]
+<a name="L216"></a><tt class="py-lineno">216</tt>  <tt class="py-line"><tt class="py-string">"evrst69"</tt><tt class="py-op">:</tt>      <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6377295.664</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">300.8017</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Everest 1969"< [...]
+<a name="L217"></a><tt class="py-lineno">217</tt>  <tt class="py-line"><tt class="py-string">"evrstSS"</tt><tt class="py-op">:</tt>      <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6377298.556</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">300.8017</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Everest (Sabah [...]
+<a name="L218"></a><tt class="py-lineno">218</tt>  <tt class="py-line"><tt class="py-string">"fschr60"</tt><tt class="py-op">:</tt>      <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378166.</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">298.3</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Fischer (Mercury Dat [...]
+<a name="L219"></a><tt class="py-lineno">219</tt>  <tt class="py-line"><tt class="py-string">"fschr60m"</tt><tt class="py-op">:</tt>     <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378155.</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">298.3</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Modified Fischer 196 [...]
+<a name="L220"></a><tt class="py-lineno">220</tt>  <tt class="py-line"><tt class="py-string">"fschr68"</tt><tt class="py-op">:</tt>      <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378150.</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">298.3</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Fischer 1968"</tt><t [...]
+<a name="L221"></a><tt class="py-lineno">221</tt>  <tt class="py-line"><tt class="py-string">"helmert"</tt><tt class="py-op">:</tt>      <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378200.</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">298.3</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Helmert 1906"</tt><t [...]
+<a name="L222"></a><tt class="py-lineno">222</tt>  <tt class="py-line"><tt class="py-string">"hough"</tt><tt class="py-op">:</tt>        <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378270.0</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">297.</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Hough"</tt><tt class [...]
+<a name="L223"></a><tt class="py-lineno">223</tt>  <tt class="py-line"><tt class="py-string">"intl"</tt><tt class="py-op">:</tt>         <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378388.0</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">297.</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"International 1909 ( [...]
+<a name="L224"></a><tt class="py-lineno">224</tt>  <tt class="py-line"><tt class="py-string">"krass"</tt><tt class="py-op">:</tt>        <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378245.0</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">298.3</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Krassovsky, 1942"</ [...]
+<a name="L225"></a><tt class="py-lineno">225</tt>  <tt class="py-line"><tt class="py-string">"kaula"</tt><tt class="py-op">:</tt>        <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378163.</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">298.24</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Kaula 1961"</tt><tt [...]
+<a name="L226"></a><tt class="py-lineno">226</tt>  <tt class="py-line"><tt class="py-string">"lerch"</tt><tt class="py-op">:</tt>        <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378139.</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">298.257</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Lerch 1979"</tt><t [...]
+<a name="L227"></a><tt class="py-lineno">227</tt>  <tt class="py-line"><tt class="py-string">"mprts"</tt><tt class="py-op">:</tt>        <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6397300.</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">191.</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Maupertius 1738"</tt> [...]
+<a name="L228"></a><tt class="py-lineno">228</tt>  <tt class="py-line"><tt class="py-string">"new_intl"</tt><tt class="py-op">:</tt>     <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378157.5</tt><tt class="py-op">,</tt><tt class="py-string">'b'</tt><tt class="py-op">:</tt><tt class="py-number">6356772.2</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"New Internationa [...]
+<a name="L229"></a><tt class="py-lineno">229</tt>  <tt class="py-line"><tt class="py-string">"plessis"</tt><tt class="py-op">:</tt>      <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6376523.</tt><tt class="py-op">,</tt><tt class="py-string">'b'</tt><tt class="py-op">:</tt><tt class="py-number">6355863.</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Plessis 1817 (Fran [...]
+<a name="L230"></a><tt class="py-lineno">230</tt>  <tt class="py-line"><tt class="py-string">"SEasia"</tt><tt class="py-op">:</tt>       <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378155.0</tt><tt class="py-op">,</tt><tt class="py-string">'b'</tt><tt class="py-op">:</tt><tt class="py-number">6356773.3205</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Southeast Asi [...]
+<a name="L231"></a><tt class="py-lineno">231</tt>  <tt class="py-line"><tt class="py-string">"walbeck"</tt><tt class="py-op">:</tt>      <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6376896.0</tt><tt class="py-op">,</tt><tt class="py-string">'b'</tt><tt class="py-op">:</tt><tt class="py-number">6355834.8467</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Walbeck"</tt> [...]
+<a name="L232"></a><tt class="py-lineno">232</tt>  <tt class="py-line"><tt class="py-string">"WGS60"</tt><tt class="py-op">:</tt>        <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378165.0</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">298.3</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"WGS 60"</tt><tt cla [...]
+<a name="L233"></a><tt class="py-lineno">233</tt>  <tt class="py-line"><tt class="py-string">"WGS66"</tt><tt class="py-op">:</tt>        <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378145.0</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">298.25</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"WGS 66"</tt><tt cl [...]
+<a name="L234"></a><tt class="py-lineno">234</tt>  <tt class="py-line"><tt class="py-string">"WGS72"</tt><tt class="py-op">:</tt>        <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378135.0</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">298.26</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"WGS 72"</tt><tt cl [...]
+<a name="L235"></a><tt class="py-lineno">235</tt>  <tt class="py-line"><tt class="py-string">"WGS84"</tt><tt class="py-op">:</tt>        <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6378137.0</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">:</tt><tt class="py-number">298.257223563</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"WGS 84"</tt [...]
+<a name="L236"></a><tt class="py-lineno">236</tt>  <tt class="py-line"><tt class="py-string">"sphere"</tt><tt class="py-op">:</tt>       <tt class="py-op">{</tt><tt class="py-string">'a'</tt><tt class="py-op">:</tt><tt class="py-number">6370997.0</tt><tt class="py-op">,</tt><tt class="py-string">'b'</tt><tt class="py-op">:</tt><tt class="py-number">6370997.0</tt><tt class="py-op">,</tt><tt class="py-string">'description'</tt><tt class="py-op">:</tt><tt class="py-string">"Normal Sphere"</ [...]
+<a name="L237"></a><tt class="py-lineno">237</tt>  <tt class="py-line"><tt class="py-op">}</tt> </tt>
+<a name="L238"></a><tt class="py-lineno">238</tt>  <tt class="py-line"> </tt>
+<a name="L239"></a><tt class="py-lineno">239</tt>  <tt class="py-line"><tt class="py-comment">#if not os.path.isdir(pyproj_datadir):</tt> </tt>
+<a name="L240"></a><tt class="py-lineno">240</tt>  <tt class="py-line"><tt class="py-comment">#    msg="proj data directory not found. Expecting it at: %s"%pyproj_datadir</tt> </tt>
+<a name="L241"></a><tt class="py-lineno">241</tt>  <tt class="py-line"><tt class="py-comment">#    raise IOError(msg)</tt> </tt>
+<a name="L242"></a><tt class="py-lineno">242</tt>  <tt class="py-line"> </tt>
+<a name="L243"></a><tt class="py-lineno">243</tt>  <tt class="py-line"><tt class="py-name">set_datapath</tt><tt class="py-op">(</tt><tt id="link-5" class="py-name"><a title="pyproj.pyproj_datadir" class="py-name" href="#" onclick="return doclink('link-5', 'pyproj_datadir', 'link-2');">pyproj_datadir</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L244"></a><tt class="py-lineno">244</tt>  <tt class="py-line"> </tt>
+<a name="Proj"></a><div id="Proj-def"><a name="L245"></a><tt class="py-lineno">245</tt> <a class="py-toggle" href="#" id="Proj-toggle" onclick="return toggle('Proj');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="pyproj.Proj-class.html">Proj</a><tt class="py-op">(</tt><tt class="py-base-class">_proj</tt><tt class="py-op">.</tt><tt class="py-base-class">Proj</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Proj-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="Proj-expanded"><a name="L246"></a><tt class="py-lineno">246</tt>  <tt class="py-line">    <tt class="py-docstring">"""</tt> </tt>
+<a name="L247"></a><tt class="py-lineno">247</tt>  <tt class="py-line"><tt class="py-docstring">    performs cartographic transformations (converts from</tt> </tt>
+<a name="L248"></a><tt class="py-lineno">248</tt>  <tt class="py-line"><tt class="py-docstring">    longitude,latitude to native map projection x,y coordinates and</tt> </tt>
+<a name="L249"></a><tt class="py-lineno">249</tt>  <tt class="py-line"><tt class="py-docstring">    vice versa) using proj (http://trac.osgeo.org/proj/).</tt> </tt>
+<a name="L250"></a><tt class="py-lineno">250</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L251"></a><tt class="py-lineno">251</tt>  <tt class="py-line"><tt class="py-docstring">    A Proj class instance is initialized with proj map projection</tt> </tt>
+<a name="L252"></a><tt class="py-lineno">252</tt>  <tt class="py-line"><tt class="py-docstring">    control parameter key/value pairs. The key/value pairs can</tt> </tt>
+<a name="L253"></a><tt class="py-lineno">253</tt>  <tt class="py-line"><tt class="py-docstring">    either be passed in a dictionary, or as keyword arguments,</tt> </tt>
+<a name="L254"></a><tt class="py-lineno">254</tt>  <tt class="py-line"><tt class="py-docstring">    or as a proj4 string (compatible with the proj command). See</tt> </tt>
+<a name="L255"></a><tt class="py-lineno">255</tt>  <tt class="py-line"><tt class="py-docstring">    http://www.remotesensing.org/geotiff/proj_list for examples of</tt> </tt>
+<a name="L256"></a><tt class="py-lineno">256</tt>  <tt class="py-line"><tt class="py-docstring">    key/value pairs defining different map projections.</tt> </tt>
+<a name="L257"></a><tt class="py-lineno">257</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L258"></a><tt class="py-lineno">258</tt>  <tt class="py-line"><tt class="py-docstring">    Calling a Proj class instance with the arguments lon, lat will</tt> </tt>
+<a name="L259"></a><tt class="py-lineno">259</tt>  <tt class="py-line"><tt class="py-docstring">    convert lon/lat (in degrees) to x/y native map projection</tt> </tt>
+<a name="L260"></a><tt class="py-lineno">260</tt>  <tt class="py-line"><tt class="py-docstring">    coordinates (in meters).  If optional keyword 'inverse' is True</tt> </tt>
+<a name="L261"></a><tt class="py-lineno">261</tt>  <tt class="py-line"><tt class="py-docstring">    (default is False), the inverse transformation from x/y to</tt> </tt>
+<a name="L262"></a><tt class="py-lineno">262</tt>  <tt class="py-line"><tt class="py-docstring">    lon/lat is performed. If optional keyword 'radians' is True</tt> </tt>
+<a name="L263"></a><tt class="py-lineno">263</tt>  <tt class="py-line"><tt class="py-docstring">    (default is False) lon/lat are interpreted as radians instead of</tt> </tt>
+<a name="L264"></a><tt class="py-lineno">264</tt>  <tt class="py-line"><tt class="py-docstring">    degrees. If optional keyword 'errcheck' is True (default is</tt> </tt>
+<a name="L265"></a><tt class="py-lineno">265</tt>  <tt class="py-line"><tt class="py-docstring">    False) an exception is raised if the transformation is invalid.</tt> </tt>
+<a name="L266"></a><tt class="py-lineno">266</tt>  <tt class="py-line"><tt class="py-docstring">    If errcheck=False and the transformation is invalid, no</tt> </tt>
+<a name="L267"></a><tt class="py-lineno">267</tt>  <tt class="py-line"><tt class="py-docstring">    exception is raised and 1.e30 is returned. If the optional keyword</tt> </tt>
+<a name="L268"></a><tt class="py-lineno">268</tt>  <tt class="py-line"><tt class="py-docstring">    'preserve_units' is True, the units in map projection coordinates</tt> </tt>
+<a name="L269"></a><tt class="py-lineno">269</tt>  <tt class="py-line"><tt class="py-docstring">    are not forced to be meters.</tt> </tt>
+<a name="L270"></a><tt class="py-lineno">270</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L271"></a><tt class="py-lineno">271</tt>  <tt class="py-line"><tt class="py-docstring">    Works with numpy and regular python array objects, python</tt> </tt>
+<a name="L272"></a><tt class="py-lineno">272</tt>  <tt class="py-line"><tt class="py-docstring">    sequences and scalars.</tt> </tt>
+<a name="L273"></a><tt class="py-lineno">273</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L274"></a><tt class="py-lineno">274</tt>  <tt class="py-line"> </tt>
+<a name="Proj.__new__"></a><div id="Proj.__new__-def"><a name="L275"></a><tt class="py-lineno">275</tt> <a class="py-toggle" href="#" id="Proj.__new__-toggle" onclick="return toggle('Proj.__new__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="pyproj.Proj-class.html#__new__">__new__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">projparams</tt><tt class="py-op">=</tt><tt class="py-name"> [...]
+</div><div id="Proj.__new__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Proj.__new__-expanded"><a name="L276"></a><tt class="py-lineno">276</tt>  <tt class="py-line">        <tt class="py-docstring">"""</tt> </tt>
+<a name="L277"></a><tt class="py-lineno">277</tt>  <tt class="py-line"><tt class="py-docstring">        initialize a Proj class instance.</tt> </tt>
+<a name="L278"></a><tt class="py-lineno">278</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L279"></a><tt class="py-lineno">279</tt>  <tt class="py-line"><tt class="py-docstring">        Proj4 projection control parameters must either be given in a</tt> </tt>
+<a name="L280"></a><tt class="py-lineno">280</tt>  <tt class="py-line"><tt class="py-docstring">        dictionary 'projparams' or as keyword arguments. See the proj</tt> </tt>
+<a name="L281"></a><tt class="py-lineno">281</tt>  <tt class="py-line"><tt class="py-docstring">        documentation (http://trac.osgeo.org/proj/) for more information</tt> </tt>
+<a name="L282"></a><tt class="py-lineno">282</tt>  <tt class="py-line"><tt class="py-docstring">        about specifying projection parameters.</tt> </tt>
+<a name="L283"></a><tt class="py-lineno">283</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L284"></a><tt class="py-lineno">284</tt>  <tt class="py-line"><tt class="py-docstring">        Example usage:</tt> </tt>
+<a name="L285"></a><tt class="py-lineno">285</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L286"></a><tt class="py-lineno">286</tt>  <tt class="py-line"><tt class="py-docstring">        >>> from pyproj import Proj</tt> </tt>
+<a name="L287"></a><tt class="py-lineno">287</tt>  <tt class="py-line"><tt class="py-docstring">        >>> p = Proj(proj='utm',zone=10,ellps='WGS84') # use kwargs</tt> </tt>
+<a name="L288"></a><tt class="py-lineno">288</tt>  <tt class="py-line"><tt class="py-docstring">        >>> x,y = p(-120.108, 34.36116666)</tt> </tt>
+<a name="L289"></a><tt class="py-lineno">289</tt>  <tt class="py-line"><tt class="py-docstring">        >>> 'x=%9.3f y=%11.3f' % (x,y)</tt> </tt>
+<a name="L290"></a><tt class="py-lineno">290</tt>  <tt class="py-line"><tt class="py-docstring">        'x=765975.641 y=3805993.134'</tt> </tt>
+<a name="L291"></a><tt class="py-lineno">291</tt>  <tt class="py-line"><tt class="py-docstring">        >>> 'lon=%8.3f lat=%5.3f' % p(x,y,inverse=True)</tt> </tt>
+<a name="L292"></a><tt class="py-lineno">292</tt>  <tt class="py-line"><tt class="py-docstring">        'lon=-120.108 lat=34.361'</tt> </tt>
+<a name="L293"></a><tt class="py-lineno">293</tt>  <tt class="py-line"><tt class="py-docstring">        >>> # do 3 cities at a time in a tuple (Fresno, LA, SF)</tt> </tt>
+<a name="L294"></a><tt class="py-lineno">294</tt>  <tt class="py-line"><tt class="py-docstring">        >>> lons = (-119.72,-118.40,-122.38)</tt> </tt>
+<a name="L295"></a><tt class="py-lineno">295</tt>  <tt class="py-line"><tt class="py-docstring">        >>> lats = (36.77, 33.93, 37.62 )</tt> </tt>
+<a name="L296"></a><tt class="py-lineno">296</tt>  <tt class="py-line"><tt class="py-docstring">        >>> x,y = p(lons, lats)</tt> </tt>
+<a name="L297"></a><tt class="py-lineno">297</tt>  <tt class="py-line"><tt class="py-docstring">        >>> 'x: %9.3f %9.3f %9.3f' % x</tt> </tt>
+<a name="L298"></a><tt class="py-lineno">298</tt>  <tt class="py-line"><tt class="py-docstring">        'x: 792763.863 925321.537 554714.301'</tt> </tt>
+<a name="L299"></a><tt class="py-lineno">299</tt>  <tt class="py-line"><tt class="py-docstring">        >>> 'y: %9.3f %9.3f %9.3f' % y</tt> </tt>
+<a name="L300"></a><tt class="py-lineno">300</tt>  <tt class="py-line"><tt class="py-docstring">        'y: 4074377.617 3763936.941 4163835.303'</tt> </tt>
+<a name="L301"></a><tt class="py-lineno">301</tt>  <tt class="py-line"><tt class="py-docstring">        >>> lons, lats = p(x, y, inverse=True) # inverse transform</tt> </tt>
+<a name="L302"></a><tt class="py-lineno">302</tt>  <tt class="py-line"><tt class="py-docstring">        >>> 'lons: %8.3f %8.3f %8.3f' % lons</tt> </tt>
+<a name="L303"></a><tt class="py-lineno">303</tt>  <tt class="py-line"><tt class="py-docstring">        'lons: -119.720 -118.400 -122.380'</tt> </tt>
+<a name="L304"></a><tt class="py-lineno">304</tt>  <tt class="py-line"><tt class="py-docstring">        >>> 'lats: %8.3f %8.3f %8.3f' % lats</tt> </tt>
+<a name="L305"></a><tt class="py-lineno">305</tt>  <tt class="py-line"><tt class="py-docstring">        'lats:   36.770   33.930   37.620'</tt> </tt>
+<a name="L306"></a><tt class="py-lineno">306</tt>  <tt class="py-line"><tt class="py-docstring">        >>> p2 = Proj('+proj=utm +zone=10 +ellps=WGS84') # use proj4 string</tt> </tt>
+<a name="L307"></a><tt class="py-lineno">307</tt>  <tt class="py-line"><tt class="py-docstring">        >>> x,y = p2(-120.108, 34.36116666)</tt> </tt>
+<a name="L308"></a><tt class="py-lineno">308</tt>  <tt class="py-line"><tt class="py-docstring">        >>> 'x=%9.3f y=%11.3f' % (x,y)</tt> </tt>
+<a name="L309"></a><tt class="py-lineno">309</tt>  <tt class="py-line"><tt class="py-docstring">        'x=765975.641 y=3805993.134'</tt> </tt>
+<a name="L310"></a><tt class="py-lineno">310</tt>  <tt class="py-line"><tt class="py-docstring">        >>> p = Proj(init="epsg:32667")</tt> </tt>
+<a name="L311"></a><tt class="py-lineno">311</tt>  <tt class="py-line"><tt class="py-docstring">        >>> 'x=%12.3f y=%12.3f (meters)' % p(-114.057222, 51.045)</tt> </tt>
+<a name="L312"></a><tt class="py-lineno">312</tt>  <tt class="py-line"><tt class="py-docstring">        'x=-1783486.760 y= 6193833.196 (meters)'</tt> </tt>
+<a name="L313"></a><tt class="py-lineno">313</tt>  <tt class="py-line"><tt class="py-docstring">        >>> p = Proj("+init=epsg:32667",preserve_units=True)</tt> </tt>
+<a name="L314"></a><tt class="py-lineno">314</tt>  <tt class="py-line"><tt class="py-docstring">        >>> 'x=%12.3f y=%12.3f (feet)' % p(-114.057222, 51.045)</tt> </tt>
+<a name="L315"></a><tt class="py-lineno">315</tt>  <tt class="py-line"><tt class="py-docstring">        'x=-5851322.810 y=20320934.409 (feet)'</tt> </tt>
+<a name="L316"></a><tt class="py-lineno">316</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
+<a name="L317"></a><tt class="py-lineno">317</tt>  <tt class="py-line">        <tt class="py-comment"># if projparams is None, use kwargs.</tt> </tt>
+<a name="L318"></a><tt class="py-lineno">318</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">projparams</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L319"></a><tt class="py-lineno">319</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L320"></a><tt class="py-lineno">320</tt>  <tt class="py-line">                <tt class="py-keyword">raise</tt> <tt class="py-name">RuntimeError</tt><tt class="py-op">(</tt><tt class="py-string">'no projection control parameters specified'</tt><tt class="py-op">)</tt> </tt>
+<a name="L321"></a><tt class="py-lineno">321</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L322"></a><tt class="py-lineno">322</tt>  <tt class="py-line">                <tt class="py-name">projstring</tt> <tt class="py-op">=</tt> <tt class="py-name">_dict2string</tt><tt class="py-op">(</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt>
+<a name="L323"></a><tt class="py-lineno">323</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">projparams</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">str</tt><tt class="py-op">:</tt> </tt>
+<a name="L324"></a><tt class="py-lineno">324</tt>  <tt class="py-line">            <tt class="py-comment"># if projparams is a string, interpret as a proj4 init string.</tt> </tt>
+<a name="L325"></a><tt class="py-lineno">325</tt>  <tt class="py-line">            <tt class="py-name">projstring</tt> <tt class="py-op">=</tt> <tt class="py-name">projparams</tt> </tt>
+<a name="L326"></a><tt class="py-lineno">326</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> <tt class="py-comment"># projparams a dict</tt> </tt>
+<a name="L327"></a><tt class="py-lineno">327</tt>  <tt class="py-line">            <tt class="py-name">projstring</tt> <tt class="py-op">=</tt> <tt class="py-name">_dict2string</tt><tt class="py-op">(</tt><tt class="py-name">projparams</tt><tt class="py-op">)</tt> </tt>
+<a name="L328"></a><tt class="py-lineno">328</tt>  <tt class="py-line">        <tt class="py-comment"># make sure units are meters if preserve_units is False.</tt> </tt>
+<a name="L329"></a><tt class="py-lineno">329</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">projstring</tt><tt class="py-op">.</tt><tt class="py-name">count</tt><tt class="py-op">(</tt><tt class="py-string">'+units='</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">preserve_units</tt><tt class="py-op">:</tt> </tt>
+<a name="L330"></a><tt class="py-lineno">330</tt>  <tt class="py-line">            <tt class="py-name">projstring</tt> <tt class="py-op">=</tt> <tt class="py-string">'+units=m '</tt><tt class="py-op">+</tt><tt class="py-name">projstring</tt> </tt>
+<a name="L331"></a><tt class="py-lineno">331</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L332"></a><tt class="py-lineno">332</tt>  <tt class="py-line">            <tt class="py-name">kvpairs</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L333"></a><tt class="py-lineno">333</tt>  <tt class="py-line">            <tt class="py-keyword">for</tt> <tt class="py-name">kvpair</tt> <tt class="py-keyword">in</tt> <tt class="py-name">projstring</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L334"></a><tt class="py-lineno">334</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">kvpair</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'+units'</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">preserve_units</tt><tt class="py-op">:</tt> </tt>
+<a name="L335"></a><tt class="py-lineno">335</tt>  <tt class="py-line">                    <tt class="py-name">k</tt><tt class="py-op">,</tt><tt class="py-name">v</tt> <tt class="py-op">=</tt> <tt class="py-name">kvpair</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'='</tt><tt class="py-op">)</tt> </tt>
+<a name="L336"></a><tt class="py-lineno">336</tt>  <tt class="py-line">                    <tt class="py-name">kvpairs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">k</tt><tt class="py-op">+</tt><tt class="py-string">'=m '</tt><tt class="py-op">)</tt> </tt>
+<a name="L337"></a><tt class="py-lineno">337</tt>  <tt class="py-line">                <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L338"></a><tt class="py-lineno">338</tt>  <tt class="py-line">                    <tt class="py-name">kvpairs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">kvpair</tt><tt class="py-op">+</tt><tt class="py-string">' '</tt><tt class="py-op">)</tt> </tt>
+<a name="L339"></a><tt class="py-lineno">339</tt>  <tt class="py-line">            <tt class="py-name">projstring</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">kvpairs</tt><tt class="py-op">)</tt> </tt>
+<a name="L340"></a><tt class="py-lineno">340</tt>  <tt class="py-line">        <tt class="py-comment"># look for EPSG, replace with epsg (EPSG only works</tt> </tt>
+<a name="L341"></a><tt class="py-lineno">341</tt>  <tt class="py-line">        <tt class="py-comment"># on case-insensitive filesystems).</tt> </tt>
+<a name="L342"></a><tt class="py-lineno">342</tt>  <tt class="py-line">        <tt class="py-name">projstring</tt> <tt class="py-op">=</tt> <tt class="py-name">projstring</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'EPSG'</tt><tt class="py-op">,</tt><tt class="py-string">'epsg'</tt><tt class="py-op">)</tt> </tt>
+<a name="L343"></a><tt class="py-lineno">343</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">_proj</tt><tt class="py-op">.</tt><tt id="link-6" class="py-name" targets="Class pyproj.Proj=pyproj.Proj-class.html"><a title="pyproj.Proj" class="py-name" href="#" onclick="return doclink('link-6', 'Proj', 'link-6');">Proj</a></tt><tt class="py-op">.</tt><tt id="link-7" class="py-name" targets="Static Method pyproj.Geod.__new__()=pyproj.Geod-class.html#__ [...]
+pyproj.Proj.__new__" class="py-name" href="#" onclick="return doclink('link-7', '__new__', 'link-7');">__new__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">projstring</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L344"></a><tt class="py-lineno">344</tt>  <tt class="py-line"> </tt>
+<a name="Proj.__call__"></a><div id="Proj.__call__-def"><a name="L345"></a><tt class="py-lineno">345</tt> <a class="py-toggle" href="#" id="Proj.__call__-toggle" onclick="return toggle('Proj.__call__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="pyproj.Proj-class.html#__call__">__call__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">,< [...]
+</div><div id="Proj.__call__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Proj.__call__-expanded"><a name="L346"></a><tt class="py-lineno">346</tt>  <tt class="py-line">    <tt class="py-comment">#,lon,lat,inverse=False,radians=False,errcheck=False):</tt> </tt>
+<a name="L347"></a><tt class="py-lineno">347</tt>  <tt class="py-line">        <tt class="py-docstring">"""</tt> </tt>
+<a name="L348"></a><tt class="py-lineno">348</tt>  <tt class="py-line"><tt class="py-docstring">        Calling a Proj class instance with the arguments lon, lat will</tt> </tt>
+<a name="L349"></a><tt class="py-lineno">349</tt>  <tt class="py-line"><tt class="py-docstring">        convert lon/lat (in degrees) to x/y native map projection</tt> </tt>
+<a name="L350"></a><tt class="py-lineno">350</tt>  <tt class="py-line"><tt class="py-docstring">        coordinates (in meters).  If optional keyword 'inverse' is True</tt> </tt>
+<a name="L351"></a><tt class="py-lineno">351</tt>  <tt class="py-line"><tt class="py-docstring">        (default is False), the inverse transformation from x/y to</tt> </tt>
+<a name="L352"></a><tt class="py-lineno">352</tt>  <tt class="py-line"><tt class="py-docstring">        lon/lat is performed.  If optional keyword 'radians' is True</tt> </tt>
+<a name="L353"></a><tt class="py-lineno">353</tt>  <tt class="py-line"><tt class="py-docstring">        (default is False) the units of lon/lat are radians instead of</tt> </tt>
+<a name="L354"></a><tt class="py-lineno">354</tt>  <tt class="py-line"><tt class="py-docstring">        degrees. If optional keyword 'errcheck' is True (default is</tt> </tt>
+<a name="L355"></a><tt class="py-lineno">355</tt>  <tt class="py-line"><tt class="py-docstring">        False) an exception is raised if the transformation is invalid.</tt> </tt>
+<a name="L356"></a><tt class="py-lineno">356</tt>  <tt class="py-line"><tt class="py-docstring">        If errcheck=False and the transformation is invalid, no</tt> </tt>
+<a name="L357"></a><tt class="py-lineno">357</tt>  <tt class="py-line"><tt class="py-docstring">        exception is raised and 1.e30 is returned.</tt> </tt>
+<a name="L358"></a><tt class="py-lineno">358</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L359"></a><tt class="py-lineno">359</tt>  <tt class="py-line"><tt class="py-docstring">        Instead of calling with lon, lat, a single ndarray of</tt> </tt>
+<a name="L360"></a><tt class="py-lineno">360</tt>  <tt class="py-line"><tt class="py-docstring">        shape n,2 may be used, and one of the same shape will</tt> </tt>
+<a name="L361"></a><tt class="py-lineno">361</tt>  <tt class="py-line"><tt class="py-docstring">        be returned; this is more efficient.</tt> </tt>
+<a name="L362"></a><tt class="py-lineno">362</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L363"></a><tt class="py-lineno">363</tt>  <tt class="py-line"><tt class="py-docstring">        Inputs should be doubles (they will be cast to doubles if they</tt> </tt>
+<a name="L364"></a><tt class="py-lineno">364</tt>  <tt class="py-line"><tt class="py-docstring">        are not, causing a slight performance hit).</tt> </tt>
+<a name="L365"></a><tt class="py-lineno">365</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L366"></a><tt class="py-lineno">366</tt>  <tt class="py-line"><tt class="py-docstring">        Works with numpy and regular python array objects, python</tt> </tt>
+<a name="L367"></a><tt class="py-lineno">367</tt>  <tt class="py-line"><tt class="py-docstring">        sequences and scalars, but is fastest for array objects.</tt> </tt>
+<a name="L368"></a><tt class="py-lineno">368</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
+<a name="L369"></a><tt class="py-lineno">369</tt>  <tt class="py-line">        <tt class="py-name">inverse</tt> <tt class="py-op">=</tt> <tt class="py-name">kw</tt><tt class="py-op">.</tt><tt class="py-name">get</tt><tt class="py-op">(</tt><tt class="py-string">'inverse'</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L370"></a><tt class="py-lineno">370</tt>  <tt class="py-line">        <tt class="py-name">radians</tt> <tt class="py-op">=</tt> <tt class="py-name">kw</tt><tt class="py-op">.</tt><tt class="py-name">get</tt><tt class="py-op">(</tt><tt class="py-string">'radians'</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L371"></a><tt class="py-lineno">371</tt>  <tt class="py-line">        <tt class="py-name">errcheck</tt> <tt class="py-op">=</tt> <tt class="py-name">kw</tt><tt class="py-op">.</tt><tt class="py-name">get</tt><tt class="py-op">(</tt><tt class="py-string">'errcheck'</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L372"></a><tt class="py-lineno">372</tt>  <tt class="py-line">        <tt class="py-comment">#if len(args) == 1:</tt> </tt>
+<a name="L373"></a><tt class="py-lineno">373</tt>  <tt class="py-line">        <tt class="py-comment">#    latlon = np.array(args[0], copy=True,</tt> </tt>
+<a name="L374"></a><tt class="py-lineno">374</tt>  <tt class="py-line">        <tt class="py-comment">#                      order='C', dtype=float, ndmin=2)</tt> </tt>
+<a name="L375"></a><tt class="py-lineno">375</tt>  <tt class="py-line">        <tt class="py-comment">#    if inverse:</tt> </tt>
+<a name="L376"></a><tt class="py-lineno">376</tt>  <tt class="py-line">        <tt class="py-comment">#        _proj.Proj._invn(self, latlon, radians=radians, errcheck=errcheck)</tt> </tt>
+<a name="L377"></a><tt class="py-lineno">377</tt>  <tt class="py-line">        <tt class="py-comment">#    else:</tt> </tt>
+<a name="L378"></a><tt class="py-lineno">378</tt>  <tt class="py-line">        <tt class="py-comment">#        _proj.Proj._fwdn(self, latlon, radians=radians, errcheck=errcheck)</tt> </tt>
+<a name="L379"></a><tt class="py-lineno">379</tt>  <tt class="py-line">        <tt class="py-comment">#    return latlon</tt> </tt>
+<a name="L380"></a><tt class="py-lineno">380</tt>  <tt class="py-line">        <tt class="py-name">lon</tt><tt class="py-op">,</tt> <tt class="py-name">lat</tt> <tt class="py-op">=</tt> <tt class="py-name">args</tt> </tt>
+<a name="L381"></a><tt class="py-lineno">381</tt>  <tt class="py-line">        <tt class="py-comment"># process inputs, making copies that support buffer API.</tt> </tt>
+<a name="L382"></a><tt class="py-lineno">382</tt>  <tt class="py-line">        <tt class="py-name">inx</tt><tt class="py-op">,</tt> <tt class="py-name">xisfloat</tt><tt class="py-op">,</tt> <tt class="py-name">xislist</tt><tt class="py-op">,</tt> <tt class="py-name">xistuple</tt> <tt class="py-op">=</tt> <tt class="py-name">_copytobuffer</tt><tt class="py-op">(</tt><tt class="py-name">lon</tt><tt class="py-op">)</tt> </tt>
+<a name="L383"></a><tt class="py-lineno">383</tt>  <tt class="py-line">        <tt class="py-name">iny</tt><tt class="py-op">,</tt> <tt class="py-name">yisfloat</tt><tt class="py-op">,</tt> <tt class="py-name">yislist</tt><tt class="py-op">,</tt> <tt class="py-name">yistuple</tt> <tt class="py-op">=</tt> <tt class="py-name">_copytobuffer</tt><tt class="py-op">(</tt><tt class="py-name">lat</tt><tt class="py-op">)</tt> </tt>
+<a name="L384"></a><tt class="py-lineno">384</tt>  <tt class="py-line">        <tt class="py-comment"># call proj4 functions. inx and iny modified in place.</tt> </tt>
+<a name="L385"></a><tt class="py-lineno">385</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">inverse</tt><tt class="py-op">:</tt> </tt>
+<a name="L386"></a><tt class="py-lineno">386</tt>  <tt class="py-line">            <tt class="py-name">_proj</tt><tt class="py-op">.</tt><tt id="link-8" class="py-name"><a title="pyproj.Proj" class="py-name" href="#" onclick="return doclink('link-8', 'Proj', 'link-6');">Proj</a></tt><tt class="py-op">.</tt><tt class="py-name">_inv</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">inx</tt><tt class="py-op">,</tt> <tt class="py-name">iny< [...]
+<a name="L387"></a><tt class="py-lineno">387</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L388"></a><tt class="py-lineno">388</tt>  <tt class="py-line">            <tt class="py-name">_proj</tt><tt class="py-op">.</tt><tt id="link-9" class="py-name"><a title="pyproj.Proj" class="py-name" href="#" onclick="return doclink('link-9', 'Proj', 'link-6');">Proj</a></tt><tt class="py-op">.</tt><tt class="py-name">_fwd</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">inx</tt><tt class="py-op">,</tt> <tt class="py-name">iny< [...]
+<a name="L389"></a><tt class="py-lineno">389</tt>  <tt class="py-line">        <tt class="py-comment"># if inputs were lists, tuples or floats, convert back.</tt> </tt>
+<a name="L390"></a><tt class="py-lineno">390</tt>  <tt class="py-line">        <tt class="py-name">outx</tt> <tt class="py-op">=</tt> <tt class="py-name">_convertback</tt><tt class="py-op">(</tt><tt class="py-name">xisfloat</tt><tt class="py-op">,</tt><tt class="py-name">xislist</tt><tt class="py-op">,</tt><tt class="py-name">xistuple</tt><tt class="py-op">,</tt><tt class="py-name">inx</tt><tt class="py-op">)</tt> </tt>
+<a name="L391"></a><tt class="py-lineno">391</tt>  <tt class="py-line">        <tt class="py-name">outy</tt> <tt class="py-op">=</tt> <tt class="py-name">_convertback</tt><tt class="py-op">(</tt><tt class="py-name">yisfloat</tt><tt class="py-op">,</tt><tt class="py-name">yislist</tt><tt class="py-op">,</tt><tt class="py-name">xistuple</tt><tt class="py-op">,</tt><tt class="py-name">iny</tt><tt class="py-op">)</tt> </tt>
+<a name="L392"></a><tt class="py-lineno">392</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">outx</tt><tt class="py-op">,</tt> <tt class="py-name">outy</tt> </tt>
+</div><a name="L393"></a><tt class="py-lineno">393</tt>  <tt class="py-line"> </tt>
+<a name="Proj.is_latlong"></a><div id="Proj.is_latlong-def"><a name="L394"></a><tt class="py-lineno">394</tt> <a class="py-toggle" href="#" id="Proj.is_latlong-toggle" onclick="return toggle('Proj.is_latlong');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="pyproj.Proj-class.html#is_latlong">is_latlong</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Proj.is_latlong-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Proj.is_latlong-expanded"><a name="L395"></a><tt class="py-lineno">395</tt>  <tt class="py-line">        <tt class="py-docstring">"""returns True if projection in geographic (lon/lat) coordinates"""</tt> </tt>
+<a name="L396"></a><tt class="py-lineno">396</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">_proj</tt><tt class="py-op">.</tt><tt id="link-10" class="py-name"><a title="pyproj.Proj" class="py-name" href="#" onclick="return doclink('link-10', 'Proj', 'link-6');">Proj</a></tt><tt class="py-op">.</tt><tt id="link-11" class="py-name" targets="Method pyproj.Proj.is_latlong()=pyproj.Proj-class.html#is_latlong"><a title="pyproj.Proj.is_latlong" class="p [...]
+</div><a name="L397"></a><tt class="py-lineno">397</tt>  <tt class="py-line"> </tt>
+<a name="Proj.is_geocent"></a><div id="Proj.is_geocent-def"><a name="L398"></a><tt class="py-lineno">398</tt> <a class="py-toggle" href="#" id="Proj.is_geocent-toggle" onclick="return toggle('Proj.is_geocent');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="pyproj.Proj-class.html#is_geocent">is_geocent</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Proj.is_geocent-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Proj.is_geocent-expanded"><a name="L399"></a><tt class="py-lineno">399</tt>  <tt class="py-line">        <tt class="py-docstring">"""returns True if projection in geocentric (x/y) coordinates"""</tt> </tt>
+<a name="L400"></a><tt class="py-lineno">400</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">_proj</tt><tt class="py-op">.</tt><tt id="link-12" class="py-name"><a title="pyproj.Proj" class="py-name" href="#" onclick="return doclink('link-12', 'Proj', 'link-6');">Proj</a></tt><tt class="py-op">.</tt><tt id="link-13" class="py-name" targets="Method pyproj.Proj.is_geocent()=pyproj.Proj-class.html#is_geocent"><a title="pyproj.Proj.is_geocent" class="p [...]
+</div></div><a name="L401"></a><tt class="py-lineno">401</tt>  <tt class="py-line"> </tt>
+<a name="transform"></a><div id="transform-def"><a name="L402"></a><tt class="py-lineno">402</tt> <a class="py-toggle" href="#" id="transform-toggle" onclick="return toggle('transform');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="pyproj-module.html#transform">transform</a><tt class="py-op">(</tt><tt class="py-param">p1</tt><tt class="py-op">,</tt> <tt class="py-param">p2</tt><tt class="py-op">,</tt> <tt class="py-param">x</tt><tt class="py-op"> [...]
+</div><div id="transform-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="transform-expanded"><a name="L403"></a><tt class="py-lineno">403</tt>  <tt class="py-line">    <tt class="py-docstring">"""</tt> </tt>
+<a name="L404"></a><tt class="py-lineno">404</tt>  <tt class="py-line"><tt class="py-docstring">    x2, y2, z2 = transform(p1, p2, x1, y1, z1, radians=False)</tt> </tt>
+<a name="L405"></a><tt class="py-lineno">405</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L406"></a><tt class="py-lineno">406</tt>  <tt class="py-line"><tt class="py-docstring">    Transform points between two coordinate systems defined by the</tt> </tt>
+<a name="L407"></a><tt class="py-lineno">407</tt>  <tt class="py-line"><tt class="py-docstring">    Proj instances p1 and p2.</tt> </tt>
+<a name="L408"></a><tt class="py-lineno">408</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L409"></a><tt class="py-lineno">409</tt>  <tt class="py-line"><tt class="py-docstring">    The points x1,y1,z1 in the coordinate system defined by p1 are</tt> </tt>
+<a name="L410"></a><tt class="py-lineno">410</tt>  <tt class="py-line"><tt class="py-docstring">    transformed to x2,y2,z2 in the coordinate system defined by p2.</tt> </tt>
+<a name="L411"></a><tt class="py-lineno">411</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L412"></a><tt class="py-lineno">412</tt>  <tt class="py-line"><tt class="py-docstring">    z1 is optional, if it is not set it is assumed to be zero (and</tt> </tt>
+<a name="L413"></a><tt class="py-lineno">413</tt>  <tt class="py-line"><tt class="py-docstring">    only x2 and y2 are returned).</tt> </tt>
+<a name="L414"></a><tt class="py-lineno">414</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L415"></a><tt class="py-lineno">415</tt>  <tt class="py-line"><tt class="py-docstring">    In addition to converting between cartographic and geographic</tt> </tt>
+<a name="L416"></a><tt class="py-lineno">416</tt>  <tt class="py-line"><tt class="py-docstring">    projection coordinates, this function can take care of datum</tt> </tt>
+<a name="L417"></a><tt class="py-lineno">417</tt>  <tt class="py-line"><tt class="py-docstring">    shifts (which cannot be done using the __call__ method of the</tt> </tt>
+<a name="L418"></a><tt class="py-lineno">418</tt>  <tt class="py-line"><tt class="py-docstring">    Proj instances). It also allows for one of the coordinate</tt> </tt>
+<a name="L419"></a><tt class="py-lineno">419</tt>  <tt class="py-line"><tt class="py-docstring">    systems to be geographic (proj = 'latlong').</tt> </tt>
+<a name="L420"></a><tt class="py-lineno">420</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L421"></a><tt class="py-lineno">421</tt>  <tt class="py-line"><tt class="py-docstring">    If optional keyword 'radians' is True (default is False) and p1</tt> </tt>
+<a name="L422"></a><tt class="py-lineno">422</tt>  <tt class="py-line"><tt class="py-docstring">    is defined in geographic coordinate (pj.is_latlong() is True),</tt> </tt>
+<a name="L423"></a><tt class="py-lineno">423</tt>  <tt class="py-line"><tt class="py-docstring">    x1,y1 is interpreted as radians instead of the default degrees.</tt> </tt>
+<a name="L424"></a><tt class="py-lineno">424</tt>  <tt class="py-line"><tt class="py-docstring">    Similarly, if p2 is defined in geographic coordinates and</tt> </tt>
+<a name="L425"></a><tt class="py-lineno">425</tt>  <tt class="py-line"><tt class="py-docstring">    radians=True, x2, y2 are returned in radians instead of degrees.</tt> </tt>
+<a name="L426"></a><tt class="py-lineno">426</tt>  <tt class="py-line"><tt class="py-docstring">    if p1.is_latlong() and p2.is_latlong() both are False, the</tt> </tt>
+<a name="L427"></a><tt class="py-lineno">427</tt>  <tt class="py-line"><tt class="py-docstring">    radians keyword has no effect.</tt> </tt>
+<a name="L428"></a><tt class="py-lineno">428</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L429"></a><tt class="py-lineno">429</tt>  <tt class="py-line"><tt class="py-docstring">    x,y and z can be numpy or regular python arrays, python</tt> </tt>
+<a name="L430"></a><tt class="py-lineno">430</tt>  <tt class="py-line"><tt class="py-docstring">    lists/tuples or scalars. Arrays are fastest.  For projections in</tt> </tt>
+<a name="L431"></a><tt class="py-lineno">431</tt>  <tt class="py-line"><tt class="py-docstring">    geocentric coordinates, values of x and y are given in meters.</tt> </tt>
+<a name="L432"></a><tt class="py-lineno">432</tt>  <tt class="py-line"><tt class="py-docstring">    z is always meters.</tt> </tt>
+<a name="L433"></a><tt class="py-lineno">433</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L434"></a><tt class="py-lineno">434</tt>  <tt class="py-line"><tt class="py-docstring">    Example usage:</tt> </tt>
+<a name="L435"></a><tt class="py-lineno">435</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L436"></a><tt class="py-lineno">436</tt>  <tt class="py-line"><tt class="py-docstring">    >>> # projection 1: UTM zone 15, grs80 ellipse, NAD83 datum</tt> </tt>
+<a name="L437"></a><tt class="py-lineno">437</tt>  <tt class="py-line"><tt class="py-docstring">    >>> # (defined by epsg code 26915)</tt> </tt>
+<a name="L438"></a><tt class="py-lineno">438</tt>  <tt class="py-line"><tt class="py-docstring">    >>> p1 = Proj(init='epsg:26915')</tt> </tt>
+<a name="L439"></a><tt class="py-lineno">439</tt>  <tt class="py-line"><tt class="py-docstring">    >>> # projection 2: UTM zone 15, clrk66 ellipse, NAD27 datum</tt> </tt>
+<a name="L440"></a><tt class="py-lineno">440</tt>  <tt class="py-line"><tt class="py-docstring">    >>> p2 = Proj(init='epsg:26715')</tt> </tt>
+<a name="L441"></a><tt class="py-lineno">441</tt>  <tt class="py-line"><tt class="py-docstring">    >>> # find x,y of Jefferson City, MO.</tt> </tt>
+<a name="L442"></a><tt class="py-lineno">442</tt>  <tt class="py-line"><tt class="py-docstring">    >>> x1, y1 = p1(-92.199881,38.56694)</tt> </tt>
+<a name="L443"></a><tt class="py-lineno">443</tt>  <tt class="py-line"><tt class="py-docstring">    >>> # transform this point to projection 2 coordinates.</tt> </tt>
+<a name="L444"></a><tt class="py-lineno">444</tt>  <tt class="py-line"><tt class="py-docstring">    >>> x2, y2 = transform(p1,p2,x1,y1)</tt> </tt>
+<a name="L445"></a><tt class="py-lineno">445</tt>  <tt class="py-line"><tt class="py-docstring">    >>> '%9.3f %11.3f' % (x1,y1)</tt> </tt>
+<a name="L446"></a><tt class="py-lineno">446</tt>  <tt class="py-line"><tt class="py-docstring">    '569704.566 4269024.671'</tt> </tt>
+<a name="L447"></a><tt class="py-lineno">447</tt>  <tt class="py-line"><tt class="py-docstring">    >>> '%9.3f %11.3f' % (x2,y2)</tt> </tt>
+<a name="L448"></a><tt class="py-lineno">448</tt>  <tt class="py-line"><tt class="py-docstring">    '569722.342 4268814.027'</tt> </tt>
+<a name="L449"></a><tt class="py-lineno">449</tt>  <tt class="py-line"><tt class="py-docstring">    >>> '%8.3f %5.3f' % p2(x2,y2,inverse=True)</tt> </tt>
+<a name="L450"></a><tt class="py-lineno">450</tt>  <tt class="py-line"><tt class="py-docstring">    ' -92.200 38.567'</tt> </tt>
+<a name="L451"></a><tt class="py-lineno">451</tt>  <tt class="py-line"><tt class="py-docstring">    >>> # process 3 points at a time in a tuple</tt> </tt>
+<a name="L452"></a><tt class="py-lineno">452</tt>  <tt class="py-line"><tt class="py-docstring">    >>> lats = (38.83,39.32,38.75) # Columbia, KC and StL Missouri</tt> </tt>
+<a name="L453"></a><tt class="py-lineno">453</tt>  <tt class="py-line"><tt class="py-docstring">    >>> lons = (-92.22,-94.72,-90.37)</tt> </tt>
+<a name="L454"></a><tt class="py-lineno">454</tt>  <tt class="py-line"><tt class="py-docstring">    >>> x1, y1 = p1(lons,lats)</tt> </tt>
+<a name="L455"></a><tt class="py-lineno">455</tt>  <tt class="py-line"><tt class="py-docstring">    >>> x2, y2 = transform(p1,p2,x1,y1)</tt> </tt>
+<a name="L456"></a><tt class="py-lineno">456</tt>  <tt class="py-line"><tt class="py-docstring">    >>> xy = x1+y1</tt> </tt>
+<a name="L457"></a><tt class="py-lineno">457</tt>  <tt class="py-line"><tt class="py-docstring">    >>> '%9.3f %9.3f %9.3f %11.3f %11.3f %11.3f' % xy</tt> </tt>
+<a name="L458"></a><tt class="py-lineno">458</tt>  <tt class="py-line"><tt class="py-docstring">    '567703.344 351730.944 728553.093 4298200.739 4353698.725 4292319.005'</tt> </tt>
+<a name="L459"></a><tt class="py-lineno">459</tt>  <tt class="py-line"><tt class="py-docstring">    >>> xy = x2+y2</tt> </tt>
+<a name="L460"></a><tt class="py-lineno">460</tt>  <tt class="py-line"><tt class="py-docstring">    >>> '%9.3f %9.3f %9.3f %11.3f %11.3f %11.3f' % xy</tt> </tt>
+<a name="L461"></a><tt class="py-lineno">461</tt>  <tt class="py-line"><tt class="py-docstring">    '567721.149 351747.558 728569.133 4297989.112 4353489.644 4292106.305'</tt> </tt>
+<a name="L462"></a><tt class="py-lineno">462</tt>  <tt class="py-line"><tt class="py-docstring">    >>> lons, lats = p2(x2,y2,inverse=True)</tt> </tt>
+<a name="L463"></a><tt class="py-lineno">463</tt>  <tt class="py-line"><tt class="py-docstring">    >>> xy = lons+lats</tt> </tt>
+<a name="L464"></a><tt class="py-lineno">464</tt>  <tt class="py-line"><tt class="py-docstring">    >>> '%8.3f %8.3f %8.3f %5.3f %5.3f %5.3f' % xy</tt> </tt>
+<a name="L465"></a><tt class="py-lineno">465</tt>  <tt class="py-line"><tt class="py-docstring">    ' -92.220  -94.720  -90.370 38.830 39.320 38.750'</tt> </tt>
+<a name="L466"></a><tt class="py-lineno">466</tt>  <tt class="py-line"><tt class="py-docstring">    >>> # test datum shifting, installation of extra datum grid files.</tt> </tt>
+<a name="L467"></a><tt class="py-lineno">467</tt>  <tt class="py-line"><tt class="py-docstring">    >>> p1 = Proj(proj='latlong',datum='WGS84')</tt> </tt>
+<a name="L468"></a><tt class="py-lineno">468</tt>  <tt class="py-line"><tt class="py-docstring">    >>> x1 = -111.5; y1 = 45.25919444444</tt> </tt>
+<a name="L469"></a><tt class="py-lineno">469</tt>  <tt class="py-line"><tt class="py-docstring">    >>> p2 = Proj(proj="utm",zone=10,datum='NAD27')</tt> </tt>
+<a name="L470"></a><tt class="py-lineno">470</tt>  <tt class="py-line"><tt class="py-docstring">    >>> x2, y2 = transform(p1, p2, x1, y1)</tt> </tt>
+<a name="L471"></a><tt class="py-lineno">471</tt>  <tt class="py-line"><tt class="py-docstring">    >>> "%12.3f %12.3f" % (x2,y2)</tt> </tt>
+<a name="L472"></a><tt class="py-lineno">472</tt>  <tt class="py-line"><tt class="py-docstring">    ' 1402285.991  5076292.423'</tt> </tt>
+<a name="L473"></a><tt class="py-lineno">473</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L474"></a><tt class="py-lineno">474</tt>  <tt class="py-line">    <tt class="py-comment"># process inputs, making copies that support buffer API.</tt> </tt>
+<a name="L475"></a><tt class="py-lineno">475</tt>  <tt class="py-line">    <tt class="py-name">inx</tt><tt class="py-op">,</tt> <tt class="py-name">xisfloat</tt><tt class="py-op">,</tt> <tt class="py-name">xislist</tt><tt class="py-op">,</tt> <tt class="py-name">xistuple</tt> <tt class="py-op">=</tt> <tt class="py-name">_copytobuffer</tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">)</tt> </tt>
+<a name="L476"></a><tt class="py-lineno">476</tt>  <tt class="py-line">    <tt class="py-name">iny</tt><tt class="py-op">,</tt> <tt class="py-name">yisfloat</tt><tt class="py-op">,</tt> <tt class="py-name">yislist</tt><tt class="py-op">,</tt> <tt class="py-name">yistuple</tt> <tt class="py-op">=</tt> <tt class="py-name">_copytobuffer</tt><tt class="py-op">(</tt><tt class="py-name">y</tt><tt class="py-op">)</tt> </tt>
+<a name="L477"></a><tt class="py-lineno">477</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">z</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L478"></a><tt class="py-lineno">478</tt>  <tt class="py-line">        <tt class="py-name">inz</tt><tt class="py-op">,</tt> <tt class="py-name">zisfloat</tt><tt class="py-op">,</tt> <tt class="py-name">zislist</tt><tt class="py-op">,</tt> <tt class="py-name">zistuple</tt> <tt class="py-op">=</tt> <tt class="py-name">_copytobuffer</tt><tt class="py-op">(</tt><tt class="py-name">z</tt><tt class="py-op">)</tt> </tt>
+<a name="L479"></a><tt class="py-lineno">479</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L480"></a><tt class="py-lineno">480</tt>  <tt class="py-line">        <tt class="py-name">inz</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L481"></a><tt class="py-lineno">481</tt>  <tt class="py-line">    <tt class="py-comment"># call pj_transform.  inx,iny,inz buffers modified in place.</tt> </tt>
+<a name="L482"></a><tt class="py-lineno">482</tt>  <tt class="py-line">    <tt class="py-name">_proj</tt><tt class="py-op">.</tt><tt class="py-name">_transform</tt><tt class="py-op">(</tt><tt class="py-name">p1</tt><tt class="py-op">,</tt><tt class="py-name">p2</tt><tt class="py-op">,</tt><tt class="py-name">inx</tt><tt class="py-op">,</tt><tt class="py-name">iny</tt><tt class="py-op">,</tt><tt class="py-name">inz</tt><tt class="py-op">,</tt><tt class="py-name">radians</tt><tt class="py- [...]
+<a name="L483"></a><tt class="py-lineno">483</tt>  <tt class="py-line">    <tt class="py-comment"># if inputs were lists, tuples or floats, convert back.</tt> </tt>
+<a name="L484"></a><tt class="py-lineno">484</tt>  <tt class="py-line">    <tt class="py-name">outx</tt> <tt class="py-op">=</tt> <tt class="py-name">_convertback</tt><tt class="py-op">(</tt><tt class="py-name">xisfloat</tt><tt class="py-op">,</tt><tt class="py-name">xislist</tt><tt class="py-op">,</tt><tt class="py-name">xistuple</tt><tt class="py-op">,</tt><tt class="py-name">inx</tt><tt class="py-op">)</tt> </tt>
+<a name="L485"></a><tt class="py-lineno">485</tt>  <tt class="py-line">    <tt class="py-name">outy</tt> <tt class="py-op">=</tt> <tt class="py-name">_convertback</tt><tt class="py-op">(</tt><tt class="py-name">yisfloat</tt><tt class="py-op">,</tt><tt class="py-name">yislist</tt><tt class="py-op">,</tt><tt class="py-name">xistuple</tt><tt class="py-op">,</tt><tt class="py-name">iny</tt><tt class="py-op">)</tt> </tt>
+<a name="L486"></a><tt class="py-lineno">486</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">inz</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L487"></a><tt class="py-lineno">487</tt>  <tt class="py-line">        <tt class="py-name">outz</tt> <tt class="py-op">=</tt> <tt class="py-name">_convertback</tt><tt class="py-op">(</tt><tt class="py-name">zisfloat</tt><tt class="py-op">,</tt><tt class="py-name">zislist</tt><tt class="py-op">,</tt><tt class="py-name">zistuple</tt><tt class="py-op">,</tt><tt class="py-name">inz</tt><tt class="py-op">)</tt> </tt>
+<a name="L488"></a><tt class="py-lineno">488</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">outx</tt><tt class="py-op">,</tt> <tt class="py-name">outy</tt><tt class="py-op">,</tt> <tt class="py-name">outz</tt> </tt>
+<a name="L489"></a><tt class="py-lineno">489</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L490"></a><tt class="py-lineno">490</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">outx</tt><tt class="py-op">,</tt> <tt class="py-name">outy</tt> </tt>
+</div><a name="L491"></a><tt class="py-lineno">491</tt>  <tt class="py-line"> </tt>
+<a name="_copytobuffer_return_scalar"></a><div id="_copytobuffer_return_scalar-def"><a name="L492"></a><tt class="py-lineno">492</tt> <a class="py-toggle" href="#" id="_copytobuffer_return_scalar-toggle" onclick="return toggle('_copytobuffer_return_scalar');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="pyproj-module.html#_copytobuffer_return_scalar">_copytobuffer_return_scalar</a><tt class="py-op">(</tt><tt class="py-param">x</tt><tt class="py-op [...]
+</div><div id="_copytobuffer_return_scalar-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_copytobuffer_return_scalar-expanded"><a name="L493"></a><tt class="py-lineno">493</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L494"></a><tt class="py-lineno">494</tt>  <tt class="py-line">        <tt class="py-comment"># inx,isfloat,islist,istuple</tt> </tt>
+<a name="L495"></a><tt class="py-lineno">495</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">array</tt><tt class="py-op">(</tt><tt class="py-string">'d'</tt><tt class="py-op">,</tt><tt class="py-op">(</tt><tt class="py-name">float</tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">)</tt><tt class="py-op">,</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt><tt class="py-name">True</tt><tt class="py-op" [...]
+<a name="L496"></a><tt class="py-lineno">496</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L497"></a><tt class="py-lineno">497</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'input must be an array, list, tuple or scalar'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L498"></a><tt class="py-lineno">498</tt>  <tt class="py-line"> </tt>
+<a name="_copytobuffer"></a><div id="_copytobuffer-def"><a name="L499"></a><tt class="py-lineno">499</tt> <a class="py-toggle" href="#" id="_copytobuffer-toggle" onclick="return toggle('_copytobuffer');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="pyproj-module.html#_copytobuffer">_copytobuffer</a><tt class="py-op">(</tt><tt class="py-param">x</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_copytobuffer-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_copytobuffer-expanded"><a name="L500"></a><tt class="py-lineno">500</tt>  <tt class="py-line">    <tt class="py-docstring">"""</tt> </tt>
+<a name="L501"></a><tt class="py-lineno">501</tt>  <tt class="py-line"><tt class="py-docstring">    return a copy of x as an object that supports the python Buffer</tt> </tt>
+<a name="L502"></a><tt class="py-lineno">502</tt>  <tt class="py-line"><tt class="py-docstring">    API (python array if input is float, list or tuple, numpy array</tt> </tt>
+<a name="L503"></a><tt class="py-lineno">503</tt>  <tt class="py-line"><tt class="py-docstring">    if input is a numpy array). returns copyofx, isfloat, islist,</tt> </tt>
+<a name="L504"></a><tt class="py-lineno">504</tt>  <tt class="py-line"><tt class="py-docstring">    istuple (islist is True if input is a list, istuple is true if</tt> </tt>
+<a name="L505"></a><tt class="py-lineno">505</tt>  <tt class="py-line"><tt class="py-docstring">    input is a tuple, isfloat is true if input is a float).</tt> </tt>
+<a name="L506"></a><tt class="py-lineno">506</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L507"></a><tt class="py-lineno">507</tt>  <tt class="py-line">    <tt class="py-comment"># make sure x supports Buffer API and contains doubles.</tt> </tt>
+<a name="L508"></a><tt class="py-lineno">508</tt>  <tt class="py-line">    <tt class="py-name">isfloat</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt><tt class="py-op">;</tt> <tt class="py-name">islist</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt><tt class="py-op">;</tt> <tt class="py-name">istuple</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L509"></a><tt class="py-lineno">509</tt>  <tt class="py-line">    <tt class="py-comment"># first, if it's a numpy array scalar convert to float</tt> </tt>
+<a name="L510"></a><tt class="py-lineno">510</tt>  <tt class="py-line">    <tt class="py-comment"># (array scalars don't support buffer API)</tt> </tt>
+<a name="L511"></a><tt class="py-lineno">511</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt><tt class="py-string">'shape'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L512"></a><tt class="py-lineno">512</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">x</tt><tt class="py-op">.</tt><tt class="py-name">shape</tt> <tt class="py-op">==</tt> <tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L513"></a><tt class="py-lineno">513</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">_copytobuffer_return_scalar</tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">)</tt> </tt>
+<a name="L514"></a><tt class="py-lineno">514</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L515"></a><tt class="py-lineno">515</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L516"></a><tt class="py-lineno">516</tt>  <tt class="py-line">                <tt class="py-comment"># typecast numpy arrays to double.</tt> </tt>
+<a name="L517"></a><tt class="py-lineno">517</tt>  <tt class="py-line">                <tt class="py-comment"># (this makes a copy - which is crucial</tt> </tt>
+<a name="L518"></a><tt class="py-lineno">518</tt>  <tt class="py-line">                <tt class="py-comment">#  since buffer is modified in place)</tt> </tt>
+<a name="L519"></a><tt class="py-lineno">519</tt>  <tt class="py-line">                <tt class="py-name">x</tt><tt class="py-op">.</tt><tt class="py-name">dtype</tt><tt class="py-op">.</tt><tt class="py-name">char</tt> </tt>
+<a name="L520"></a><tt class="py-lineno">520</tt>  <tt class="py-line">                <tt class="py-name">inx</tt> <tt class="py-op">=</tt> <tt class="py-name">x</tt><tt class="py-op">.</tt><tt class="py-name">astype</tt><tt class="py-op">(</tt><tt class="py-string">'d'</tt><tt class="py-op">)</tt> </tt>
+<a name="L521"></a><tt class="py-lineno">521</tt>  <tt class="py-line">                <tt class="py-comment"># inx,isfloat,islist,istuple</tt> </tt>
+<a name="L522"></a><tt class="py-lineno">522</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-name">inx</tt><tt class="py-op">,</tt><tt class="py-name">False</tt><tt class="py-op">,</tt><tt class="py-name">False</tt><tt class="py-op">,</tt><tt class="py-name">False</tt> </tt>
+<a name="L523"></a><tt class="py-lineno">523</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L524"></a><tt class="py-lineno">524</tt>  <tt class="py-line">                <tt class="py-keyword">try</tt><tt class="py-op">:</tt> <tt class="py-comment"># perhaps they are Numeric/numarrays?</tt> </tt>
+<a name="L525"></a><tt class="py-lineno">525</tt>  <tt class="py-line">                    <tt class="py-comment"># sorry, not tested yet.</tt> </tt>
+<a name="L526"></a><tt class="py-lineno">526</tt>  <tt class="py-line">                    <tt class="py-comment"># i don't know Numeric/numarrays has `shape'.</tt> </tt>
+<a name="L527"></a><tt class="py-lineno">527</tt>  <tt class="py-line">                    <tt class="py-name">x</tt><tt class="py-op">.</tt><tt class="py-name">typecode</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L528"></a><tt class="py-lineno">528</tt>  <tt class="py-line">                    <tt class="py-name">inx</tt> <tt class="py-op">=</tt> <tt class="py-name">x</tt><tt class="py-op">.</tt><tt class="py-name">astype</tt><tt class="py-op">(</tt><tt class="py-string">'d'</tt><tt class="py-op">)</tt> </tt>
+<a name="L529"></a><tt class="py-lineno">529</tt>  <tt class="py-line">                    <tt class="py-comment"># inx,isfloat,islist,istuple</tt> </tt>
+<a name="L530"></a><tt class="py-lineno">530</tt>  <tt class="py-line">                    <tt class="py-keyword">return</tt> <tt class="py-name">inx</tt><tt class="py-op">,</tt><tt class="py-name">False</tt><tt class="py-op">,</tt><tt class="py-name">False</tt><tt class="py-op">,</tt><tt class="py-name">False</tt> </tt>
+<a name="L531"></a><tt class="py-lineno">531</tt>  <tt class="py-line">                <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L532"></a><tt class="py-lineno">532</tt>  <tt class="py-line">                    <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'input must be an array, list, tuple or scalar'</tt><tt class="py-op">)</tt> </tt>
+<a name="L533"></a><tt class="py-lineno">533</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L534"></a><tt class="py-lineno">534</tt>  <tt class="py-line">        <tt class="py-comment"># perhaps they are regular python arrays?</tt> </tt>
+<a name="L535"></a><tt class="py-lineno">535</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-string">'typecode'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L536"></a><tt class="py-lineno">536</tt>  <tt class="py-line">            <tt class="py-comment">#x.typecode</tt> </tt>
+<a name="L537"></a><tt class="py-lineno">537</tt>  <tt class="py-line">            <tt class="py-name">inx</tt> <tt class="py-op">=</tt> <tt class="py-name">array</tt><tt class="py-op">(</tt><tt class="py-string">'d'</tt><tt class="py-op">,</tt><tt class="py-name">x</tt><tt class="py-op">)</tt> </tt>
+<a name="L538"></a><tt class="py-lineno">538</tt>  <tt class="py-line">        <tt class="py-comment"># try to convert to python array</tt> </tt>
+<a name="L539"></a><tt class="py-lineno">539</tt>  <tt class="py-line">        <tt class="py-comment"># a list.</tt> </tt>
+<a name="L540"></a><tt class="py-lineno">540</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">list</tt><tt class="py-op">:</tt> </tt>
+<a name="L541"></a><tt class="py-lineno">541</tt>  <tt class="py-line">            <tt class="py-name">inx</tt> <tt class="py-op">=</tt> <tt class="py-name">array</tt><tt class="py-op">(</tt><tt class="py-string">'d'</tt><tt class="py-op">,</tt><tt class="py-name">x</tt><tt class="py-op">)</tt> </tt>
+<a name="L542"></a><tt class="py-lineno">542</tt>  <tt class="py-line">            <tt class="py-name">islist</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L543"></a><tt class="py-lineno">543</tt>  <tt class="py-line">        <tt class="py-comment"># a tuple.</tt> </tt>
+<a name="L544"></a><tt class="py-lineno">544</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">tuple</tt><tt class="py-op">:</tt> </tt>
+<a name="L545"></a><tt class="py-lineno">545</tt>  <tt class="py-line">            <tt class="py-name">inx</tt> <tt class="py-op">=</tt> <tt class="py-name">array</tt><tt class="py-op">(</tt><tt class="py-string">'d'</tt><tt class="py-op">,</tt><tt class="py-name">x</tt><tt class="py-op">)</tt> </tt>
+<a name="L546"></a><tt class="py-lineno">546</tt>  <tt class="py-line">            <tt class="py-name">istuple</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L547"></a><tt class="py-lineno">547</tt>  <tt class="py-line">        <tt class="py-comment"># a scalar?</tt> </tt>
+<a name="L548"></a><tt class="py-lineno">548</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L549"></a><tt class="py-lineno">549</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">_copytobuffer_return_scalar</tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">)</tt> </tt>
+<a name="L550"></a><tt class="py-lineno">550</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">inx</tt><tt class="py-op">,</tt><tt class="py-name">isfloat</tt><tt class="py-op">,</tt><tt class="py-name">islist</tt><tt class="py-op">,</tt><tt class="py-name">istuple</tt> </tt>
+</div><a name="L551"></a><tt class="py-lineno">551</tt>  <tt class="py-line"> </tt>
+<a name="_convertback"></a><div id="_convertback-def"><a name="L552"></a><tt class="py-lineno">552</tt> <a class="py-toggle" href="#" id="_convertback-toggle" onclick="return toggle('_convertback');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="pyproj-module.html#_convertback">_convertback</a><tt class="py-op">(</tt><tt class="py-param">isfloat</tt><tt class="py-op">,</tt><tt class="py-param">islist</tt><tt class="py-op">,</tt><tt class="py-param" [...]
+</div><div id="_convertback-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_convertback-expanded"><a name="L553"></a><tt class="py-lineno">553</tt>  <tt class="py-line">    <tt class="py-comment"># if inputs were lists, tuples or floats, convert back to original type.</tt> </tt>
+<a name="L554"></a><tt class="py-lineno">554</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">isfloat</tt><tt class="py-op">:</tt> </tt>
+<a name="L555"></a><tt class="py-lineno">555</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">inx</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
+<a name="L556"></a><tt class="py-lineno">556</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-name">islist</tt><tt class="py-op">:</tt> </tt>
+<a name="L557"></a><tt class="py-lineno">557</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">inx</tt><tt class="py-op">.</tt><tt class="py-name">tolist</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L558"></a><tt class="py-lineno">558</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-name">istuple</tt><tt class="py-op">:</tt> </tt>
+<a name="L559"></a><tt class="py-lineno">559</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">tuple</tt><tt class="py-op">(</tt><tt class="py-name">inx</tt><tt class="py-op">)</tt> </tt>
+<a name="L560"></a><tt class="py-lineno">560</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L561"></a><tt class="py-lineno">561</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">inx</tt> </tt>
+</div><a name="L562"></a><tt class="py-lineno">562</tt>  <tt class="py-line"> </tt>
+<a name="_dict2string"></a><div id="_dict2string-def"><a name="L563"></a><tt class="py-lineno">563</tt> <a class="py-toggle" href="#" id="_dict2string-toggle" onclick="return toggle('_dict2string');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="pyproj-module.html#_dict2string">_dict2string</a><tt class="py-op">(</tt><tt class="py-param">projparams</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_dict2string-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_dict2string-expanded"><a name="L564"></a><tt class="py-lineno">564</tt>  <tt class="py-line">    <tt class="py-comment"># convert a dict to a proj4 string.</tt> </tt>
+<a name="L565"></a><tt class="py-lineno">565</tt>  <tt class="py-line">    <tt class="py-name">pjargs</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L566"></a><tt class="py-lineno">566</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">key</tt><tt class="py-op">,</tt><tt class="py-name">value</tt> <tt class="py-keyword">in</tt> <tt class="py-name">projparams</tt><tt class="py-op">.</tt><tt class="py-name">items</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L567"></a><tt class="py-lineno">567</tt>  <tt class="py-line">        <tt class="py-name">pjargs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'+'</tt><tt class="py-op">+</tt><tt class="py-name">key</tt><tt class="py-op">+</tt><tt class="py-string">"="</tt><tt class="py-op">+</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">+</tt><tt class="py [...]
+<a name="L568"></a><tt class="py-lineno">568</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">pjargs</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L569"></a><tt class="py-lineno">569</tt>  <tt class="py-line"> </tt>
+<a name="Geod"></a><div id="Geod-def"><a name="L570"></a><tt class="py-lineno">570</tt> <a class="py-toggle" href="#" id="Geod-toggle" onclick="return toggle('Geod');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="pyproj.Geod-class.html">Geod</a><tt class="py-op">(</tt><tt class="py-base-class">_proj</tt><tt class="py-op">.</tt><tt class="py-base-class">Geod</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Geod-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="Geod-expanded"><a name="L571"></a><tt class="py-lineno">571</tt>  <tt class="py-line">    <tt class="py-docstring">"""</tt> </tt>
+<a name="L572"></a><tt class="py-lineno">572</tt>  <tt class="py-line"><tt class="py-docstring">    performs forward and inverse geodetic, or Great Circle,</tt> </tt>
+<a name="L573"></a><tt class="py-lineno">573</tt>  <tt class="py-line"><tt class="py-docstring">    computations.  The forward computation (using the 'fwd' method)</tt> </tt>
+<a name="L574"></a><tt class="py-lineno">574</tt>  <tt class="py-line"><tt class="py-docstring">    involves determining latitude, longitude and back azimuth of a</tt> </tt>
+<a name="L575"></a><tt class="py-lineno">575</tt>  <tt class="py-line"><tt class="py-docstring">    computations.  The forward computation (using the 'fwd' method)</tt> </tt>
+<a name="L576"></a><tt class="py-lineno">576</tt>  <tt class="py-line"><tt class="py-docstring">    involves determining latitude, longitude and back azimuth of a</tt> </tt>
+<a name="L577"></a><tt class="py-lineno">577</tt>  <tt class="py-line"><tt class="py-docstring">    terminus point given the latitude and longitude of an initial</tt> </tt>
+<a name="L578"></a><tt class="py-lineno">578</tt>  <tt class="py-line"><tt class="py-docstring">    point, plus azimuth and distance. The inverse computation (using</tt> </tt>
+<a name="L579"></a><tt class="py-lineno">579</tt>  <tt class="py-line"><tt class="py-docstring">    the 'inv' method) involves determining the forward and back</tt> </tt>
+<a name="L580"></a><tt class="py-lineno">580</tt>  <tt class="py-line"><tt class="py-docstring">    azimuths and distance given the latitudes and longitudes of an</tt> </tt>
+<a name="L581"></a><tt class="py-lineno">581</tt>  <tt class="py-line"><tt class="py-docstring">    initial and terminus point.</tt> </tt>
+<a name="L582"></a><tt class="py-lineno">582</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="Geod.__new__"></a><div id="Geod.__new__-def"><a name="L583"></a><tt class="py-lineno">583</tt> <a class="py-toggle" href="#" id="Geod.__new__-toggle" onclick="return toggle('Geod.__new__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="pyproj.Geod-class.html#__new__">__new__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">initstring</tt><tt class="py-op">=</tt><tt class="py-name"> [...]
+</div><div id="Geod.__new__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Geod.__new__-expanded"><a name="L584"></a><tt class="py-lineno">584</tt>  <tt class="py-line">        <tt class="py-docstring">"""</tt> </tt>
+<a name="L585"></a><tt class="py-lineno">585</tt>  <tt class="py-line"><tt class="py-docstring">        initialize a Geod class instance.</tt> </tt>
+<a name="L586"></a><tt class="py-lineno">586</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L587"></a><tt class="py-lineno">587</tt>  <tt class="py-line"><tt class="py-docstring">        Geodetic parameters for specifying the ellipsoid</tt> </tt>
+<a name="L588"></a><tt class="py-lineno">588</tt>  <tt class="py-line"><tt class="py-docstring">        can be given in a dictionary 'initparams', as keyword arguments,</tt> </tt>
+<a name="L589"></a><tt class="py-lineno">589</tt>  <tt class="py-line"><tt class="py-docstring">        or as as proj4 geod initialization string.</tt> </tt>
+<a name="L590"></a><tt class="py-lineno">590</tt>  <tt class="py-line"><tt class="py-docstring">        Following is a list of the ellipsoids that may be defined using the</tt> </tt>
+<a name="L591"></a><tt class="py-lineno">591</tt>  <tt class="py-line"><tt class="py-docstring">        'ellps' keyword (these are stored in the model variable pj_ellps)::</tt> </tt>
+<a name="L592"></a><tt class="py-lineno">592</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L593"></a><tt class="py-lineno">593</tt>  <tt class="py-line"><tt class="py-docstring">           MERIT a=6378137.0      rf=298.257       MERIT 1983</tt> </tt>
+<a name="L594"></a><tt class="py-lineno">594</tt>  <tt class="py-line"><tt class="py-docstring">           SGS85 a=6378136.0      rf=298.257       Soviet Geodetic System 85</tt> </tt>
+<a name="L595"></a><tt class="py-lineno">595</tt>  <tt class="py-line"><tt class="py-docstring">           GRS80 a=6378137.0      rf=298.257222101 GRS 1980(IUGG, 1980)</tt> </tt>
+<a name="L596"></a><tt class="py-lineno">596</tt>  <tt class="py-line"><tt class="py-docstring">           IAU76 a=6378140.0      rf=298.257       IAU 1976</tt> </tt>
+<a name="L597"></a><tt class="py-lineno">597</tt>  <tt class="py-line"><tt class="py-docstring">           airy a=6377563.396     b=6356256.910    Airy 1830</tt> </tt>
+<a name="L598"></a><tt class="py-lineno">598</tt>  <tt class="py-line"><tt class="py-docstring">           APL4.9 a=6378137.0.    rf=298.25        Appl. Physics. 1965</tt> </tt>
+<a name="L599"></a><tt class="py-lineno">599</tt>  <tt class="py-line"><tt class="py-docstring">           airy a=6377563.396     b=6356256.910    Airy 1830</tt> </tt>
+<a name="L600"></a><tt class="py-lineno">600</tt>  <tt class="py-line"><tt class="py-docstring">           APL4.9 a=6378137.0.    rf=298.25        Appl. Physics. 1965</tt> </tt>
+<a name="L601"></a><tt class="py-lineno">601</tt>  <tt class="py-line"><tt class="py-docstring">           NWL9D a=6378145.0.     rf=298.25        Naval Weapons Lab., 1965</tt> </tt>
+<a name="L602"></a><tt class="py-lineno">602</tt>  <tt class="py-line"><tt class="py-docstring">           mod_airy a=6377340.189 b=6356034.446    Modified Airy</tt> </tt>
+<a name="L603"></a><tt class="py-lineno">603</tt>  <tt class="py-line"><tt class="py-docstring">           andrae a=6377104.43    rf=300.0         Andrae 1876 (Den., Iclnd.)</tt> </tt>
+<a name="L604"></a><tt class="py-lineno">604</tt>  <tt class="py-line"><tt class="py-docstring">           aust_SA a=6378160.0    rf=298.25        Australian Natl & S. Amer. 1969</tt> </tt>
+<a name="L605"></a><tt class="py-lineno">605</tt>  <tt class="py-line"><tt class="py-docstring">           GRS67 a=6378160.0      rf=298.247167427 GRS 67(IUGG 1967)</tt> </tt>
+<a name="L606"></a><tt class="py-lineno">606</tt>  <tt class="py-line"><tt class="py-docstring">           bessel a=6377397.155   rf=299.1528128   Bessel 1841</tt> </tt>
+<a name="L607"></a><tt class="py-lineno">607</tt>  <tt class="py-line"><tt class="py-docstring">           bess_nam a=6377483.865 rf=299.1528128   Bessel 1841 (Namibia)</tt> </tt>
+<a name="L608"></a><tt class="py-lineno">608</tt>  <tt class="py-line"><tt class="py-docstring">           clrk66 a=6378206.4     b=6356583.8      Clarke 1866</tt> </tt>
+<a name="L609"></a><tt class="py-lineno">609</tt>  <tt class="py-line"><tt class="py-docstring">           clrk80 a=6378249.145   rf=293.4663      Clarke 1880 mod.</tt> </tt>
+<a name="L610"></a><tt class="py-lineno">610</tt>  <tt class="py-line"><tt class="py-docstring">           CPM a=6375738.7        rf=334.29        Comm. des Poids et Mesures 1799</tt> </tt>
+<a name="L611"></a><tt class="py-lineno">611</tt>  <tt class="py-line"><tt class="py-docstring">           delmbr a=6376428.      rf=311.5         Delambre 1810 (Belgium)</tt> </tt>
+<a name="L612"></a><tt class="py-lineno">612</tt>  <tt class="py-line"><tt class="py-docstring">           engelis a=6378136.05   rf=298.2566      Engelis 1985</tt> </tt>
+<a name="L613"></a><tt class="py-lineno">613</tt>  <tt class="py-line"><tt class="py-docstring">           evrst30 a=6377276.345  rf=300.8017      Everest 1830</tt> </tt>
+<a name="L614"></a><tt class="py-lineno">614</tt>  <tt class="py-line"><tt class="py-docstring">           evrst48 a=6377304.063  rf=300.8017      Everest 1948</tt> </tt>
+<a name="L615"></a><tt class="py-lineno">615</tt>  <tt class="py-line"><tt class="py-docstring">           evrst56 a=6377301.243  rf=300.8017      Everest 1956</tt> </tt>
+<a name="L616"></a><tt class="py-lineno">616</tt>  <tt class="py-line"><tt class="py-docstring">           evrst69 a=6377295.664  rf=300.8017      Everest 1969</tt> </tt>
+<a name="L617"></a><tt class="py-lineno">617</tt>  <tt class="py-line"><tt class="py-docstring">           evrstSS a=6377298.556  rf=300.8017      Everest (Sabah & Sarawak)</tt> </tt>
+<a name="L618"></a><tt class="py-lineno">618</tt>  <tt class="py-line"><tt class="py-docstring">           fschr60 a=6378166.     rf=298.3         Fischer (Mercury Datum) 1960</tt> </tt>
+<a name="L619"></a><tt class="py-lineno">619</tt>  <tt class="py-line"><tt class="py-docstring">           fschr60m a=6378155.    rf=298.3         Modified Fischer 1960</tt> </tt>
+<a name="L620"></a><tt class="py-lineno">620</tt>  <tt class="py-line"><tt class="py-docstring">           fschr68 a=6378150.     rf=298.3         Fischer 1968</tt> </tt>
+<a name="L621"></a><tt class="py-lineno">621</tt>  <tt class="py-line"><tt class="py-docstring">           helmert a=6378200.     rf=298.3         Helmert 1906</tt> </tt>
+<a name="L622"></a><tt class="py-lineno">622</tt>  <tt class="py-line"><tt class="py-docstring">           hough a=6378270.0      rf=297.          Hough</tt> </tt>
+<a name="L623"></a><tt class="py-lineno">623</tt>  <tt class="py-line"><tt class="py-docstring">           helmert a=6378200.     rf=298.3         Helmert 1906</tt> </tt>
+<a name="L624"></a><tt class="py-lineno">624</tt>  <tt class="py-line"><tt class="py-docstring">           hough a=6378270.0      rf=297.          Hough</tt> </tt>
+<a name="L625"></a><tt class="py-lineno">625</tt>  <tt class="py-line"><tt class="py-docstring">           intl a=6378388.0       rf=297.          International 1909 (Hayford)</tt> </tt>
+<a name="L626"></a><tt class="py-lineno">626</tt>  <tt class="py-line"><tt class="py-docstring">           krass a=6378245.0      rf=298.3         Krassovsky, 1942</tt> </tt>
+<a name="L627"></a><tt class="py-lineno">627</tt>  <tt class="py-line"><tt class="py-docstring">           kaula a=6378163.       rf=298.24        Kaula 1961</tt> </tt>
+<a name="L628"></a><tt class="py-lineno">628</tt>  <tt class="py-line"><tt class="py-docstring">           lerch a=6378139.       rf=298.257       Lerch 1979</tt> </tt>
+<a name="L629"></a><tt class="py-lineno">629</tt>  <tt class="py-line"><tt class="py-docstring">           mprts a=6397300.       rf=191.          Maupertius 1738</tt> </tt>
+<a name="L630"></a><tt class="py-lineno">630</tt>  <tt class="py-line"><tt class="py-docstring">           new_intl a=6378157.5   b=6356772.2      New International 1967</tt> </tt>
+<a name="L631"></a><tt class="py-lineno">631</tt>  <tt class="py-line"><tt class="py-docstring">           plessis a=6376523.     b=6355863.       Plessis 1817 (France)</tt> </tt>
+<a name="L632"></a><tt class="py-lineno">632</tt>  <tt class="py-line"><tt class="py-docstring">           SEasia a=6378155.0     b=6356773.3205   Southeast Asia</tt> </tt>
+<a name="L633"></a><tt class="py-lineno">633</tt>  <tt class="py-line"><tt class="py-docstring">           walbeck a=6376896.0    b=6355834.8467   Walbeck</tt> </tt>
+<a name="L634"></a><tt class="py-lineno">634</tt>  <tt class="py-line"><tt class="py-docstring">           WGS60 a=6378165.0      rf=298.3         WGS 60</tt> </tt>
+<a name="L635"></a><tt class="py-lineno">635</tt>  <tt class="py-line"><tt class="py-docstring">           WGS66 a=6378145.0      rf=298.25        WGS 66</tt> </tt>
+<a name="L636"></a><tt class="py-lineno">636</tt>  <tt class="py-line"><tt class="py-docstring">           WGS72 a=6378135.0      rf=298.26        WGS 72</tt> </tt>
+<a name="L637"></a><tt class="py-lineno">637</tt>  <tt class="py-line"><tt class="py-docstring">           WGS84 a=6378137.0      rf=298.257223563 WGS 84</tt> </tt>
+<a name="L638"></a><tt class="py-lineno">638</tt>  <tt class="py-line"><tt class="py-docstring">           sphere a=6370997.0     b=6370997.0      Normal Sphere (r=6370997)</tt> </tt>
+<a name="L639"></a><tt class="py-lineno">639</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L640"></a><tt class="py-lineno">640</tt>  <tt class="py-line"><tt class="py-docstring">        The parameters of the ellipsoid may also be set directly using</tt> </tt>
+<a name="L641"></a><tt class="py-lineno">641</tt>  <tt class="py-line"><tt class="py-docstring">        the 'a' (semi-major or equatorial axis radius) keyword, and</tt> </tt>
+<a name="L642"></a><tt class="py-lineno">642</tt>  <tt class="py-line"><tt class="py-docstring">        any one of the following keywords: 'b' (semi-minor,</tt> </tt>
+<a name="L643"></a><tt class="py-lineno">643</tt>  <tt class="py-line"><tt class="py-docstring">        or polar axis radius), 'e' (eccentricity), 'es' (eccentricity</tt> </tt>
+<a name="L644"></a><tt class="py-lineno">644</tt>  <tt class="py-line"><tt class="py-docstring">        squared), 'f' (flattening), or 'rf' (reciprocal flattening).</tt> </tt>
+<a name="L645"></a><tt class="py-lineno">645</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L646"></a><tt class="py-lineno">646</tt>  <tt class="py-line"><tt class="py-docstring">        See the proj documentation (http://trac.osgeo.org/proj/) for more</tt> </tt>
+<a name="L647"></a><tt class="py-lineno">647</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L648"></a><tt class="py-lineno">648</tt>  <tt class="py-line"><tt class="py-docstring">        See the proj documentation (http://trac.osgeo.org/proj/) for more</tt> </tt>
+<a name="L649"></a><tt class="py-lineno">649</tt>  <tt class="py-line"><tt class="py-docstring">        information about specifying ellipsoid parameters (specifically,</tt> </tt>
+<a name="L650"></a><tt class="py-lineno">650</tt>  <tt class="py-line"><tt class="py-docstring">        the chapter 'Specifying the Earth's figure' in the main Proj</tt> </tt>
+<a name="L651"></a><tt class="py-lineno">651</tt>  <tt class="py-line"><tt class="py-docstring">        users manual).</tt> </tt>
+<a name="L652"></a><tt class="py-lineno">652</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L653"></a><tt class="py-lineno">653</tt>  <tt class="py-line"><tt class="py-docstring">        Example usage:</tt> </tt>
+<a name="L654"></a><tt class="py-lineno">654</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L655"></a><tt class="py-lineno">655</tt>  <tt class="py-line"><tt class="py-docstring">        >>> from pyproj import Geod</tt> </tt>
+<a name="L656"></a><tt class="py-lineno">656</tt>  <tt class="py-line"><tt class="py-docstring">        >>> g = Geod(ellps='clrk66') # Use Clarke 1966 ellipsoid.</tt> </tt>
+<a name="L657"></a><tt class="py-lineno">657</tt>  <tt class="py-line"><tt class="py-docstring">        >>> # specify the lat/lons of some cities.</tt> </tt>
+<a name="L658"></a><tt class="py-lineno">658</tt>  <tt class="py-line"><tt class="py-docstring">        >>> boston_lat = 42.+(15./60.); boston_lon = -71.-(7./60.)</tt> </tt>
+<a name="L659"></a><tt class="py-lineno">659</tt>  <tt class="py-line"><tt class="py-docstring">        >>> portland_lat = 45.+(31./60.); portland_lon = -123.-(41./60.)</tt> </tt>
+<a name="L660"></a><tt class="py-lineno">660</tt>  <tt class="py-line"><tt class="py-docstring">        >>> newyork_lat = 40.+(47./60.); newyork_lon = -73.-(58./60.)</tt> </tt>
+<a name="L661"></a><tt class="py-lineno">661</tt>  <tt class="py-line"><tt class="py-docstring">        >>> london_lat = 51.+(32./60.); london_lon = -(5./60.)</tt> </tt>
+<a name="L662"></a><tt class="py-lineno">662</tt>  <tt class="py-line"><tt class="py-docstring">        >>> # compute forward and back azimuths, plus distance</tt> </tt>
+<a name="L663"></a><tt class="py-lineno">663</tt>  <tt class="py-line"><tt class="py-docstring">        >>> # between Boston and Portland.</tt> </tt>
+<a name="L664"></a><tt class="py-lineno">664</tt>  <tt class="py-line"><tt class="py-docstring">        >>> az12,az21,dist = g.inv(boston_lon,boston_lat,portland_lon,portland_lat)</tt> </tt>
+<a name="L665"></a><tt class="py-lineno">665</tt>  <tt class="py-line"><tt class="py-docstring">        >>> "%7.3f %6.3f %12.3f" % (az12,az21,dist)</tt> </tt>
+<a name="L666"></a><tt class="py-lineno">666</tt>  <tt class="py-line"><tt class="py-docstring">        '-66.531 75.654  4164192.708'</tt> </tt>
+<a name="L667"></a><tt class="py-lineno">667</tt>  <tt class="py-line"><tt class="py-docstring">        >>> # compute latitude, longitude and back azimuth of Portland,</tt> </tt>
+<a name="L668"></a><tt class="py-lineno">668</tt>  <tt class="py-line"><tt class="py-docstring">        >>> # given Boston lat/lon, forward azimuth and distance to Portland.</tt> </tt>
+<a name="L669"></a><tt class="py-lineno">669</tt>  <tt class="py-line"><tt class="py-docstring">        >>> endlon, endlat, backaz = g.fwd(boston_lon, boston_lat, az12, dist)</tt> </tt>
+<a name="L670"></a><tt class="py-lineno">670</tt>  <tt class="py-line"><tt class="py-docstring">        >>> "%6.3f  %6.3f %13.3f" % (endlat,endlon,backaz)</tt> </tt>
+<a name="L671"></a><tt class="py-lineno">671</tt>  <tt class="py-line"><tt class="py-docstring">        '45.517  -123.683        75.654'</tt> </tt>
+<a name="L672"></a><tt class="py-lineno">672</tt>  <tt class="py-line"><tt class="py-docstring">        >>> # compute the azimuths, distances from New York to several</tt> </tt>
+<a name="L673"></a><tt class="py-lineno">673</tt>  <tt class="py-line"><tt class="py-docstring">        >>> # cities (pass a list)</tt> </tt>
+<a name="L674"></a><tt class="py-lineno">674</tt>  <tt class="py-line"><tt class="py-docstring">        >>> lons1 = 3*[newyork_lon]; lats1 = 3*[newyork_lat]</tt> </tt>
+<a name="L675"></a><tt class="py-lineno">675</tt>  <tt class="py-line"><tt class="py-docstring">        >>> lons2 = [boston_lon, portland_lon, london_lon]</tt> </tt>
+<a name="L676"></a><tt class="py-lineno">676</tt>  <tt class="py-line"><tt class="py-docstring">        >>> lats2 = [boston_lat, portland_lat, london_lat]</tt> </tt>
+<a name="L677"></a><tt class="py-lineno">677</tt>  <tt class="py-line"><tt class="py-docstring">        >>> az12,az21,dist = g.inv(lons1,lats1,lons2,lats2)</tt> </tt>
+<a name="L678"></a><tt class="py-lineno">678</tt>  <tt class="py-line"><tt class="py-docstring">        >>> for faz,baz,d in list(zip(az12,az21,dist)): "%7.3f %7.3f %9.3f" % (faz,baz,d)</tt> </tt>
+<a name="L679"></a><tt class="py-lineno">679</tt>  <tt class="py-line"><tt class="py-docstring">        ' 54.663 -123.448 288303.720'</tt> </tt>
+<a name="L680"></a><tt class="py-lineno">680</tt>  <tt class="py-line"><tt class="py-docstring">        '-65.463  79.342 4013037.318'</tt> </tt>
+<a name="L681"></a><tt class="py-lineno">681</tt>  <tt class="py-line"><tt class="py-docstring">        ' 51.254 -71.576 5579916.651'</tt> </tt>
+<a name="L682"></a><tt class="py-lineno">682</tt>  <tt class="py-line"><tt class="py-docstring">        >>> g2 = Geod('+ellps=clrk66') # use proj4 style initialization string</tt> </tt>
+<a name="L683"></a><tt class="py-lineno">683</tt>  <tt class="py-line"><tt class="py-docstring">        >>> az12,az21,dist = g2.inv(boston_lon,boston_lat,portland_lon,portland_lat)</tt> </tt>
+<a name="L684"></a><tt class="py-lineno">684</tt>  <tt class="py-line"><tt class="py-docstring">        >>> "%7.3f %6.3f %12.3f" % (az12,az21,dist)</tt> </tt>
+<a name="L685"></a><tt class="py-lineno">685</tt>  <tt class="py-line"><tt class="py-docstring">        '-66.531 75.654  4164192.708'</tt> </tt>
+<a name="L686"></a><tt class="py-lineno">686</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
+<a name="L687"></a><tt class="py-lineno">687</tt>  <tt class="py-line">        <tt class="py-comment"># if initparams is a proj-type init string,</tt> </tt>
+<a name="L688"></a><tt class="py-lineno">688</tt>  <tt class="py-line">        <tt class="py-comment"># convert to dict.</tt> </tt>
+<a name="L689"></a><tt class="py-lineno">689</tt>  <tt class="py-line">        <tt class="py-name">ellpsd</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L690"></a><tt class="py-lineno">690</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">initstring</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L691"></a><tt class="py-lineno">691</tt>  <tt class="py-line">            <tt class="py-keyword">for</tt> <tt class="py-name">kvpair</tt> <tt class="py-keyword">in</tt> <tt class="py-name">initstring</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L692"></a><tt class="py-lineno">692</tt>  <tt class="py-line">                <tt class="py-name">k</tt><tt class="py-op">,</tt><tt class="py-name">v</tt> <tt class="py-op">=</tt> <tt class="py-name">kvpair</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'='</tt><tt class="py-op">)</tt> </tt>
+<a name="L693"></a><tt class="py-lineno">693</tt>  <tt class="py-line">                <tt class="py-name">k</tt> <tt class="py-op">=</tt> <tt class="py-name">k</tt><tt class="py-op">.</tt><tt class="py-name">lstrip</tt><tt class="py-op">(</tt><tt class="py-string">'+'</tt><tt class="py-op">)</tt> </tt>
+<a name="L694"></a><tt class="py-lineno">694</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">k</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt><tt class="py-string">'a'</tt><tt class="py-op">,</tt><tt class="py-string">'b'</tt><tt class="py-op">,</tt><tt class="py-string">'rf'</tt><tt class="py-op">,</tt><tt class="py-string">'f'</tt><tt class="py-op">,</tt><tt class="py-string">'es'</tt><tt class="py-op">,</tt><tt class="py-string [...]
+<a name="L695"></a><tt class="py-lineno">695</tt>  <tt class="py-line">                    <tt class="py-name">v</tt> <tt class="py-op">=</tt> <tt class="py-name">float</tt><tt class="py-op">(</tt><tt class="py-name">v</tt><tt class="py-op">)</tt> </tt>
+<a name="L696"></a><tt class="py-lineno">696</tt>  <tt class="py-line">                <tt class="py-name">ellpsd</tt><tt class="py-op">[</tt><tt class="py-name">k</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">v</tt> </tt>
+<a name="L697"></a><tt class="py-lineno">697</tt>  <tt class="py-line">        <tt class="py-comment"># merge this dict with kwargs dict.</tt> </tt>
+<a name="L698"></a><tt class="py-lineno">698</tt>  <tt class="py-line">        <tt class="py-name">kwargs</tt> <tt class="py-op">=</tt> <tt class="py-name">dict</tt><tt class="py-op">(</tt><tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt class="py-name">items</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py- [...]
+<a name="L699"></a><tt class="py-lineno">699</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sphere</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L700"></a><tt class="py-lineno">700</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-string">'ellps'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">:</tt> </tt>
+<a name="L701"></a><tt class="py-lineno">701</tt>  <tt class="py-line">            <tt class="py-comment"># ellipse name given, look up in pj_ellps dict</tt> </tt>
+<a name="L702"></a><tt class="py-lineno">702</tt>  <tt class="py-line">            <tt class="py-name">ellps_dict</tt> <tt class="py-op">=</tt> <tt id="link-14" class="py-name"><a title="pyproj.pj_ellps" class="py-name" href="#" onclick="return doclink('link-14', 'pj_ellps', 'link-4');">pj_ellps</a></tt><tt class="py-op">[</tt><tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-string">'ellps'</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> </tt>
+<a name="L703"></a><tt class="py-lineno">703</tt>  <tt class="py-line">            <tt class="py-name">a</tt> <tt class="py-op">=</tt> <tt class="py-name">ellps_dict</tt><tt class="py-op">[</tt><tt class="py-string">'a'</tt><tt class="py-op">]</tt> </tt>
+<a name="L704"></a><tt class="py-lineno">704</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">ellps_dict</tt><tt class="py-op">[</tt><tt class="py-string">'description'</tt><tt class="py-op">]</tt><tt class="py-op">==</tt><tt class="py-string">'Normal Sphere'</tt><tt class="py-op">:</tt> </tt>
+<a name="L705"></a><tt class="py-lineno">705</tt>  <tt class="py-line">                <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sphere</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L706"></a><tt class="py-lineno">706</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-string">'b'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">ellps_dict</tt><tt class="py-op">:</tt> </tt>
+<a name="L707"></a><tt class="py-lineno">707</tt>  <tt class="py-line">                <tt class="py-name">b</tt> <tt class="py-op">=</tt> <tt class="py-name">ellps_dict</tt><tt class="py-op">[</tt><tt class="py-string">'b'</tt><tt class="py-op">]</tt> </tt>
+<a name="L708"></a><tt class="py-lineno">708</tt>  <tt class="py-line">                <tt class="py-name">es</tt> <tt class="py-op">=</tt> <tt class="py-number">1.</tt> <tt class="py-op">-</tt> <tt class="py-op">(</tt><tt class="py-name">b</tt> <tt class="py-op">*</tt> <tt class="py-name">b</tt><tt class="py-op">)</tt> <tt class="py-op">/</tt> <tt class="py-op">(</tt><tt class="py-name">a</tt> <tt class="py-op">*</tt> <tt class="py-name">a</tt><tt class="py-op">)</tt> </tt>
+<a name="L709"></a><tt class="py-lineno">709</tt>  <tt class="py-line">                <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">a</tt> <tt class="py-op">-</tt> <tt class="py-name">b</tt><tt class="py-op">)</tt><tt class="py-op">/</tt><tt class="py-name">a</tt> </tt>
+<a name="L710"></a><tt class="py-lineno">710</tt>  <tt class="py-line">            <tt class="py-keyword">elif</tt> <tt class="py-string">'rf'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">ellps_dict</tt><tt class="py-op">:</tt> </tt>
+<a name="L711"></a><tt class="py-lineno">711</tt>  <tt class="py-line">                <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-number">1.</tt><tt class="py-op">/</tt><tt class="py-name">ellps_dict</tt><tt class="py-op">[</tt><tt class="py-string">'rf'</tt><tt class="py-op">]</tt> </tt>
+<a name="L712"></a><tt class="py-lineno">712</tt>  <tt class="py-line">                <tt class="py-name">b</tt> <tt class="py-op">=</tt> <tt class="py-name">a</tt><tt class="py-op">*</tt><tt class="py-op">(</tt><tt class="py-number">1.</tt> <tt class="py-op">-</tt> <tt class="py-name">f</tt><tt class="py-op">)</tt> </tt>
+<a name="L713"></a><tt class="py-lineno">713</tt>  <tt class="py-line">                <tt class="py-name">es</tt> <tt class="py-op">=</tt> <tt class="py-number">1.</tt> <tt class="py-op">-</tt> <tt class="py-op">(</tt><tt class="py-name">b</tt> <tt class="py-op">*</tt> <tt class="py-name">b</tt><tt class="py-op">)</tt> <tt class="py-op">/</tt> <tt class="py-op">(</tt><tt class="py-name">a</tt> <tt class="py-op">*</tt> <tt class="py-name">a</tt><tt class="py-op">)</tt> </tt>
+<a name="L714"></a><tt class="py-lineno">714</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L715"></a><tt class="py-lineno">715</tt>  <tt class="py-line">            <tt class="py-comment"># a (semi-major axis) and one of</tt> </tt>
+<a name="L716"></a><tt class="py-lineno">716</tt>  <tt class="py-line">            <tt class="py-comment"># b the semi-minor axis</tt> </tt>
+<a name="L717"></a><tt class="py-lineno">717</tt>  <tt class="py-line">            <tt class="py-comment"># rf the reciprocal flattening</tt> </tt>
+<a name="L718"></a><tt class="py-lineno">718</tt>  <tt class="py-line">            <tt class="py-comment"># f flattening</tt> </tt>
+<a name="L719"></a><tt class="py-lineno">719</tt>  <tt class="py-line">            <tt class="py-comment"># es eccentricity squared</tt> </tt>
+<a name="L720"></a><tt class="py-lineno">720</tt>  <tt class="py-line">            <tt class="py-comment"># must be given.</tt> </tt>
+<a name="L721"></a><tt class="py-lineno">721</tt>  <tt class="py-line">            <tt class="py-name">a</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-string">'a'</tt><tt class="py-op">]</tt> </tt>
+<a name="L722"></a><tt class="py-lineno">722</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-string">'b'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">:</tt> </tt>
+<a name="L723"></a><tt class="py-lineno">723</tt>  <tt class="py-line">                <tt class="py-name">b</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-string">'b'</tt><tt class="py-op">]</tt> </tt>
+<a name="L724"></a><tt class="py-lineno">724</tt>  <tt class="py-line">                <tt class="py-name">es</tt> <tt class="py-op">=</tt> <tt class="py-number">1.</tt> <tt class="py-op">-</tt> <tt class="py-op">(</tt><tt class="py-name">b</tt> <tt class="py-op">*</tt> <tt class="py-name">b</tt><tt class="py-op">)</tt> <tt class="py-op">/</tt> <tt class="py-op">(</tt><tt class="py-name">a</tt> <tt class="py-op">*</tt> <tt class="py-name">a</tt><tt class="py-op">)</tt> </tt>
+<a name="L725"></a><tt class="py-lineno">725</tt>  <tt class="py-line">                <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">a</tt> <tt class="py-op">-</tt> <tt class="py-name">b</tt><tt class="py-op">)</tt><tt class="py-op">/</tt><tt class="py-name">a</tt> </tt>
+<a name="L726"></a><tt class="py-lineno">726</tt>  <tt class="py-line">            <tt class="py-keyword">elif</tt> <tt class="py-string">'rf'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">:</tt> </tt>
+<a name="L727"></a><tt class="py-lineno">727</tt>  <tt class="py-line">                <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-number">1.</tt><tt class="py-op">/</tt><tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-string">'rf'</tt><tt class="py-op">]</tt> </tt>
+<a name="L728"></a><tt class="py-lineno">728</tt>  <tt class="py-line">                <tt class="py-name">b</tt> <tt class="py-op">=</tt> <tt class="py-name">a</tt><tt class="py-op">*</tt><tt class="py-op">(</tt><tt class="py-number">1.</tt> <tt class="py-op">-</tt> <tt class="py-name">f</tt><tt class="py-op">)</tt> </tt>
+<a name="L729"></a><tt class="py-lineno">729</tt>  <tt class="py-line">                <tt class="py-name">es</tt> <tt class="py-op">=</tt> <tt class="py-number">1.</tt> <tt class="py-op">-</tt> <tt class="py-op">(</tt><tt class="py-name">b</tt> <tt class="py-op">*</tt> <tt class="py-name">b</tt><tt class="py-op">)</tt> <tt class="py-op">/</tt> <tt class="py-op">(</tt><tt class="py-name">a</tt> <tt class="py-op">*</tt> <tt class="py-name">a</tt><tt class="py-op">)</tt> </tt>
+<a name="L730"></a><tt class="py-lineno">730</tt>  <tt class="py-line">            <tt class="py-keyword">elif</tt> <tt class="py-string">'f'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">:</tt> </tt>
+<a name="L731"></a><tt class="py-lineno">731</tt>  <tt class="py-line">                <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-string">'f'</tt><tt class="py-op">]</tt> </tt>
+<a name="L732"></a><tt class="py-lineno">732</tt>  <tt class="py-line">                <tt class="py-name">b</tt> <tt class="py-op">=</tt> <tt class="py-name">a</tt><tt class="py-op">*</tt><tt class="py-op">(</tt><tt class="py-number">1.</tt> <tt class="py-op">-</tt> <tt class="py-name">f</tt><tt class="py-op">)</tt> </tt>
+<a name="L733"></a><tt class="py-lineno">733</tt>  <tt class="py-line">                <tt class="py-name">es</tt> <tt class="py-op">=</tt> <tt class="py-number">1.</tt> <tt class="py-op">-</tt> <tt class="py-op">(</tt><tt class="py-name">b</tt><tt class="py-op">/</tt><tt class="py-name">a</tt><tt class="py-op">)</tt><tt class="py-op">**</tt><tt class="py-number">2</tt> </tt>
+<a name="L734"></a><tt class="py-lineno">734</tt>  <tt class="py-line">            <tt class="py-keyword">elif</tt> <tt class="py-string">'es'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">:</tt> </tt>
+<a name="L735"></a><tt class="py-lineno">735</tt>  <tt class="py-line">                <tt class="py-name">es</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-string">'es'</tt><tt class="py-op">]</tt> </tt>
+<a name="L736"></a><tt class="py-lineno">736</tt>  <tt class="py-line">                <tt class="py-name">b</tt> <tt class="py-op">=</tt> <tt class="py-name">math</tt><tt class="py-op">.</tt><tt class="py-name">sqrt</tt><tt class="py-op">(</tt><tt class="py-name">a</tt><tt class="py-op">**</tt><tt class="py-number">2</tt> <tt class="py-op">-</tt> <tt class="py-name">es</tt><tt class="py-op">*</tt><tt class="py-name">a</tt><tt class="py-op">**</tt><tt class="py-number">2</tt><tt class="p [...]
+<a name="L737"></a><tt class="py-lineno">737</tt>  <tt class="py-line">                <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">a</tt> <tt class="py-op">-</tt> <tt class="py-name">b</tt><tt class="py-op">)</tt><tt class="py-op">/</tt><tt class="py-name">a</tt> </tt>
+<a name="L738"></a><tt class="py-lineno">738</tt>  <tt class="py-line">            <tt class="py-keyword">elif</tt> <tt class="py-string">'e'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">:</tt> </tt>
+<a name="L739"></a><tt class="py-lineno">739</tt>  <tt class="py-line">                <tt class="py-name">es</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-string">'e'</tt><tt class="py-op">]</tt><tt class="py-op">**</tt><tt class="py-number">2</tt> </tt>
+<a name="L740"></a><tt class="py-lineno">740</tt>  <tt class="py-line">                <tt class="py-name">b</tt> <tt class="py-op">=</tt> <tt class="py-name">math</tt><tt class="py-op">.</tt><tt class="py-name">sqrt</tt><tt class="py-op">(</tt><tt class="py-name">a</tt><tt class="py-op">**</tt><tt class="py-number">2</tt> <tt class="py-op">-</tt> <tt class="py-name">es</tt><tt class="py-op">*</tt><tt class="py-name">a</tt><tt class="py-op">**</tt><tt class="py-number">2</tt><tt class="p [...]
+<a name="L741"></a><tt class="py-lineno">741</tt>  <tt class="py-line">                <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">a</tt> <tt class="py-op">-</tt> <tt class="py-name">b</tt><tt class="py-op">)</tt><tt class="py-op">/</tt><tt class="py-name">a</tt> </tt>
+<a name="L742"></a><tt class="py-lineno">742</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L743"></a><tt class="py-lineno">743</tt>  <tt class="py-line">                <tt class="py-name">b</tt> <tt class="py-op">=</tt> <tt class="py-name">a</tt> </tt>
+<a name="L744"></a><tt class="py-lineno">744</tt>  <tt class="py-line">                <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-number">0.</tt> </tt>
+<a name="L745"></a><tt class="py-lineno">745</tt>  <tt class="py-line">                <tt class="py-name">es</tt> <tt class="py-op">=</tt> <tt class="py-number">0.</tt> </tt>
+<a name="L746"></a><tt class="py-lineno">746</tt>  <tt class="py-line">                <tt class="py-comment">#msg='ellipse name or a, plus one of f,es,b must be given'</tt> </tt>
+<a name="L747"></a><tt class="py-lineno">747</tt>  <tt class="py-line">                <tt class="py-comment">#raise ValueError(msg)</tt> </tt>
+<a name="L748"></a><tt class="py-lineno">748</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">math</tt><tt class="py-op">.</tt><tt class="py-name">fabs</tt><tt class="py-op">(</tt><tt class="py-name">f</tt><tt class="py-op">)</tt> <tt class="py-op"><</tt> <tt class="py-number">1.e-8</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">sphere</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L749"></a><tt class="py-lineno">749</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">a</tt> <tt class="py-op">=</tt> <tt class="py-name">a</tt> </tt>
+<a name="L750"></a><tt class="py-lineno">750</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">b</tt> <tt class="py-op">=</tt> <tt class="py-name">b</tt> </tt>
+<a name="L751"></a><tt class="py-lineno">751</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-name">f</tt> </tt>
+<a name="L752"></a><tt class="py-lineno">752</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">es</tt> <tt class="py-op">=</tt> <tt class="py-name">es</tt> </tt>
+<a name="L753"></a><tt class="py-lineno">753</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">_proj</tt><tt class="py-op">.</tt><tt id="link-15" class="py-name" targets="Class pyproj.Geod=pyproj.Geod-class.html"><a title="pyproj.Geod" class="py-name" href="#" onclick="return doclink('link-15', 'Geod', 'link-15');">Geod</a></tt><tt class="py-op">.</tt><tt id="link-16" class="py-name"><a title="pyproj.Geod.__new__
+pyproj.Proj.__new__" class="py-name" href="#" onclick="return doclink('link-16', '__new__', 'link-7');">__new__</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">a</tt><tt class="py-op">,</tt> <tt class="py-name">f</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L754"></a><tt class="py-lineno">754</tt>  <tt class="py-line"> </tt>
+<a name="Geod.fwd"></a><div id="Geod.fwd-def"><a name="L755"></a><tt class="py-lineno">755</tt> <a class="py-toggle" href="#" id="Geod.fwd-toggle" onclick="return toggle('Geod.fwd');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="pyproj.Geod-class.html#fwd">fwd</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">lons</tt><tt class="py-op">,</tt> <tt class="py-param">lats</tt><tt class="py-op">, [...]
+</div><div id="Geod.fwd-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Geod.fwd-expanded"><a name="L756"></a><tt class="py-lineno">756</tt>  <tt class="py-line">        <tt class="py-docstring">"""</tt> </tt>
+<a name="L757"></a><tt class="py-lineno">757</tt>  <tt class="py-line"><tt class="py-docstring">        forward transformation - Returns longitudes, latitudes and back</tt> </tt>
+<a name="L758"></a><tt class="py-lineno">758</tt>  <tt class="py-line"><tt class="py-docstring">        azimuths of terminus points given longitudes (lons) and</tt> </tt>
+<a name="L759"></a><tt class="py-lineno">759</tt>  <tt class="py-line"><tt class="py-docstring">        latitudes (lats) of initial points, plus forward azimuths (az)</tt> </tt>
+<a name="L760"></a><tt class="py-lineno">760</tt>  <tt class="py-line"><tt class="py-docstring">        and distances (dist).</tt> </tt>
+<a name="L761"></a><tt class="py-lineno">761</tt>  <tt class="py-line"><tt class="py-docstring">        latitudes (lats) of initial points, plus forward azimuths (az)</tt> </tt>
+<a name="L762"></a><tt class="py-lineno">762</tt>  <tt class="py-line"><tt class="py-docstring">        and distances (dist).</tt> </tt>
+<a name="L763"></a><tt class="py-lineno">763</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L764"></a><tt class="py-lineno">764</tt>  <tt class="py-line"><tt class="py-docstring">        Works with numpy and regular python array objects, python</tt> </tt>
+<a name="L765"></a><tt class="py-lineno">765</tt>  <tt class="py-line"><tt class="py-docstring">        sequences and scalars.</tt> </tt>
+<a name="L766"></a><tt class="py-lineno">766</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L767"></a><tt class="py-lineno">767</tt>  <tt class="py-line"><tt class="py-docstring">        if radians=True, lons/lats and azimuths are radians instead of</tt> </tt>
+<a name="L768"></a><tt class="py-lineno">768</tt>  <tt class="py-line"><tt class="py-docstring">        degrees. Distances are in meters.</tt> </tt>
+<a name="L769"></a><tt class="py-lineno">769</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
+<a name="L770"></a><tt class="py-lineno">770</tt>  <tt class="py-line">        <tt class="py-comment"># process inputs, making copies that support buffer API.</tt> </tt>
+<a name="L771"></a><tt class="py-lineno">771</tt>  <tt class="py-line">        <tt class="py-name">inx</tt><tt class="py-op">,</tt> <tt class="py-name">xisfloat</tt><tt class="py-op">,</tt> <tt class="py-name">xislist</tt><tt class="py-op">,</tt> <tt class="py-name">xistuple</tt> <tt class="py-op">=</tt> <tt class="py-name">_copytobuffer</tt><tt class="py-op">(</tt><tt class="py-name">lons</tt><tt class="py-op">)</tt> </tt>
+<a name="L772"></a><tt class="py-lineno">772</tt>  <tt class="py-line">        <tt class="py-name">iny</tt><tt class="py-op">,</tt> <tt class="py-name">yisfloat</tt><tt class="py-op">,</tt> <tt class="py-name">yislist</tt><tt class="py-op">,</tt> <tt class="py-name">yistuple</tt> <tt class="py-op">=</tt> <tt class="py-name">_copytobuffer</tt><tt class="py-op">(</tt><tt class="py-name">lats</tt><tt class="py-op">)</tt> </tt>
+<a name="L773"></a><tt class="py-lineno">773</tt>  <tt class="py-line">        <tt class="py-name">inz</tt><tt class="py-op">,</tt> <tt class="py-name">zisfloat</tt><tt class="py-op">,</tt> <tt class="py-name">zislist</tt><tt class="py-op">,</tt> <tt class="py-name">zistuple</tt> <tt class="py-op">=</tt> <tt class="py-name">_copytobuffer</tt><tt class="py-op">(</tt><tt class="py-name">az</tt><tt class="py-op">)</tt> </tt>
+<a name="L774"></a><tt class="py-lineno">774</tt>  <tt class="py-line">        <tt class="py-name">ind</tt><tt class="py-op">,</tt> <tt class="py-name">disfloat</tt><tt class="py-op">,</tt> <tt class="py-name">dislist</tt><tt class="py-op">,</tt> <tt class="py-name">distuple</tt> <tt class="py-op">=</tt> <tt class="py-name">_copytobuffer</tt><tt class="py-op">(</tt><tt class="py-name">dist</tt><tt class="py-op">)</tt> </tt>
+<a name="L775"></a><tt class="py-lineno">775</tt>  <tt class="py-line">        <tt class="py-name">_proj</tt><tt class="py-op">.</tt><tt id="link-17" class="py-name"><a title="pyproj.Geod" class="py-name" href="#" onclick="return doclink('link-17', 'Geod', 'link-15');">Geod</a></tt><tt class="py-op">.</tt><tt class="py-name">_fwd</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">inx</tt><tt class="py-op">,</tt> <tt class="py-name">iny</ [...]
+<a name="L776"></a><tt class="py-lineno">776</tt>  <tt class="py-line">        <tt class="py-comment"># if inputs were lists, tuples or floats, convert back.</tt> </tt>
+<a name="L777"></a><tt class="py-lineno">777</tt>  <tt class="py-line">        <tt class="py-name">outx</tt> <tt class="py-op">=</tt> <tt class="py-name">_convertback</tt><tt class="py-op">(</tt><tt class="py-name">xisfloat</tt><tt class="py-op">,</tt><tt class="py-name">xislist</tt><tt class="py-op">,</tt><tt class="py-name">xistuple</tt><tt class="py-op">,</tt><tt class="py-name">inx</tt><tt class="py-op">)</tt> </tt>
+<a name="L778"></a><tt class="py-lineno">778</tt>  <tt class="py-line">        <tt class="py-name">outy</tt> <tt class="py-op">=</tt> <tt class="py-name">_convertback</tt><tt class="py-op">(</tt><tt class="py-name">yisfloat</tt><tt class="py-op">,</tt><tt class="py-name">yislist</tt><tt class="py-op">,</tt><tt class="py-name">xistuple</tt><tt class="py-op">,</tt><tt class="py-name">iny</tt><tt class="py-op">)</tt> </tt>
+<a name="L779"></a><tt class="py-lineno">779</tt>  <tt class="py-line">        <tt class="py-name">outz</tt> <tt class="py-op">=</tt> <tt class="py-name">_convertback</tt><tt class="py-op">(</tt><tt class="py-name">zisfloat</tt><tt class="py-op">,</tt><tt class="py-name">zislist</tt><tt class="py-op">,</tt><tt class="py-name">zistuple</tt><tt class="py-op">,</tt><tt class="py-name">inz</tt><tt class="py-op">)</tt> </tt>
+<a name="L780"></a><tt class="py-lineno">780</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">outx</tt><tt class="py-op">,</tt> <tt class="py-name">outy</tt><tt class="py-op">,</tt> <tt class="py-name">outz</tt> </tt>
+</div><a name="L781"></a><tt class="py-lineno">781</tt>  <tt class="py-line"> </tt>
+<a name="Geod.inv"></a><div id="Geod.inv-def"><a name="L782"></a><tt class="py-lineno">782</tt> <a class="py-toggle" href="#" id="Geod.inv-toggle" onclick="return toggle('Geod.inv');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="pyproj.Geod-class.html#inv">inv</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt><tt class="py-param">lons1</tt><tt class="py-op">,</tt><tt class="py-param">lats1</tt><tt class="py-op">, [...]
+</div><div id="Geod.inv-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Geod.inv-expanded"><a name="L783"></a><tt class="py-lineno">783</tt>  <tt class="py-line">        <tt class="py-docstring">"""</tt> </tt>
+<a name="L784"></a><tt class="py-lineno">784</tt>  <tt class="py-line"><tt class="py-docstring">        inverse transformation - Returns forward and back azimuths, plus</tt> </tt>
+<a name="L785"></a><tt class="py-lineno">785</tt>  <tt class="py-line"><tt class="py-docstring">        distances between initial points (specified by lons1, lats1) and</tt> </tt>
+<a name="L786"></a><tt class="py-lineno">786</tt>  <tt class="py-line"><tt class="py-docstring">        terminus points (specified by lons2, lats2).</tt> </tt>
+<a name="L787"></a><tt class="py-lineno">787</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L788"></a><tt class="py-lineno">788</tt>  <tt class="py-line"><tt class="py-docstring">        Works with numpy and regular python array objects, python</tt> </tt>
+<a name="L789"></a><tt class="py-lineno">789</tt>  <tt class="py-line"><tt class="py-docstring">        sequences and scalars.</tt> </tt>
+<a name="L790"></a><tt class="py-lineno">790</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L791"></a><tt class="py-lineno">791</tt>  <tt class="py-line"><tt class="py-docstring">        if radians=True, lons/lats and azimuths are radians instead of</tt> </tt>
+<a name="L792"></a><tt class="py-lineno">792</tt>  <tt class="py-line"><tt class="py-docstring">        degrees. Distances are in meters.</tt> </tt>
+<a name="L793"></a><tt class="py-lineno">793</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
+<a name="L794"></a><tt class="py-lineno">794</tt>  <tt class="py-line">        <tt class="py-comment"># process inputs, making copies that support buffer API.</tt> </tt>
+<a name="L795"></a><tt class="py-lineno">795</tt>  <tt class="py-line">        <tt class="py-name">inx</tt><tt class="py-op">,</tt> <tt class="py-name">xisfloat</tt><tt class="py-op">,</tt> <tt class="py-name">xislist</tt><tt class="py-op">,</tt> <tt class="py-name">xistuple</tt> <tt class="py-op">=</tt> <tt class="py-name">_copytobuffer</tt><tt class="py-op">(</tt><tt class="py-name">lons1</tt><tt class="py-op">)</tt> </tt>
+<a name="L796"></a><tt class="py-lineno">796</tt>  <tt class="py-line">        <tt class="py-name">iny</tt><tt class="py-op">,</tt> <tt class="py-name">yisfloat</tt><tt class="py-op">,</tt> <tt class="py-name">yislist</tt><tt class="py-op">,</tt> <tt class="py-name">yistuple</tt> <tt class="py-op">=</tt> <tt class="py-name">_copytobuffer</tt><tt class="py-op">(</tt><tt class="py-name">lats1</tt><tt class="py-op">)</tt> </tt>
+<a name="L797"></a><tt class="py-lineno">797</tt>  <tt class="py-line">        <tt class="py-name">inz</tt><tt class="py-op">,</tt> <tt class="py-name">zisfloat</tt><tt class="py-op">,</tt> <tt class="py-name">zislist</tt><tt class="py-op">,</tt> <tt class="py-name">zistuple</tt> <tt class="py-op">=</tt> <tt class="py-name">_copytobuffer</tt><tt class="py-op">(</tt><tt class="py-name">lons2</tt><tt class="py-op">)</tt> </tt>
+<a name="L798"></a><tt class="py-lineno">798</tt>  <tt class="py-line">        <tt class="py-name">ind</tt><tt class="py-op">,</tt> <tt class="py-name">disfloat</tt><tt class="py-op">,</tt> <tt class="py-name">dislist</tt><tt class="py-op">,</tt> <tt class="py-name">distuple</tt> <tt class="py-op">=</tt> <tt class="py-name">_copytobuffer</tt><tt class="py-op">(</tt><tt class="py-name">lats2</tt><tt class="py-op">)</tt> </tt>
+<a name="L799"></a><tt class="py-lineno">799</tt>  <tt class="py-line">        <tt class="py-name">_proj</tt><tt class="py-op">.</tt><tt id="link-18" class="py-name"><a title="pyproj.Geod" class="py-name" href="#" onclick="return doclink('link-18', 'Geod', 'link-15');">Geod</a></tt><tt class="py-op">.</tt><tt class="py-name">_inv</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt><tt class="py-name">inx</tt><tt class="py-op">,</tt><tt class="py-name">iny</tt [...]
+<a name="L800"></a><tt class="py-lineno">800</tt>  <tt class="py-line">        <tt class="py-comment"># if inputs were lists, tuples or floats, convert back.</tt> </tt>
+<a name="L801"></a><tt class="py-lineno">801</tt>  <tt class="py-line">        <tt class="py-name">outx</tt> <tt class="py-op">=</tt> <tt class="py-name">_convertback</tt><tt class="py-op">(</tt><tt class="py-name">xisfloat</tt><tt class="py-op">,</tt><tt class="py-name">xislist</tt><tt class="py-op">,</tt><tt class="py-name">xistuple</tt><tt class="py-op">,</tt><tt class="py-name">inx</tt><tt class="py-op">)</tt> </tt>
+<a name="L802"></a><tt class="py-lineno">802</tt>  <tt class="py-line">        <tt class="py-name">outy</tt> <tt class="py-op">=</tt> <tt class="py-name">_convertback</tt><tt class="py-op">(</tt><tt class="py-name">yisfloat</tt><tt class="py-op">,</tt><tt class="py-name">yislist</tt><tt class="py-op">,</tt><tt class="py-name">xistuple</tt><tt class="py-op">,</tt><tt class="py-name">iny</tt><tt class="py-op">)</tt> </tt>
+<a name="L803"></a><tt class="py-lineno">803</tt>  <tt class="py-line">        <tt class="py-name">outz</tt> <tt class="py-op">=</tt> <tt class="py-name">_convertback</tt><tt class="py-op">(</tt><tt class="py-name">zisfloat</tt><tt class="py-op">,</tt><tt class="py-name">zislist</tt><tt class="py-op">,</tt><tt class="py-name">zistuple</tt><tt class="py-op">,</tt><tt class="py-name">inz</tt><tt class="py-op">)</tt> </tt>
+<a name="L804"></a><tt class="py-lineno">804</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">outx</tt><tt class="py-op">,</tt> <tt class="py-name">outy</tt><tt class="py-op">,</tt> <tt class="py-name">outz</tt> </tt>
+</div><a name="L805"></a><tt class="py-lineno">805</tt>  <tt class="py-line"> </tt>
+<a name="Geod.npts"></a><div id="Geod.npts-def"><a name="L806"></a><tt class="py-lineno">806</tt> <a class="py-toggle" href="#" id="Geod.npts-toggle" onclick="return toggle('Geod.npts');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="pyproj.Geod-class.html#npts">npts</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">lon1</tt><tt class="py-op">,</tt> <tt class="py-param">lat1</tt><tt class="py [...]
+</div><div id="Geod.npts-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="Geod.npts-expanded"><a name="L807"></a><tt class="py-lineno">807</tt>  <tt class="py-line">        <tt class="py-docstring">"""</tt> </tt>
+<a name="L808"></a><tt class="py-lineno">808</tt>  <tt class="py-line"><tt class="py-docstring">        Given a single initial point and terminus point (specified by</tt> </tt>
+<a name="L809"></a><tt class="py-lineno">809</tt>  <tt class="py-line"><tt class="py-docstring">        python floats lon1,lat1 and lon2,lat2), returns a list of</tt> </tt>
+<a name="L810"></a><tt class="py-lineno">810</tt>  <tt class="py-line"><tt class="py-docstring">        longitude/latitude pairs describing npts equally spaced</tt> </tt>
+<a name="L811"></a><tt class="py-lineno">811</tt>  <tt class="py-line"><tt class="py-docstring">        intermediate points along the geodesic between the initial and</tt> </tt>
+<a name="L812"></a><tt class="py-lineno">812</tt>  <tt class="py-line"><tt class="py-docstring">        terminus points.</tt> </tt>
+<a name="L813"></a><tt class="py-lineno">813</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L814"></a><tt class="py-lineno">814</tt>  <tt class="py-line"><tt class="py-docstring">        if radians=True, lons/lats are radians instead of degrees.</tt> </tt>
+<a name="L815"></a><tt class="py-lineno">815</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L816"></a><tt class="py-lineno">816</tt>  <tt class="py-line"><tt class="py-docstring">        Example usage:</tt> </tt>
+<a name="L817"></a><tt class="py-lineno">817</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L818"></a><tt class="py-lineno">818</tt>  <tt class="py-line"><tt class="py-docstring">        >>> from pyproj import Geod</tt> </tt>
+<a name="L819"></a><tt class="py-lineno">819</tt>  <tt class="py-line"><tt class="py-docstring">        >>> g = Geod(ellps='clrk66') # Use Clarke 1966 ellipsoid.</tt> </tt>
+<a name="L820"></a><tt class="py-lineno">820</tt>  <tt class="py-line"><tt class="py-docstring">        >>> # specify the lat/lons of Boston and Portland.</tt> </tt>
+<a name="L821"></a><tt class="py-lineno">821</tt>  <tt class="py-line"><tt class="py-docstring">        >>> g = Geod(ellps='clrk66') # Use Clarke 1966 ellipsoid.</tt> </tt>
+<a name="L822"></a><tt class="py-lineno">822</tt>  <tt class="py-line"><tt class="py-docstring">        >>> # specify the lat/lons of Boston and Portland.</tt> </tt>
+<a name="L823"></a><tt class="py-lineno">823</tt>  <tt class="py-line"><tt class="py-docstring">        >>> boston_lat = 42.+(15./60.); boston_lon = -71.-(7./60.)</tt> </tt>
+<a name="L824"></a><tt class="py-lineno">824</tt>  <tt class="py-line"><tt class="py-docstring">        >>> portland_lat = 45.+(31./60.); portland_lon = -123.-(41./60.)</tt> </tt>
+<a name="L825"></a><tt class="py-lineno">825</tt>  <tt class="py-line"><tt class="py-docstring">        >>> # find ten equally spaced points between Boston and Portland.</tt> </tt>
+<a name="L826"></a><tt class="py-lineno">826</tt>  <tt class="py-line"><tt class="py-docstring">        >>> lonlats = g.npts(boston_lon,boston_lat,portland_lon,portland_lat,10)</tt> </tt>
+<a name="L827"></a><tt class="py-lineno">827</tt>  <tt class="py-line"><tt class="py-docstring">        >>> for lon,lat in lonlats: '%6.3f  %7.3f' % (lat, lon)</tt> </tt>
+<a name="L828"></a><tt class="py-lineno">828</tt>  <tt class="py-line"><tt class="py-docstring">        '43.528  -75.414'</tt> </tt>
+<a name="L829"></a><tt class="py-lineno">829</tt>  <tt class="py-line"><tt class="py-docstring">        '44.637  -79.883'</tt> </tt>
+<a name="L830"></a><tt class="py-lineno">830</tt>  <tt class="py-line"><tt class="py-docstring">        '45.565  -84.512'</tt> </tt>
+<a name="L831"></a><tt class="py-lineno">831</tt>  <tt class="py-line"><tt class="py-docstring">        '46.299  -89.279'</tt> </tt>
+<a name="L832"></a><tt class="py-lineno">832</tt>  <tt class="py-line"><tt class="py-docstring">        '46.830  -94.156'</tt> </tt>
+<a name="L833"></a><tt class="py-lineno">833</tt>  <tt class="py-line"><tt class="py-docstring">        '47.149  -99.112'</tt> </tt>
+<a name="L834"></a><tt class="py-lineno">834</tt>  <tt class="py-line"><tt class="py-docstring">        '47.251  -104.106'</tt> </tt>
+<a name="L835"></a><tt class="py-lineno">835</tt>  <tt class="py-line"><tt class="py-docstring">        '47.136  -109.100'</tt> </tt>
+<a name="L836"></a><tt class="py-lineno">836</tt>  <tt class="py-line"><tt class="py-docstring">        '46.805  -114.051'</tt> </tt>
+<a name="L837"></a><tt class="py-lineno">837</tt>  <tt class="py-line"><tt class="py-docstring">        '46.262  -118.924'</tt> </tt>
+<a name="L838"></a><tt class="py-lineno">838</tt>  <tt class="py-line"><tt class="py-docstring">        >>> # test with radians=True (inputs/outputs in radians, not degrees)</tt> </tt>
+<a name="L839"></a><tt class="py-lineno">839</tt>  <tt class="py-line"><tt class="py-docstring">        >>> import math</tt> </tt>
+<a name="L840"></a><tt class="py-lineno">840</tt>  <tt class="py-line"><tt class="py-docstring">        >>> dg2rad = math.radians(1.)</tt> </tt>
+<a name="L841"></a><tt class="py-lineno">841</tt>  <tt class="py-line"><tt class="py-docstring">        >>> rad2dg = math.degrees(1.)</tt> </tt>
+<a name="L842"></a><tt class="py-lineno">842</tt>  <tt class="py-line"><tt class="py-docstring">        >>> lonlats = g.npts(dg2rad*boston_lon,dg2rad*boston_lat,dg2rad*portland_lon,dg2rad*portland_lat,10,radians=True)</tt> </tt>
+<a name="L843"></a><tt class="py-lineno">843</tt>  <tt class="py-line"><tt class="py-docstring">        >>> for lon,lat in lonlats: '%6.3f  %7.3f' % (rad2dg*lat, rad2dg*lon)</tt> </tt>
+<a name="L844"></a><tt class="py-lineno">844</tt>  <tt class="py-line"><tt class="py-docstring">        '43.528  -75.414'</tt> </tt>
+<a name="L845"></a><tt class="py-lineno">845</tt>  <tt class="py-line"><tt class="py-docstring">        '44.637  -79.883'</tt> </tt>
+<a name="L846"></a><tt class="py-lineno">846</tt>  <tt class="py-line"><tt class="py-docstring">        '45.565  -84.512'</tt> </tt>
+<a name="L847"></a><tt class="py-lineno">847</tt>  <tt class="py-line"><tt class="py-docstring">        '46.299  -89.279'</tt> </tt>
+<a name="L848"></a><tt class="py-lineno">848</tt>  <tt class="py-line"><tt class="py-docstring">        '46.830  -94.156'</tt> </tt>
+<a name="L849"></a><tt class="py-lineno">849</tt>  <tt class="py-line"><tt class="py-docstring">        '47.149  -99.112'</tt> </tt>
+<a name="L850"></a><tt class="py-lineno">850</tt>  <tt class="py-line"><tt class="py-docstring">        '47.251  -104.106'</tt> </tt>
+<a name="L851"></a><tt class="py-lineno">851</tt>  <tt class="py-line"><tt class="py-docstring">        '47.136  -109.100'</tt> </tt>
+<a name="L852"></a><tt class="py-lineno">852</tt>  <tt class="py-line"><tt class="py-docstring">        '46.805  -114.051'</tt> </tt>
+<a name="L853"></a><tt class="py-lineno">853</tt>  <tt class="py-line"><tt class="py-docstring">        '46.262  -118.924'</tt> </tt>
+<a name="L854"></a><tt class="py-lineno">854</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
+<a name="L855"></a><tt class="py-lineno">855</tt>  <tt class="py-line">        <tt class="py-name">lons</tt><tt class="py-op">,</tt> <tt class="py-name">lats</tt> <tt class="py-op">=</tt> <tt class="py-name">_proj</tt><tt class="py-op">.</tt><tt id="link-19" class="py-name"><a title="pyproj.Geod" class="py-name" href="#" onclick="return doclink('link-19', 'Geod', 'link-15');">Geod</a></tt><tt class="py-op">.</tt><tt class="py-name">_npts</tt><tt class="py-op">(</tt><tt class="py-name">se [...]
+<a name="L856"></a><tt class="py-lineno">856</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">zip</tt><tt class="py-op">(</tt><tt class="py-name">lons</tt><tt class="py-op">,</tt> <tt class="py-name">lats</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L857"></a><tt class="py-lineno">857</tt>  <tt class="py-line"> </tt>
+<a name="test"></a><div id="test-def"><a name="L858"></a><tt class="py-lineno">858</tt> <a class="py-toggle" href="#" id="test-toggle" onclick="return toggle('test');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="pyproj-module.html#test">test</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="test-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="test-expanded"><a name="L859"></a><tt class="py-lineno">859</tt>  <tt class="py-line">    <tt class="py-docstring">"""run the examples in the docstrings using the doctest module"""</tt> </tt>
+<a name="L860"></a><tt class="py-lineno">860</tt>  <tt class="py-line">    <tt class="py-keyword">import</tt> <tt class="py-name">doctest</tt><tt class="py-op">,</tt> <tt id="link-21" class="py-name"><a title="pyproj" class="py-name" href="#" onclick="return doclink('link-21', 'pyproj', 'link-0');">pyproj</a></tt> </tt>
+<a name="L861"></a><tt class="py-lineno">861</tt>  <tt class="py-line">    <tt class="py-name">doctest</tt><tt class="py-op">.</tt><tt class="py-name">testmod</tt><tt class="py-op">(</tt><tt id="link-22" class="py-name"><a title="pyproj" class="py-name" href="#" onclick="return doclink('link-22', 'pyproj', 'link-0');">pyproj</a></tt><tt class="py-op">,</tt><tt class="py-name">verbose</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L862"></a><tt class="py-lineno">862</tt>  <tt class="py-line"> </tt>
+<a name="L863"></a><tt class="py-lineno">863</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt class="py-name">__name__</tt> <tt class="py-op">==</tt> <tt class="py-string">"__main__"</tt><tt class="py-op">:</tt> <tt id="link-23" class="py-name" targets="Function pyproj.test()=pyproj-module.html#test"><a title="pyproj.test" class="py-name" href="#" onclick="return doclink('link-23', 'test', 'link-23');">test</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L864"></a><tt class="py-lineno">864</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+<!--
+expandto(location.href);
+// -->
+</script>
+</pre>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th bgcolor="#70b0f0" class="navbar-select"
+          >   Home   </th>
+
+  <!-- Tree link -->
+      <th>   <a
+        href="module-tree.html">Trees</a>   </th>
+
+  <!-- Index link -->
+      <th>   <a
+        href="identifier-index.html">Indices</a>   </th>
+
+  <!-- Help link -->
+      <th>   <a
+        href="help.html">Help</a>   </th>
+
+      <th class="navbar" width="100%"></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Jan 11 09:07:23 2013
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/docs/pyproj.Geod-class.html b/docs/pyproj.Geod-class.html
new file mode 100644
index 0000000..a2db5ad
--- /dev/null
+++ b/docs/pyproj.Geod-class.html
@@ -0,0 +1,529 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>pyproj.Geod</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>   <a
+        href="pyproj-module.html">Home</a>   </th>
+
+  <!-- Tree link -->
+      <th>   <a
+        href="module-tree.html">Trees</a>   </th>
+
+  <!-- Index link -->
+      <th>   <a
+        href="identifier-index.html">Indices</a>   </th>
+
+  <!-- Help link -->
+      <th>   <a
+        href="help.html">Help</a>   </th>
+
+      <th class="navbar" width="100%"></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        <a href="pyproj-module.html">Package pyproj</a> ::
+        Class Geod
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class Geod</h1><p class="nomargin-top"><span class="codelink"><a href="pyproj-pysrc.html#Geod">source code</a></span></p>
+<pre class="base-tree">
+object --+    
+         |    
+   ??.Geod --+
+             |
+            <strong class="uidshort">Geod</strong>
+</pre>
+
+<hr />
+<p>performs forward and inverse geodetic, or Great Circle, computations.
+  The forward computation (using the 'fwd' method) involves determining 
+  latitude, longitude and back azimuth of a computations.  The forward 
+  computation (using the 'fwd' method) involves determining latitude, 
+  longitude and back azimuth of a terminus point given the latitude and 
+  longitude of an initial point, plus azimuth and distance. The inverse 
+  computation (using the 'inv' method) involves determining the forward and
+  back azimuths and distance given the latitudes and longitudes of an 
+  initial and terminus point.</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td align="left" colspan="2" class="table-header">
+    <span class="table-header">Instance Methods</span></td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="pyproj.Geod-class.html#fwd" class="summary-sig-name">fwd</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">lons</span>,
+        <span class="summary-sig-arg">lats</span>,
+        <span class="summary-sig-arg">az</span>,
+        <span class="summary-sig-arg">dist</span>,
+        <span class="summary-sig-arg">radians</span>=<span class="summary-sig-default">False</span>)</span><br />
+      forward transformation - Returns longitudes, latitudes and back 
+      azimuths of terminus points given longitudes (lons) and latitudes 
+      (lats) of initial points, plus forward azimuths (az) and distances 
+      (dist).</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="pyproj-pysrc.html#Geod.fwd">source code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="pyproj.Geod-class.html#inv" class="summary-sig-name">inv</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">lons1</span>,
+        <span class="summary-sig-arg">lats1</span>,
+        <span class="summary-sig-arg">lons2</span>,
+        <span class="summary-sig-arg">lats2</span>,
+        <span class="summary-sig-arg">radians</span>=<span class="summary-sig-default">False</span>)</span><br />
+      inverse transformation - Returns forward and back azimuths, plus 
+      distances between initial points (specified by lons1, lats1) and 
+      terminus points (specified by lons2, lats2).</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="pyproj-pysrc.html#Geod.inv">source code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="pyproj.Geod-class.html#npts" class="summary-sig-name">npts</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">lon1</span>,
+        <span class="summary-sig-arg">lat1</span>,
+        <span class="summary-sig-arg">lon2</span>,
+        <span class="summary-sig-arg">lat2</span>,
+        <span class="summary-sig-arg">npts</span>,
+        <span class="summary-sig-arg">radians</span>=<span class="summary-sig-default">False</span>)</span><br />
+      Given a single initial point and terminus point (specified by python 
+      floats lon1,lat1 and lon2,lat2), returns a list of longitude/latitude
+      pairs describing npts equally spaced intermediate points along the 
+      geodesic between the initial and terminus points.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="pyproj-pysrc.html#Geod.npts">source code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code><i>unreachable</i>.Geod</code></b>:
+      <code>__reduce__</code>
+      </p>
+    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+      <code>__delattr__</code>,
+      <code>__format__</code>,
+      <code>__getattribute__</code>,
+      <code>__hash__</code>,
+      <code>__init__</code>,
+      <code>__reduce_ex__</code>,
+      <code>__repr__</code>,
+      <code>__setattr__</code>,
+      <code>__sizeof__</code>,
+      <code>__str__</code>,
+      <code>__subclasshook__</code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== STATIC METHODS ==================== -->
+<a name="section-StaticMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td align="left" colspan="2" class="table-header">
+    <span class="table-header">Static Methods</span></td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">a new object with type S, a subtype of T</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="pyproj.Geod-class.html#__new__" class="summary-sig-name">__new__</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">initstring</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">**kwargs</span>)</span><br />
+      initialize a Geod class instance.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="pyproj-pysrc.html#Geod.__new__">source code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td align="left" colspan="2" class="table-header">
+    <span class="table-header">Properties</span></td>
+</tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code><i>unreachable</i>.Geod</code></b>:
+      <code>initstring</code>
+      </p>
+    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+      <code>__class__</code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td align="left" colspan="2" class="table-header">
+    <span class="table-header">Method Details</span></td>
+</tr>
+</table>
+<a name="__new__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__new__</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">initstring</span>=<span class="sig-default">None</span>,
+        <span class="sig-arg">**kwargs</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="pyproj-pysrc.html#Geod.__new__">source code</a></span> 
+    </td>
+  </tr></table>
+  
+  <p>initialize a Geod class instance.</p>
+  <p>Geodetic parameters for specifying the ellipsoid can be given in a 
+  dictionary 'initparams', as keyword arguments, or as as proj4 geod 
+  initialization string. Following is a list of the ellipsoids that may be 
+  defined using the 'ellps' keyword (these are stored in the model variable
+  pj_ellps):</p>
+<pre class="literalblock">
+  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
+  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.247167427 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
+  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 (r=6370997)
+</pre>
+  <p>The parameters of the ellipsoid may also be set directly using the 'a'
+  (semi-major or equatorial axis radius) keyword, and any one of the 
+  following keywords: 'b' (semi-minor, or polar axis radius), 'e' 
+  (eccentricity), 'es' (eccentricity squared), 'f' (flattening), or 'rf' 
+  (reciprocal flattening).</p>
+  <p>See the proj documentation (http://trac.osgeo.org/proj/) for more</p>
+  <p>See the proj documentation (http://trac.osgeo.org/proj/) for more 
+  information about specifying ellipsoid parameters (specifically, the 
+  chapter 'Specifying the Earth's figure' in the main Proj users 
+  manual).</p>
+  <p>Example usage:</p>
+<pre class="py-doctest">
+<span class="py-prompt">>>> </span><span class="py-keyword">from</span> pyproj <span class="py-keyword">import</span> Geod
+<span class="py-prompt">>>> </span>g = Geod(ellps=<span class="py-string">'clrk66'</span>) <span class="py-comment"># Use Clarke 1966 ellipsoid.</span>
+<span class="py-prompt">>>> </span><span class="py-comment"># specify the lat/lons of some cities.</span>
+<span class="py-prompt">>>> </span>boston_lat = 42.+(15./60.); boston_lon = -71.-(7./60.)
+<span class="py-prompt">>>> </span>portland_lat = 45.+(31./60.); portland_lon = -123.-(41./60.)
+<span class="py-prompt">>>> </span>newyork_lat = 40.+(47./60.); newyork_lon = -73.-(58./60.)
+<span class="py-prompt">>>> </span>london_lat = 51.+(32./60.); london_lon = -(5./60.)
+<span class="py-prompt">>>> </span><span class="py-comment"># compute forward and back azimuths, plus distance</span>
+<span class="py-prompt">>>> </span><span class="py-comment"># between Boston and Portland.</span>
+<span class="py-prompt">>>> </span>az12,az21,dist = g.inv(boston_lon,boston_lat,portland_lon,portland_lat)
+<span class="py-prompt">>>> </span><span class="py-string">"%7.3f %6.3f %12.3f"</span> % (az12,az21,dist)
+<span class="py-output">'-66.531 75.654  4164192.708'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span><span class="py-comment"># compute latitude, longitude and back azimuth of Portland,</span>
+<span class="py-prompt">>>> </span><span class="py-comment"># given Boston lat/lon, forward azimuth and distance to Portland.</span>
+<span class="py-prompt">>>> </span>endlon, endlat, backaz = g.fwd(boston_lon, boston_lat, az12, dist)
+<span class="py-prompt">>>> </span><span class="py-string">"%6.3f  %6.3f %13.3f"</span> % (endlat,endlon,backaz)
+<span class="py-output">'45.517  -123.683        75.654'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span><span class="py-comment"># compute the azimuths, distances from New York to several</span>
+<span class="py-prompt">>>> </span><span class="py-comment"># cities (pass a list)</span>
+<span class="py-prompt">>>> </span>lons1 = 3*[newyork_lon]; lats1 = 3*[newyork_lat]
+<span class="py-prompt">>>> </span>lons2 = [boston_lon, portland_lon, london_lon]
+<span class="py-prompt">>>> </span>lats2 = [boston_lat, portland_lat, london_lat]
+<span class="py-prompt">>>> </span>az12,az21,dist = g.inv(lons1,lats1,lons2,lats2)
+<span class="py-prompt">>>> </span><span class="py-keyword">for</span> faz,baz,d <span class="py-keyword">in</span> list(zip(az12,az21,dist)): <span class="py-string">"%7.3f %7.3f %9.3f"</span> % (faz,baz,d)
+<span class="py-output">' 54.663 -123.448 288303.720'</span>
+<span class="py-output">'-65.463  79.342 4013037.318'</span>
+<span class="py-output">' 51.254 -71.576 5579916.651'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span>g2 = Geod(<span class="py-string">'+ellps=clrk66'</span>) <span class="py-comment"># use proj4 style initialization string</span>
+<span class="py-prompt">>>> </span>az12,az21,dist = g2.inv(boston_lon,boston_lat,portland_lon,portland_lat)
+<span class="py-prompt">>>> </span><span class="py-string">"%7.3f %6.3f %12.3f"</span> % (az12,az21,dist)
+<span class="py-output">'-66.531 75.654  4164192.708'</span></pre>
+  <dl class="fields">
+    <dt>Returns: a new object with type S, a subtype of T</dt>
+    <dt>Overrides:
+        object.__new__
+    </dt>
+  </dl>
+</td></tr></table>
+</div>
+<a name="fwd"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">fwd</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">lons</span>,
+        <span class="sig-arg">lats</span>,
+        <span class="sig-arg">az</span>,
+        <span class="sig-arg">dist</span>,
+        <span class="sig-arg">radians</span>=<span class="sig-default">False</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="pyproj-pysrc.html#Geod.fwd">source code</a></span> 
+    </td>
+  </tr></table>
+  
+  <p>forward transformation - Returns longitudes, latitudes and back 
+  azimuths of terminus points given longitudes (lons) and latitudes (lats) 
+  of initial points, plus forward azimuths (az) and distances (dist). 
+  latitudes (lats) of initial points, plus forward azimuths (az) and 
+  distances (dist).</p>
+  <p>Works with numpy and regular python array objects, python sequences 
+  and scalars.</p>
+  <p>if radians=True, lons/lats and azimuths are radians instead of 
+  degrees. Distances are in meters.</p>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="inv"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">inv</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">lons1</span>,
+        <span class="sig-arg">lats1</span>,
+        <span class="sig-arg">lons2</span>,
+        <span class="sig-arg">lats2</span>,
+        <span class="sig-arg">radians</span>=<span class="sig-default">False</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="pyproj-pysrc.html#Geod.inv">source code</a></span> 
+    </td>
+  </tr></table>
+  
+  <p>inverse transformation - Returns forward and back azimuths, plus 
+  distances between initial points (specified by lons1, lats1) and terminus
+  points (specified by lons2, lats2).</p>
+  <p>Works with numpy and regular python array objects, python sequences 
+  and scalars.</p>
+  <p>if radians=True, lons/lats and azimuths are radians instead of 
+  degrees. Distances are in meters.</p>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="npts"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">npts</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">lon1</span>,
+        <span class="sig-arg">lat1</span>,
+        <span class="sig-arg">lon2</span>,
+        <span class="sig-arg">lat2</span>,
+        <span class="sig-arg">npts</span>,
+        <span class="sig-arg">radians</span>=<span class="sig-default">False</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="pyproj-pysrc.html#Geod.npts">source code</a></span> 
+    </td>
+  </tr></table>
+  
+  <p>Given a single initial point and terminus point (specified by python 
+  floats lon1,lat1 and lon2,lat2), returns a list of longitude/latitude 
+  pairs describing npts equally spaced intermediate points along the 
+  geodesic between the initial and terminus points.</p>
+  <p>if radians=True, lons/lats are radians instead of degrees.</p>
+  <p>Example usage:</p>
+<pre class="py-doctest">
+<span class="py-prompt">>>> </span><span class="py-keyword">from</span> pyproj <span class="py-keyword">import</span> Geod
+<span class="py-prompt">>>> </span>g = Geod(ellps=<span class="py-string">'clrk66'</span>) <span class="py-comment"># Use Clarke 1966 ellipsoid.</span>
+<span class="py-prompt">>>> </span><span class="py-comment"># specify the lat/lons of Boston and Portland.</span>
+<span class="py-prompt">>>> </span>g = Geod(ellps=<span class="py-string">'clrk66'</span>) <span class="py-comment"># Use Clarke 1966 ellipsoid.</span>
+<span class="py-prompt">>>> </span><span class="py-comment"># specify the lat/lons of Boston and Portland.</span>
+<span class="py-prompt">>>> </span>boston_lat = 42.+(15./60.); boston_lon = -71.-(7./60.)
+<span class="py-prompt">>>> </span>portland_lat = 45.+(31./60.); portland_lon = -123.-(41./60.)
+<span class="py-prompt">>>> </span><span class="py-comment"># find ten equally spaced points between Boston and Portland.</span>
+<span class="py-prompt">>>> </span>lonlats = g.npts(boston_lon,boston_lat,portland_lon,portland_lat,10)
+<span class="py-prompt">>>> </span><span class="py-keyword">for</span> lon,lat <span class="py-keyword">in</span> lonlats: <span class="py-string">'%6.3f  %7.3f'</span> % (lat, lon)
+<span class="py-output">'43.528  -75.414'</span>
+<span class="py-output">'44.637  -79.883'</span>
+<span class="py-output">'45.565  -84.512'</span>
+<span class="py-output">'46.299  -89.279'</span>
+<span class="py-output">'46.830  -94.156'</span>
+<span class="py-output">'47.149  -99.112'</span>
+<span class="py-output">'47.251  -104.106'</span>
+<span class="py-output">'47.136  -109.100'</span>
+<span class="py-output">'46.805  -114.051'</span>
+<span class="py-output">'46.262  -118.924'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span><span class="py-comment"># test with radians=True (inputs/outputs in radians, not degrees)</span>
+<span class="py-prompt">>>> </span><span class="py-keyword">import</span> math
+<span class="py-prompt">>>> </span>dg2rad = math.radians(1.)
+<span class="py-prompt">>>> </span>rad2dg = math.degrees(1.)
+<span class="py-prompt">>>> </span>lonlats = g.npts(dg2rad*boston_lon,dg2rad*boston_lat,dg2rad*portland_lon,dg2rad*portland_lat,10,radians=True)
+<span class="py-prompt">>>> </span><span class="py-keyword">for</span> lon,lat <span class="py-keyword">in</span> lonlats: <span class="py-string">'%6.3f  %7.3f'</span> % (rad2dg*lat, rad2dg*lon)
+<span class="py-output">'43.528  -75.414'</span>
+<span class="py-output">'44.637  -79.883'</span>
+<span class="py-output">'45.565  -84.512'</span>
+<span class="py-output">'46.299  -89.279'</span>
+<span class="py-output">'46.830  -94.156'</span>
+<span class="py-output">'47.149  -99.112'</span>
+<span class="py-output">'47.251  -104.106'</span>
+<span class="py-output">'47.136  -109.100'</span>
+<span class="py-output">'46.805  -114.051'</span>
+<span class="py-output">'46.262  -118.924'</span></pre>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>   <a
+        href="pyproj-module.html">Home</a>   </th>
+
+  <!-- Tree link -->
+      <th>   <a
+        href="module-tree.html">Trees</a>   </th>
+
+  <!-- Index link -->
+      <th>   <a
+        href="identifier-index.html">Indices</a>   </th>
+
+  <!-- Help link -->
+      <th>   <a
+        href="help.html">Help</a>   </th>
+
+      <th class="navbar" width="100%"></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Jan 11 09:07:23 2013
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/docs/pyproj.Proj-class.html b/docs/pyproj.Proj-class.html
new file mode 100644
index 0000000..f12496e
--- /dev/null
+++ b/docs/pyproj.Proj-class.html
@@ -0,0 +1,417 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>pyproj.Proj</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>   <a
+        href="pyproj-module.html">Home</a>   </th>
+
+  <!-- Tree link -->
+      <th>   <a
+        href="module-tree.html">Trees</a>   </th>
+
+  <!-- Index link -->
+      <th>   <a
+        href="identifier-index.html">Indices</a>   </th>
+
+  <!-- Help link -->
+      <th>   <a
+        href="help.html">Help</a>   </th>
+
+      <th class="navbar" width="100%"></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        <a href="pyproj-module.html">Package pyproj</a> ::
+        Class Proj
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class Proj</h1><p class="nomargin-top"><span class="codelink"><a href="pyproj-pysrc.html#Proj">source code</a></span></p>
+<pre class="base-tree">
+object --+    
+         |    
+   ??.Proj --+
+             |
+            <strong class="uidshort">Proj</strong>
+</pre>
+
+<hr />
+<p>performs cartographic transformations (converts from 
+  longitude,latitude to native map projection x,y coordinates and vice 
+  versa) using proj (http://trac.osgeo.org/proj/).</p>
+  <p>A Proj class instance is initialized with proj map projection control 
+  parameter key/value pairs. The key/value pairs can either be passed in a 
+  dictionary, or as keyword arguments, or as a proj4 string (compatible 
+  with the proj command). See 
+  http://www.remotesensing.org/geotiff/proj_list for examples of key/value 
+  pairs defining different map projections.</p>
+  <p>Calling a Proj class instance with the arguments lon, lat will convert
+  lon/lat (in degrees) to x/y native map projection coordinates (in 
+  meters).  If optional keyword 'inverse' is True (default is False), the 
+  inverse transformation from x/y to lon/lat is performed. If optional 
+  keyword 'radians' is True (default is False) lon/lat are interpreted as 
+  radians instead of degrees. If optional keyword 'errcheck' is True 
+  (default is False) an exception is raised if the transformation is 
+  invalid. If errcheck=False and the transformation is invalid, no 
+  exception is raised and 1.e30 is returned. If the optional keyword 
+  'preserve_units' is True, the units in map projection coordinates are not
+  forced to be meters.</p>
+  <p>Works with numpy and regular python array objects, python sequences 
+  and scalars.</p>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td align="left" colspan="2" class="table-header">
+    <span class="table-header">Instance Methods</span></td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="pyproj.Proj-class.html#__call__" class="summary-sig-name">__call__</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">*args</span>,
+        <span class="summary-sig-arg">**kw</span>)</span><br />
+      Calling a Proj class instance with the arguments lon, lat will 
+      convert lon/lat (in degrees) to x/y native map projection coordinates
+      (in meters).</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="pyproj-pysrc.html#Proj.__call__">source code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="pyproj.Proj-class.html#is_geocent" class="summary-sig-name">is_geocent</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      returns True if projection in geocentric (x/y) coordinates</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="pyproj-pysrc.html#Proj.is_geocent">source code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="pyproj.Proj-class.html#is_latlong" class="summary-sig-name">is_latlong</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      returns True if projection in geographic (lon/lat) coordinates</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="pyproj-pysrc.html#Proj.is_latlong">source code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code><i>unreachable</i>.Proj</code></b>:
+      <code>__reduce__</code>
+      </p>
+    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+      <code>__delattr__</code>,
+      <code>__format__</code>,
+      <code>__getattribute__</code>,
+      <code>__hash__</code>,
+      <code>__init__</code>,
+      <code>__reduce_ex__</code>,
+      <code>__repr__</code>,
+      <code>__setattr__</code>,
+      <code>__sizeof__</code>,
+      <code>__str__</code>,
+      <code>__subclasshook__</code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== STATIC METHODS ==================== -->
+<a name="section-StaticMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td align="left" colspan="2" class="table-header">
+    <span class="table-header">Static Methods</span></td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">a new object with type S, a subtype of T</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="pyproj.Proj-class.html#__new__" class="summary-sig-name">__new__</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">projparams</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">preserve_units</span>=<span class="summary-sig-default">False</span>,
+        <span class="summary-sig-arg">**kwargs</span>)</span><br />
+      initialize a Proj class instance.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="pyproj-pysrc.html#Proj.__new__">source code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td align="left" colspan="2" class="table-header">
+    <span class="table-header">Properties</span></td>
+</tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code><i>unreachable</i>.Proj</code></b>:
+      <code>proj_version</code>,
+      <code>srs</code>
+      </p>
+    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+      <code>__class__</code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td align="left" colspan="2" class="table-header">
+    <span class="table-header">Method Details</span></td>
+</tr>
+</table>
+<a name="__call__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__call__</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">*args</span>,
+        <span class="sig-arg">**kw</span>)</span>
+    <br /><em class="fname">(Call operator)</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="pyproj-pysrc.html#Proj.__call__">source code</a></span> 
+    </td>
+  </tr></table>
+  
+  <p>Calling a Proj class instance with the arguments lon, lat will convert
+  lon/lat (in degrees) to x/y native map projection coordinates (in 
+  meters).  If optional keyword 'inverse' is True (default is False), the 
+  inverse transformation from x/y to lon/lat is performed.  If optional 
+  keyword 'radians' is True (default is False) the units of lon/lat are 
+  radians instead of degrees. If optional keyword 'errcheck' is True 
+  (default is False) an exception is raised if the transformation is 
+  invalid. If errcheck=False and the transformation is invalid, no 
+  exception is raised and 1.e30 is returned.</p>
+  <p>Instead of calling with lon, lat, a single ndarray of shape n,2 may be
+  used, and one of the same shape will be returned; this is more 
+  efficient.</p>
+  <p>Inputs should be doubles (they will be cast to doubles if they are 
+  not, causing a slight performance hit).</p>
+  <p>Works with numpy and regular python array objects, python sequences 
+  and scalars, but is fastest for array objects.</p>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="__new__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__new__</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">projparams</span>=<span class="sig-default">None</span>,
+        <span class="sig-arg">preserve_units</span>=<span class="sig-default">False</span>,
+        <span class="sig-arg">**kwargs</span>)</span>
+    <br /><em class="fname">Static Method</em>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="pyproj-pysrc.html#Proj.__new__">source code</a></span> 
+    </td>
+  </tr></table>
+  
+  <p>initialize a Proj class instance.</p>
+  <p>Proj4 projection control parameters must either be given in a 
+  dictionary 'projparams' or as keyword arguments. See the proj 
+  documentation (http://trac.osgeo.org/proj/) for more information about 
+  specifying projection parameters.</p>
+  <p>Example usage:</p>
+<pre class="py-doctest">
+<span class="py-prompt">>>> </span><span class="py-keyword">from</span> pyproj <span class="py-keyword">import</span> Proj
+<span class="py-prompt">>>> </span>p = Proj(proj=<span class="py-string">'utm'</span>,zone=10,ellps=<span class="py-string">'WGS84'</span>) <span class="py-comment"># use kwargs</span>
+<span class="py-prompt">>>> </span>x,y = p(-120.108, 34.36116666)
+<span class="py-prompt">>>> </span><span class="py-string">'x=%9.3f y=%11.3f'</span> % (x,y)
+<span class="py-output">'x=765975.641 y=3805993.134'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span><span class="py-string">'lon=%8.3f lat=%5.3f'</span> % p(x,y,inverse=True)
+<span class="py-output">'lon=-120.108 lat=34.361'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span><span class="py-comment"># do 3 cities at a time in a tuple (Fresno, LA, SF)</span>
+<span class="py-prompt">>>> </span>lons = (-119.72,-118.40,-122.38)
+<span class="py-prompt">>>> </span>lats = (36.77, 33.93, 37.62 )
+<span class="py-prompt">>>> </span>x,y = p(lons, lats)
+<span class="py-prompt">>>> </span><span class="py-string">'x: %9.3f %9.3f %9.3f'</span> % x
+<span class="py-output">'x: 792763.863 925321.537 554714.301'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span><span class="py-string">'y: %9.3f %9.3f %9.3f'</span> % y
+<span class="py-output">'y: 4074377.617 3763936.941 4163835.303'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span>lons, lats = p(x, y, inverse=True) <span class="py-comment"># inverse transform</span>
+<span class="py-prompt">>>> </span><span class="py-string">'lons: %8.3f %8.3f %8.3f'</span> % lons
+<span class="py-output">'lons: -119.720 -118.400 -122.380'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span><span class="py-string">'lats: %8.3f %8.3f %8.3f'</span> % lats
+<span class="py-output">'lats:   36.770   33.930   37.620'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span>p2 = Proj(<span class="py-string">'+proj=utm +zone=10 +ellps=WGS84'</span>) <span class="py-comment"># use proj4 string</span>
+<span class="py-prompt">>>> </span>x,y = p2(-120.108, 34.36116666)
+<span class="py-prompt">>>> </span><span class="py-string">'x=%9.3f y=%11.3f'</span> % (x,y)
+<span class="py-output">'x=765975.641 y=3805993.134'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span>p = Proj(init=<span class="py-string">"epsg:32667"</span>)
+<span class="py-prompt">>>> </span><span class="py-string">'x=%12.3f y=%12.3f (meters)'</span> % p(-114.057222, 51.045)
+<span class="py-output">'x=-1783486.760 y= 6193833.196 (meters)'</span>
+<span class="py-output"></span><span class="py-prompt">>>> </span>p = Proj(<span class="py-string">"+init=epsg:32667"</span>,preserve_units=True)
+<span class="py-prompt">>>> </span><span class="py-string">'x=%12.3f y=%12.3f (feet)'</span> % p(-114.057222, 51.045)
+<span class="py-output">'x=-5851322.810 y=20320934.409 (feet)'</span></pre>
+  <dl class="fields">
+    <dt>Returns: a new object with type S, a subtype of T</dt>
+    <dt>Overrides:
+        object.__new__
+    </dt>
+  </dl>
+</td></tr></table>
+</div>
+<a name="is_geocent"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">is_geocent</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="pyproj-pysrc.html#Proj.is_geocent">source code</a></span> 
+    </td>
+  </tr></table>
+  
+  <p>returns True if projection in geocentric (x/y) coordinates</p>
+  <dl class="fields">
+    <dt>Overrides:
+        <i>unreachable</i>.Proj.is_geocent
+    </dt>
+  </dl>
+</td></tr></table>
+</div>
+<a name="is_latlong"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">is_latlong</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="pyproj-pysrc.html#Proj.is_latlong">source code</a></span> 
+    </td>
+  </tr></table>
+  
+  <p>returns True if projection in geographic (lon/lat) coordinates</p>
+  <dl class="fields">
+    <dt>Overrides:
+        <i>unreachable</i>.Proj.is_latlong
+    </dt>
+  </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>   <a
+        href="pyproj-module.html">Home</a>   </th>
+
+  <!-- Tree link -->
+      <th>   <a
+        href="module-tree.html">Trees</a>   </th>
+
+  <!-- Index link -->
+      <th>   <a
+        href="identifier-index.html">Indices</a>   </th>
+
+  <!-- Help link -->
+      <th>   <a
+        href="help.html">Help</a>   </th>
+
+      <th class="navbar" width="100%"></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Fri Jan 11 09:07:23 2013
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/docs/redirect.html b/docs/redirect.html
new file mode 100644
index 0000000..6972207
--- /dev/null
+++ b/docs/redirect.html
@@ -0,0 +1,38 @@
+<html><head><title>Epydoc Redirect Page</title>
+<meta http-equiv="cache-control" content="no-cache" />
+<meta http-equiv="expires" content="0" />
+<meta http-equiv="pragma" content="no-cache" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+<body>
+<script type="text/javascript">
+<!--
+var pages = ["pyproj.Geod-c", "pyproj.Proj-c", "pyproj-m"];
+var dottedName = get_anchor();
+if (dottedName) {
+    var target = redirect_url(dottedName);
+    if (target) window.location.replace(target);
+}
+// -->
+</script>
+
+<h3>Epydoc Auto-redirect page</h3>
+
+<p>When javascript is enabled, this page will redirect URLs of
+the form <tt>redirect.html#<i>dotted.name</i></tt> to the
+documentation for the object with the given fully-qualified
+dotted name.</p>
+<p><a id="message">   </a></p>
+
+<script type="text/javascript">
+<!--
+if (dottedName) {
+    var msg = document.getElementById("message");
+    msg.innerHTML = "No documentation found for <tt>"+
+                    dottedName+"</tt>";
+}
+// -->
+</script>
+
+</body>
+</html>
diff --git a/lib/pyproj/__init__.py b/lib/pyproj/__init__.py
index 20df773..bd22065 100644
--- a/lib/pyproj/__init__.py
+++ b/lib/pyproj/__init__.py
@@ -1,12 +1,14 @@
 """
-Pyrex wrapper to provide python interfaces to
-PROJ.4 (http://proj.maptools.org) functions.
+Cython wrapper to provide python interfaces to
+PROJ.4 (http://trac.osgeo.org/proj/) functions.
 
 Performs cartographic transformations and geodetic computations.
 
 The Proj class can convert from geographic (longitude,latitude)
 to native map projection (x,y) coordinates and vice versa, or
 from one map projection coordinate system directly to another.
+The module variable pj_list is a dictionary containing all the
+available projections and their descriptions.
 
 The Geod class can perform forward and inverse geodetic, or
 Great Circle, computations.  The forward computation involves
@@ -45,29 +47,206 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
 NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
 CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. """
 
-from . import _proj
-from . import _geod
-_Proj = _proj.Proj
-_Geod = _geod.Geod
-_transform = _proj._transform
+from pyproj import _proj
+from pyproj.datadir import pyproj_datadir
 __version__ =  _proj.__version__
 set_datapath =  _proj.set_datapath
 from array import array
-import os
+import os, math
 #import numpy as np
-
-pyproj_datadir = os.sep.join([os.path.dirname(__file__), 'data'])
-if not os.path.isdir(pyproj_datadir):
-    msg="proj data directory not found. Expecting it at: %s"%pyproj_datadir
-    raise IOError(msg)
+pj_list={
+'aea': "Albers Equal Area",
+'aeqd': "Azimuthal Equidistant",
+'airy': "Airy",
+'aitoff': "Aitoff",
+'alsk': "Mod. Stererographics of Alaska",
+'apian': "Apian Globular I",
+'august': "August Epicycloidal",
+'bacon': "Bacon Globular",
+'bipc': "Bipolar conic of western hemisphere",
+'boggs': "Boggs Eumorphic",
+'bonne': "Bonne (Werner lat_1=90)",
+'cass': "Cassini",
+'cc': "Central Cylindrical",
+'cea': "Equal Area Cylindrical",
+'chamb': "Chamberlin Trimetric",
+'collg': "Collignon",
+'crast': "Craster Parabolic (Putnins P4)",
+'denoy': "Denoyer Semi-Elliptical",
+'eck1': "Eckert I",
+'eck2': "Eckert II",
+'eck3': "Eckert III",
+'eck4': "Eckert IV",
+'eck5': "Eckert V",
+'eck6': "Eckert VI",
+'eqc': "Equidistant Cylindrical (Plate Caree)",
+'eqdc': "Equidistant Conic",
+'etmerc': "Extended Transverse Mercator" ,
+'euler': "Euler",
+'fahey': "Fahey",
+'fouc': "Foucaut",
+'fouc_s': "Foucaut Sinusoidal",
+'gall': "Gall (Gall Stereographic)",
+'geocent': "Geocentric",
+'geos': "Geostationary Satellite View",
+'gins8': "Ginsburg VIII (TsNIIGAiK)",
+'gn_sinu': "General Sinusoidal Series",
+'gnom': "Gnomonic",
+'goode': "Goode Homolosine",
+'gs48': "Mod. Stererographics of 48 U.S.",
+'gs50': "Mod. Stererographics of 50 U.S.",
+'hammer': "Hammer & Eckert-Greifendorff",
+'hatano': "Hatano Asymmetrical Equal Area",
+'healpix': "HEALPix",
+'rhealpix': "rHEALPix",
+'igh':  "Interrupted Goode Homolosine",
+'imw_p': "Internation Map of the World Polyconic",
+'isea':  "Icosahedral Snyder Equal Area",
+'kav5': "Kavraisky V",
+'kav7': "Kavraisky VII",
+'krovak': "Krovak",
+'labrd': "Laborde",
+'laea': "Lambert Azimuthal Equal Area",
+'lagrng': "Lagrange",
+'larr': "Larrivee",
+'lask': "Laskowski",
+'lonlat': "Lat/long (Geodetic)",
+'latlon': "Lat/long (Geodetic alias)",
+'latlong': "Lat/long (Geodetic alias)",
+'longlat': "Lat/long (Geodetic alias)",
+'lcc': "Lambert Conformal Conic",
+'lcca': "Lambert Conformal Conic Alternative",
+'leac': "Lambert Equal Area Conic",
+'lee_os': "Lee Oblated Stereographic",
+'loxim': "Loximuthal",
+'lsat': "Space oblique for LANDSAT",
+'mbt_s': "McBryde-Thomas Flat-Polar Sine",
+'mbt_fps': "McBryde-Thomas Flat-Pole Sine (No. 2)",
+'mbtfpp': "McBride-Thomas Flat-Polar Parabolic",
+'mbtfpq': "McBryde-Thomas Flat-Polar Quartic",
+'mbtfps': "McBryde-Thomas Flat-Polar Sinusoidal",
+'merc': "Mercator",
+'mil_os': "Miller Oblated Stereographic",
+'mill': "Miller Cylindrical",
+'moll': "Mollweide",
+'murd1': "Murdoch I",
+'murd2': "Murdoch II",
+'murd3': "Murdoch III",
+'natearth': "Natural Earth",
+'nell': "Nell",
+'nell_h': "Nell-Hammer",
+'nicol': "Nicolosi Globular",
+'nsper': "Near-sided perspective",
+'nzmg': "New Zealand Map Grid",
+'ob_tran': "General Oblique Transformation",
+'ocea': "Oblique Cylindrical Equal Area",
+'oea': "Oblated Equal Area",
+'omerc': "Oblique Mercator",
+'ortel': "Ortelius Oval",
+'ortho': "Orthographic",
+'pconic': "Perspective Conic",
+'poly': "Polyconic (American)",
+'putp1': "Putnins P1",
+'putp2': "Putnins P2",
+'putp3': "Putnins P3",
+'putp3p': "Putnins P3'",
+'putp4p': "Putnins P4'",
+'putp5': "Putnins P5",
+'putp5p': "Putnins P5'",
+'putp6': "Putnins P6",
+'putp6p': "Putnins P6'",
+'qua_aut': "Quartic Authalic",
+'robin': "Robinson",
+'rouss': "Roussilhe Stereographic",
+'rpoly': "Rectangular Polyconic",
+'sinu': "Sinusoidal (Sanson-Flamsteed)",
+'somerc': "Swiss. Obl. Mercator",
+'stere': "Stereographic",
+'sterea': "Oblique Stereographic Alternative",
+'gstmerc': "Gauss-Schreiber Transverse Mercator (aka Gauss-Laborde Reunion)",
+'tcc': "Transverse Central Cylindrical",
+'tcea': "Transverse Cylindrical Equal Area",
+'tissot': "Tissot Conic",
+'tmerc': "Transverse Mercator",
+'tpeqd': "Two Point Equidistant",
+'tpers': "Tilted perspective",
+'ups': "Universal Polar Stereographic",
+'urm5': "Urmaev V",
+'urmfps': "Urmaev Flat-Polar Sinusoidal",
+'utm': "Universal Transverse Mercator (UTM)",
+'vandg': "van der Grinten (I)",
+'vandg2': "van der Grinten II",
+'vandg3': "van der Grinten III",
+'vandg4': "van der Grinten IV",
+'vitk1': "Vitkovsky I",
+'wag1': "Wagner I (Kavraisky VI)",
+'wag2': "Wagner II",
+'wag3': "Wagner III",
+'wag4': "Wagner IV",
+'wag5': "Wagner V",
+'wag6': "Wagner VI",
+'wag7': "Wagner VII",
+'weren': "Werenskiold I",
+'wink1': "Winkel I",
+'wink2': "Winkel II",
+'wintri': "Winkel Tripel"}
+
+pj_ellps={
+"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"},
+}
+
+#if not os.path.isdir(pyproj_datadir):
+#    msg="proj data directory not found. Expecting it at: %s"%pyproj_datadir
+#    raise IOError(msg)
 
 set_datapath(pyproj_datadir)
 
-class Proj(_Proj):
+class Proj(_proj.Proj):
     """
     performs cartographic transformations (converts from
     longitude,latitude to native map projection x,y coordinates and
-    vice versa) using proj (http://proj.maptools.org/)
+    vice versa) using proj (http://trac.osgeo.org/proj/).
 
     A Proj class instance is initialized with proj map projection
     control parameter key/value pairs. The key/value pairs can
@@ -99,7 +278,7 @@ class Proj(_Proj):
 
         Proj4 projection control parameters must either be given in a
         dictionary 'projparams' or as keyword arguments. See the proj
-        documentation (http://proj.maptools.org) for more information
+        documentation (http://trac.osgeo.org/proj/) for more information
         about specifying projection parameters.
 
         Example usage:
@@ -161,7 +340,7 @@ class Proj(_Proj):
         # look for EPSG, replace with epsg (EPSG only works
         # on case-insensitive filesystems).
         projstring = projstring.replace('EPSG','epsg')
-        return _Proj.__new__(self, projstring)
+        return _proj.Proj.__new__(self, projstring)
 
     def __call__(self, *args, **kw):
     #,lon,lat,inverse=False,radians=False,errcheck=False):
@@ -194,9 +373,9 @@ class Proj(_Proj):
         #    latlon = np.array(args[0], copy=True,
         #                      order='C', dtype=float, ndmin=2)
         #    if inverse:
-        #        _Proj._invn(self, latlon, radians=radians, errcheck=errcheck)
+        #        _proj.Proj._invn(self, latlon, radians=radians, errcheck=errcheck)
         #    else:
-        #        _Proj._fwdn(self, latlon, radians=radians, errcheck=errcheck)
+        #        _proj.Proj._fwdn(self, latlon, radians=radians, errcheck=errcheck)
         #    return latlon
         lon, lat = args
         # process inputs, making copies that support buffer API.
@@ -204,9 +383,9 @@ class Proj(_Proj):
         iny, yisfloat, yislist, yistuple = _copytobuffer(lat)
         # call proj4 functions. inx and iny modified in place.
         if inverse:
-            _Proj._inv(self, inx, iny, radians=radians, errcheck=errcheck)
+            _proj.Proj._inv(self, inx, iny, radians=radians, errcheck=errcheck)
         else:
-            _Proj._fwd(self, inx, iny, radians=radians, errcheck=errcheck)
+            _proj.Proj._fwd(self, inx, iny, radians=radians, errcheck=errcheck)
         # if inputs were lists, tuples or floats, convert back.
         outx = _convertback(xisfloat,xislist,xistuple,inx)
         outy = _convertback(yisfloat,yislist,xistuple,iny)
@@ -214,11 +393,11 @@ class Proj(_Proj):
 
     def is_latlong(self):
         """returns True if projection in geographic (lon/lat) coordinates"""
-        return _Proj.is_latlong(self)
+        return _proj.Proj.is_latlong(self)
 
     def is_geocent(self):
         """returns True if projection in geocentric (x/y) coordinates"""
-        return _Proj.is_geocent(self)
+        return _proj.Proj.is_geocent(self)
 
 def transform(p1, p2, x, y, z=None, radians=False):
     """
@@ -300,7 +479,7 @@ def transform(p1, p2, x, y, z=None, radians=False):
     else:
         inz = None
     # call pj_transform.  inx,iny,inz buffers modified in place.
-    _transform(p1,p2,inx,iny,inz,radians)
+    _proj._transform(p1,p2,inx,iny,inz,radians)
     # if inputs were lists, tuples or floats, convert back.
     outx = _convertback(xisfloat,xislist,xistuple,inx)
     outy = _convertback(yisfloat,yislist,xistuple,iny)
@@ -310,6 +489,13 @@ def transform(p1, p2, x, y, z=None, radians=False):
     else:
         return outx, outy
 
+def _copytobuffer_return_scalar(x):
+    try:
+        # inx,isfloat,islist,istuple
+        return array('d',(float(x),)),True,False,False
+    except:
+        raise TypeError('input must be an array, list, tuple or scalar')
+
 def _copytobuffer(x):
     """
     return a copy of x as an object that supports the python Buffer
@@ -322,40 +508,45 @@ def _copytobuffer(x):
     isfloat = False; islist = False; istuple = False
     # first, if it's a numpy array scalar convert to float
     # (array scalars don't support buffer API)
-    if hasattr(x,'shape') and x.shape == (): x = float(x)
-    try:
-        # typecast numpy arrays to double.
-        # (this makes a copy - which is crucial
-        #  since buffer is modified in place)
-        x.dtype.char
-        inx = x.astype('d')
-    except:
-        try: # perhaps they are Numeric/numarrays?
-            x.typecode()
-            inx = x.astype('d')
-        except:
-            # perhaps they are regular python arrays?
+    if hasattr(x,'shape'):
+        if x.shape == ():
+            return _copytobuffer_return_scalar(x)
+        else:
             try:
-                x.typecode
-                inx = array('d',x)
+                # typecast numpy arrays to double.
+                # (this makes a copy - which is crucial
+                #  since buffer is modified in place)
+                x.dtype.char
+                inx = x.astype('d')
+                # inx,isfloat,islist,istuple
+                return inx,False,False,False
             except:
-                # try to convert to python array
-                # a list.
-                if type(x) == list:
-                    inx = array('d',x)
-                    islist = True
-                # a tuple.
-                elif type(x) == tuple:
-                    inx = array('d',x)
-                    istuple = True
-                # a scalar?
-                else:
-                    try:
-                        x = float(x)
-                        inx = array('d',(x,))
-                        isfloat = True
-                    except:
-                        raise TypeError('input must be an array, list, tuple or scalar')
+                try: # perhaps they are Numeric/numarrays?
+                    # sorry, not tested yet.
+                    # i don't know Numeric/numarrays has `shape'.
+                    x.typecode()
+                    inx = x.astype('d')
+                    # inx,isfloat,islist,istuple
+                    return inx,False,False,False
+                except:
+                    raise TypeError('input must be an array, list, tuple or scalar')
+    else:
+        # perhaps they are regular python arrays?
+        if hasattr(x, 'typecode'):
+            #x.typecode
+            inx = array('d',x)
+        # try to convert to python array
+        # a list.
+        elif type(x) == list:
+            inx = array('d',x)
+            islist = True
+        # a tuple.
+        elif type(x) == tuple:
+            inx = array('d',x)
+            istuple = True
+        # a scalar?
+        else:
+            return _copytobuffer_return_scalar(x)
     return inx,isfloat,islist,istuple
 
 def _convertback(isfloat,islist,istuple,inx):
@@ -376,69 +567,75 @@ def _dict2string(projparams):
         pjargs.append('+'+key+"="+str(value)+' ')
     return ''.join(pjargs)
 
-class Geod(_Geod):
+class Geod(_proj.Geod):
     """
     performs forward and inverse geodetic, or Great Circle,
     computations.  The forward computation (using the 'fwd' method)
     involves determining latitude, longitude and back azimuth of a
+    computations.  The forward computation (using the 'fwd' method)
+    involves determining latitude, longitude and back azimuth of a
     terminus point given the latitude and longitude of an initial
     point, plus azimuth and distance. The inverse computation (using
     the 'inv' method) involves determining the forward and back
     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.
 
         Geodetic parameters for specifying the ellipsoid
-        can be given in a dictionary 'initparams', as keyword arguments, 
+        can be given in a dictionary 'initparams', as keyword arguments,
         or as as proj4 geod initialization string.
-        Following is a list of the ellipsoids that may be defined using the 
-        'ellps' keyword:
+        Following is a list of the ellipsoids that may be defined using the
+        'ellps' keyword (these are stored in the model variable 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
+           airy a=6377563.396     b=6356256.910    Airy 1830
+           APL4.9 a=6378137.0.    rf=298.25        Appl. Physics. 1965
+           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
+           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.247167427 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
+           helmert a=6378200.     rf=298.3         Helmert 1906
            hough a=6378270.0      rf=297.          Hough
-            intl a=6378388.0      rf=297.          International 1909 (Hayford)
+           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
+           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 (r=6370997)
+           sphere a=6370997.0     b=6370997.0      Normal Sphere (r=6370997)
 
         The parameters of the ellipsoid may also be set directly using
         the 'a' (semi-major or equatorial axis radius) keyword, and
@@ -446,7 +643,9 @@ class Geod(_Geod):
         or polar axis radius), 'e' (eccentricity), 'es' (eccentricity
         squared), 'f' (flattening), or 'rf' (reciprocal flattening).
 
-        See the proj documentation (http://proj.maptools.org) for more
+        See the proj documentation (http://trac.osgeo.org/proj/) for more
+
+        See the proj documentation (http://trac.osgeo.org/proj/) for more
         information about specifying ellipsoid parameters (specifically,
         the chapter 'Specifying the Earth's figure' in the main Proj
         users manual).
@@ -479,39 +678,79 @@ class Geod(_Geod):
         >>> 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)
-        # first try a Proj class (catches errors properly)
-        projstring = initstring + ' +proj=latlon'
-        p = Proj(projstring) # this is never used
-        return _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 'ellps' in kwargs:
+            # 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 'b' in ellps_dict:
+                b = ellps_dict['b']
+                es = 1. - (b * b) / (a * a)
+                f = (a - b)/a
+            elif 'rf' in ellps_dict:
+                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 'b' in kwargs:
+                b = kwargs['b']
+                es = 1. - (b * b) / (a * a)
+                f = (a - b)/a
+            elif 'rf' in kwargs:
+                f = 1./kwargs['rf']
+                b = a*(1. - f)
+                es = 1. - (b * b) / (a * a)
+            elif 'f' in kwargs:
+                f = kwargs['f']
+                b = a*(1. - f)
+                es = 1. - (b/a)**2
+            elif 'es' in kwargs:
+                es = kwargs['es']
+                b = math.sqrt(a**2 - es*a**2)
+                f = (a - b)/a
+            elif 'e' in kwargs:
+                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.b = b
+        self.f = f
+        self.es = es
+        return _proj.Geod.__new__(self, a, f)
 
     def fwd(self, lons, lats, az, dist, radians=False):
         """
@@ -519,6 +758,8 @@ class Geod(_Geod):
         azimuths of terminus points given longitudes (lons) and
         latitudes (lats) of initial points, plus forward azimuths (az)
         and distances (dist).
+        latitudes (lats) of initial points, plus forward azimuths (az)
+        and distances (dist).
 
         Works with numpy and regular python array objects, python
         sequences and scalars.
@@ -531,15 +772,14 @@ class Geod(_Geod):
         iny, yisfloat, yislist, yistuple = _copytobuffer(lats)
         inz, zisfloat, zislist, zistuple = _copytobuffer(az)
         ind, disfloat, dislist, distuple = _copytobuffer(dist)
-        # call geod_for function. inputs modified in place.
-        _Geod._fwd(self, inx, iny, inz, ind, radians=radians)
+        _proj.Geod._fwd(self, inx, iny, inz, ind, radians=radians)
         # if inputs were lists, tuples or floats, convert back.
         outx = _convertback(xisfloat,xislist,xistuple,inx)
         outy = _convertback(yisfloat,yislist,xistuple,iny)
         outz = _convertback(zisfloat,zislist,zistuple,inz)
         return outx, outy, outz
 
-    def inv(self, lons1, lats1, lons2, lats2, radians=False):
+    def inv(self,lons1,lats1,lons2,lats2,radians=False):
         """
         inverse transformation - Returns forward and back azimuths, plus
         distances between initial points (specified by lons1, lats1) and
@@ -556,8 +796,7 @@ class Geod(_Geod):
         iny, yisfloat, yislist, yistuple = _copytobuffer(lats1)
         inz, zisfloat, zislist, zistuple = _copytobuffer(lons2)
         ind, disfloat, dislist, distuple = _copytobuffer(lats2)
-        # call geod_inv function. inputs modified in place.
-        _Geod._inv(self, inx, iny, inz, ind, radians=radians)
+        _proj.Geod._inv(self,inx,iny,inz,ind,radians=radians)
         # if inputs were lists, tuples or floats, convert back.
         outx = _convertback(xisfloat,xislist,xistuple,inx)
         outy = _convertback(yisfloat,yislist,xistuple,iny)
@@ -579,6 +818,8 @@ class Geod(_Geod):
         >>> from pyproj import Geod
         >>> g = Geod(ellps='clrk66') # Use Clarke 1966 ellipsoid.
         >>> # specify the lat/lons of Boston and Portland.
+        >>> g = Geod(ellps='clrk66') # Use Clarke 1966 ellipsoid.
+        >>> # specify the lat/lons of Boston and Portland.
         >>> boston_lat = 42.+(15./60.); boston_lon = -71.-(7./60.)
         >>> portland_lat = 45.+(31./60.); portland_lon = -123.-(41./60.)
         >>> # find ten equally spaced points between Boston and Portland.
@@ -594,8 +835,24 @@ class Geod(_Geod):
         '47.136  -109.100'
         '46.805  -114.051'
         '46.262  -118.924'
+        >>> # test with radians=True (inputs/outputs in radians, not degrees)
+        >>> import math
+        >>> dg2rad = math.radians(1.)
+        >>> rad2dg = math.degrees(1.)
+        >>> lonlats = g.npts(dg2rad*boston_lon,dg2rad*boston_lat,dg2rad*portland_lon,dg2rad*portland_lat,10,radians=True)
+        >>> for lon,lat in lonlats: '%6.3f  %7.3f' % (rad2dg*lat, rad2dg*lon)
+        '43.528  -75.414'
+        '44.637  -79.883'
+        '45.565  -84.512'
+        '46.299  -89.279'
+        '46.830  -94.156'
+        '47.149  -99.112'
+        '47.251  -104.106'
+        '47.136  -109.100'
+        '46.805  -114.051'
+        '46.262  -118.924'
         """
-        lons, lats = _Geod._npts(self,lon1,lat1,lon2,lat2,npts,radians=radians)
+        lons, lats = _proj.Geod._npts(self, lon1, lat1, lon2, lat2, npts, radians=radians)
         return list(zip(lons, lats))
 
 def test():
diff --git a/lib/pyproj/data/FL b/lib/pyproj/data/FL
deleted file mode 100644
index 86058d0..0000000
Binary files a/lib/pyproj/data/FL and /dev/null differ
diff --git a/lib/pyproj/data/IGNF b/lib/pyproj/data/IGNF
index 47aa87b..5a5d559 100644
--- a/lib/pyproj/data/IGNF
+++ b/lib/pyproj/data/IGNF
@@ -1,6 +1,6 @@
 # W [AMANU49]
 # W [AMANU63]
-# W [AMST63]
+<AMST63> +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]
 <ANAA92> +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]
@@ -14,10 +14,11 @@
 # W [CASS1733]
 <CIOBIH> +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]
-<CROZ63> +title=Crozet 1963 +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
+<CROZ63> +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 <>
 <CSG67> +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 <>
 <ED50> +title=ED50 +proj=geocent +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
 <EFATE57> +title=EFATE-IGN 1957 +proj=geocent +towgs84=-127.0000,-769.0000,472.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
+<ETRS89> +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]
@@ -40,7 +41,7 @@
 <IGN72> +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]
 <KAUE70> +title=MHPF70 (Kauehi) Tuamotu +proj=geocent +towgs84=126.7400,300.1000,-75.4900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<KERG62CAR> +title=Kerguelen - K0 +proj=geocent +towgs84=145.0000,-187.0000,103.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
+<KERG62CAR> +title=Kerguelen - K0 +proj=geocent +towgs84=144.8990,-186.7700,100.9230 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
 <LIFOU56> +title=Lifou - Iles Loyaute (IGN56) +proj=geocent +towgs84=336.0000,223.0000,-231.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
 <LUREF> +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]
@@ -61,7 +62,7 @@
 # W [MURU78]
 # W [NC51]
 # W [NOVA53]
-<NTF> +title=Nouvelle Triangulation Francaise +proj=geocent +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +units=m +no_defs <>
+<NTF> +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 <>
 <NUKU72> +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 <>
 <NUKU94> +title=SAT94 (Nukutavake) Tuamotu +proj=geocent +towgs84=197.1600,200.1700,-48.0800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
 <OUVEA72CAR> +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 <>
@@ -78,17 +79,18 @@
 <REUN47> +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]
-<RGF93> +title=Reseau geodesique francais 1993 +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGFG95> +title=Reseau geodesique francais de Guyane 1995 +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGM04> +title=RGM04 (Reseau Geodesique de Mayotte 2004) +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGNC> +title=Reseau Geodesique de Nouvelle-Caledonie +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGPF> +title=RGPF (Reseau Geodesique de Polynesie Francaise) +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGR92> +title=Reseau geodesique Reunion 1992 +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGSPM06> +title=Reseau Geodesique Saint-Pierre-et-Miquelon (2006) +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RRAF91> +title=RRAF 1991 (Reseau de Reference des Antilles Francaises) +proj=geocent +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
+<RGF93> +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 <>
+<RGFG95> +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 <>
+<RGM04> +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 <>
+<RGNC> +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 <>
+<RGPF> +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 <>
+<RGR92> +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 <>
+<RGSPM06> +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 <>
+<RGTAAF07> +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 <>
+<RRAF91> +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 <>
 <SAT84> +title=SAT84 (Rurutu) Iles Australes +proj=geocent +towgs84=202.1300,174.6000,-15.7400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
 <SHOM84> +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 <>
-# W [STPL69]
+<STPL69> +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 <>
 <STPM50> +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]
 <TAHAA> +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 <>
@@ -96,7 +98,7 @@
 <TAHI79> +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]
 <TANNA> +title=Tanna Bloc Sud +proj=geocent +towgs84=-139.0000,-967.0000,436.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<TERA50> +title=Pointe Geologie - Perroud 1950 +proj=geocent +towgs84=324.8000,153.6000,172.1000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
+<TERA50> +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]
@@ -105,10 +107,10 @@
 # W [WALL76]
 <WALL78> +title=Wallis-Uvea 1978 (MOP78) +proj=geocent +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
 <WGS72> +title=World Geodetic System 1972 +proj=geocent +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +units=m +no_defs <>
-<WGS84> +title=World Geodetic System 1984 +proj=geocent +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
+<WGS84> +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]
-# W [AMST63GEO]
+<AMST63GEO> +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]
 <ANAA92GEO> +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]
@@ -121,10 +123,11 @@
 # W [CADA80GEO]
 # W [CASS1733GEO]
 # W [CLIP67GEO]
-<CROZ63GEO> +title=Crozet 1963 +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<CSG67GEO> +title=Guyane CSG67 UTM fuseau 21 +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 <>
+<CROZ63GEO> +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 <>
+<CSG67GEO> +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 <>
 <ED50G> +title=ED50 +proj=longlat +towgs84=-84.0000,-97.0000,-117.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
 <EFATE57GEO> +title=EFATE-IGN 1957 +proj=longlat +towgs84=-127.0000,-769.0000,472.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
+<ETRS89GEO> +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]
@@ -147,7 +150,7 @@
 <IGN72GEO> +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]
 <KAUE70GEO> +title=MHPF70 (Kauehi) Tuamotu +proj=longlat +towgs84=126.7400,300.1000,-75.4900 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<KERG62GEO> +title=Kerguelen - K0 +proj=longlat +towgs84=145.0000,-187.0000,103.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
+<KERG62GEO> +title=Kerguelen - K0 +proj=longlat +towgs84=144.8990,-186.7700,100.9230 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
 <LIFOU56GEO> +title=Lifou - Iles Loyaute (IGN56) +proj=longlat +towgs84=336.0000,223.0000,-231.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
 <LUXGEO> +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]
@@ -168,8 +171,8 @@
 # W [MURU78GEO]
 # W [NC51GEO]
 # W [NOVA53GEO]
-<NTFG> +title=Nouvelle Triangulation Francaise Greenwich degres sexagesimaux +proj=longlat +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +units=m +no_defs <>
-<NTFP> +title=Nouvelle Triangulation Francaise Paris grades +proj=longlat +nadgrids=ntf_r93.gsb,null +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +units=m +no_defs <>
+<NTFG> +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 <>
+<NTFP> +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 <>
 <NUKU72GEO> +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 <>
 <NUKU94GEO> +title=SAT94 (Nukutavake) Tuamotu +proj=longlat +towgs84=197.1600,200.1700,-48.0800 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
 <OUVEA72GEO> +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 <>
@@ -185,16 +188,17 @@
 <REUN47GEO> +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]
-<RGF93G> +title=Reseau geodesique francais 1993 +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGFG95GEO> +title=Reseau geodesique francais de Guyane 1995 +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGM04GEO> +title=RGM04 (Reseau Geodesique de Mayotte 2004) +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGNCGEO> +title=Reseau Geodesique de Nouvelle-Caledonie +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGPFGEO> +title=RGPF (Reseau Geodesique de Polynesie Francaise) +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGR92GEO> +title=Reseau geodesique de la Reunion 1992 +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<RGSPM06GEO> +title=Saint-Pierre-et-Miquelon (2006) +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
+<RGF93G> +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 <>
+<RGFG95GEO> +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 <>
+<RGM04GEO> +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 <>
+<RGNCGEO> +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 <>
+<RGPFGEO> +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 <>
+<RGR92GEO> +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 <>
+<RGSPM06GEO> +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 <>
+<RGTAAF07G> +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 <>
 <SAT84GEO> +title=SAT84 (Rurutu) Iles Australes +proj=longlat +towgs84=202.1300,174.6000,-15.7400 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
 <SHOM84GEO> +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 <>
-# W [STPL69GEO]
+<STPL69GEO> +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 <>
 <STPM50GEO> +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]
 <TAHAAGEO> +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 <>
@@ -202,7 +206,7 @@
 <TAHI79GEO> +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]
 <TANNAGEO> +title=Tanna Bloc Sud +proj=longlat +towgs84=-139.0000,-967.0000,436.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
-<TERA50GEO> +title=Pointe Geologie - Perroud 1950 +proj=longlat +towgs84=324.8000,153.6000,172.1000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
+<TERA50G> +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]
@@ -212,11 +216,11 @@
 # W [WALL76GEO]
 <WALL78GEO> +title=Wallis - Uvea 1978 (MOP78) +proj=longlat +towgs84=253.0000,-133.0000,-127.0000 +a=6378388.0000 +rf=297.0000000000000 +units=m +no_defs <>
 <WGS72G> +title=WGS72 +proj=longlat +towgs84=0.0000,12.0000,6.0000 +a=6378135.0000 +rf=298.2600000000000 +units=m +no_defs <>
-<WGS84G> +title=World Geodetic System 1984 +proj=longlat +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
-<WGS84RRAFGEO> +title=Reseau de reference des Antilles francaises (1988-1991) +proj=longlat +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +units=m +no_defs <>
+<WGS84G> +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 <>
+<WGS84RRAFGEO> +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 <>
 <XGEO> +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]
-# W [AMST63UTM43S]
+<AMST63UTM43S> +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]
 <ANAA92UTM6S> +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 <>
 <APAT86UTM6S> +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 <>
@@ -225,27 +229,30 @@
 <CAD97UTM38S> +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]
-<CROZ63UTM39S> +title=Crozet 1963 +proj=tmerc +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 <>
+<CROZ63UTM39S> +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 <>
 <CSG67UTM21> +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 <>
 <CSG67UTM22> +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 <>
 <EFATE57UT59S> +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 <>
+<ETRS89LAEA> +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 <>
+<ETRS89LCC> +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]
 <FANGA84UTM7S> +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 <>
-<GEOPORTALANF> +title=Geoportail - Antilles francaises +proj=eqc +nadgrids=null +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 <>
-<GEOPORTALCRZ> +title=Geoportail - Crozet +proj=eqc +nadgrids=null +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=-46.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <>
-<GEOPORTALFXX> +title=Geoportail - France metropolitaine +proj=eqc +nadgrids=null +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 <>
-<GEOPORTALGUF> +title=Geoportail - Guyane +proj=eqc +nadgrids=null +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 <>
-<GEOPORTALKER> +title=Geoportail - Kerguelen +proj=eqc +nadgrids=null +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=-49.500000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <>
-<GEOPORTALMYT> +title=Geoportail - Mayotte +proj=eqc +nadgrids=null +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 <>
-<GEOPORTALNCL> +title=Geoportail - Nouvelle-Caledonie +proj=eqc +nadgrids=null +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 <>
-<GEOPORTALPYF> +title=Geoportail - Polynesie francaise +proj=eqc +nadgrids=null +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 <>
-<GEOPORTALREU> +title=Geoportail - Reunion et dependances +proj=eqc +nadgrids=null +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 <>
-<GEOPORTALSPM> +title=Geoportail - Saint-Pierre et Miquelon +proj=eqc +nadgrids=null +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 <>
-<GEOPORTALWLF> +title=Geoportail - Wallis et Futuna +proj=eqc +nadgrids=null +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 <>
+<GEOPORTALANF> +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 <>
+<GEOPORTALASP> +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 <>
+<GEOPORTALCRZ> +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 <>
+<GEOPORTALFXX> +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 <>
+<GEOPORTALGUF> +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 <>
+<GEOPORTALKER> +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 <>
+<GEOPORTALMYT> +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 <>
+<GEOPORTALNCL> +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 <>
+<GEOPORTALPYF> +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 <>
+<GEOPORTALREU> +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 <>
+<GEOPORTALSPM> +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 <>
+<GEOPORTALWLF> +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]
 <GUAD48UTM20> +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 <>
 <GUADFM49U20> +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 <>
@@ -256,21 +263,21 @@
 # W [HIVA60UTM7S]
 # W [HIVA67UTM7S]
 <IGN63UTM7S> +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 <>
-<IGN72LAM> +title=IGN 1972 - Lambert Nouvelle Caledonie +proj=lcc +towgs84=-11.6400,-348.6000,291.6800 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-21.300000000 +lon_0=166.000000000 +lat_1=-20.400000000 +lat_2=-22.200000000 +x_0=400000.000 +y_0=300000.000 +units=m +no_defs <>
+<IGN72LAM> +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 <>
 <IGN72UTM58S> +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 <>
 <KAUE70UTM6S> +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 <>
-<KERG62UTM42S> +title=Kerguelen 1962 +proj=tmerc +towgs84=145.0000,-187.0000,103.0000 +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 <>
-<LAMB1> +title=Lambert I +proj=lcc +nadgrids=ntf_r93.gsb,null +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 <>
-<LAMB1C> +title=Lambert I Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +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 <>
-<LAMB2> +title=Lambert II +proj=lcc +nadgrids=ntf_r93.gsb,null +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 <>
-<LAMB2C> +title=Lambert II Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +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 <>
-<LAMB3> +title=Lambert III +proj=lcc +nadgrids=ntf_r93.gsb,null +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 <>
-<LAMB3C> +title=Lambert III Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +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 <>
-<LAMB4> +title=Lambert IV +proj=lcc +nadgrids=ntf_r93.gsb,null +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 <>
-<LAMB4C> +title=Lambert IV Carto +proj=lcc +nadgrids=ntf_r93.gsb,null +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 <>
-<LAMB93> +title=Lambert 93 +proj=lcc +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 <>
-<LAMBE> +title=Lambert II etendu +proj=lcc +nadgrids=ntf_r93.gsb,null +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 <>
-<LAMBGC> +title=Lambert grand champ +proj=lcc +nadgrids=ntf_r93.gsb,null +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 <>
+<KERG62UTM42S> +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 <>
+<LAMB1> +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 <>
+<LAMB1C> +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 <>
+<LAMB2> +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 <>
+<LAMB2C> +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 <>
+<LAMB3> +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 <>
+<LAMB3C> +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 <>
+<LAMB4> +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 <>
+<LAMB4C> +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 <>
+<LAMB93> +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 <>
+<LAMBE> +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 <>
+<LAMBGC> +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 <>
 <LUXGAUSSK> +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]
@@ -279,7 +286,7 @@
 # W [MAUPITIUTM5S]
 <MAYO50UTM38S> +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 <>
 <MHPF67UTM8S> +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 <>
-<MILLER> +title=Geoportail - Monde +proj=mill +towgs84=0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000000 +a=6378137.0000 +rf=298.2572221010000 +lon_0=0.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs <>
+<MILLER> +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 <>
 <MOOREA87U6S> +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 <>
 <MOP90UTM6S> +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]
@@ -297,173 +304,184 @@
 # W [RANGI59U6S]
 # W [RANGI68U6S]
 <REUN47GAUSSL> +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 <>
-<RGF93CC42> +title=Projection conique conforme Zone 1 +proj=lcc +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 <>
-<RGF93CC43> +title=Projection conique conforme Zone 2 +proj=lcc +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 <>
-<RGF93CC44> +title=Projection conique conforme Zone 3 +proj=lcc +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 <>
-<RGF93CC45> +title=Projection conique conforme Zone 4 +proj=lcc +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 <>
-<RGF93CC46> +title=Projection conique conforme Zone 5 +proj=lcc +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 <>
-<RGF93CC47> +title=Projection conique conforme Zone 6 +proj=lcc +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 <>
-<RGF93CC48> +title=Projection conique conforme Zone 7 +proj=lcc +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 <>
-<RGF93CC49> +title=Projection conique conforme Zone 8 +proj=lcc +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 <>
-<RGF93CC50> +title=Projection conique conforme Zone 9 +proj=lcc +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 <>
-<RGM04UTM38S> +title=UTM fuseau 38 Sud (Reseau Geodesique de Mayotte 2004) +proj=tmerc +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 <>
-<RGNCLAM> +title=Reseau Geodesique de Nouvelle-Caledonie - Lambert Nouvelle Caledonie +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=-21.300000000 +lon_0=166.000000000 +lat_1=-20.400000000 +lat_2=-22.200000000 +x_0=400000.000 +y_0=300000.000 +units=m +no_defs <>
-<RGNCUTM57S> +title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 57 Sud +proj=tmerc +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 <>
-<RGNCUTM58S> +title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 58 Sud +proj=tmerc +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 <>
-<RGNCUTM59S> +title=Reseau Geodesique de Nouvelle-Caledonie - UTM fuseau 59 Sud +proj=tmerc +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 <>
-<RGPFUTM5S> +title=RGPF - UTM fuseau 5 Sud +proj=tmerc +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 <>
-<RGPFUTM6S> +title=RGPF - UTM fuseau 6 Sud +proj=tmerc +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 <>
-<RGPFUTM7S> +title=RGPF - UTM fuseau 7 Sud +proj=tmerc +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 <>
-<RGR92UTM40S> +title=RGR92 UTM fuseau 40 Sud +proj=tmerc +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 <>
-<RGSPM06U21> +title=Saint-Pierre-et-Miquelon (2006) UTM Fuseau 21 Nord +proj=tmerc +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 <>
+<RGF93CC42> +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 <>
+<RGF93CC43> +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 <>
+<RGF93CC44> +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 <>
+<RGF93CC45> +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 <>
+<RGF93CC46> +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 <>
+<RGF93CC47> +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 <>
+<RGF93CC48> +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 <>
+<RGF93CC49> +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 <>
+<RGF93CC50> +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 <>
+<RGM04UTM38S> +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 <>
+<RGNCLAM> +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 <>
+<RGNCUTM57S> +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 <>
+<RGNCUTM58S> +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 <>
+<RGNCUTM59S> +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 <>
+<RGPFUTM5S> +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 <>
+<RGPFUTM6S> +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 <>
+<RGPFUTM7S> +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 <>
+<RGR92UTM40S> +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 <>
+<RGSPM06U21> +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 <>
 <SAT84UTM5S> +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 <>
-<STEREOSX> +title=Stereographique polaire Sud +proj=sterea +towgs84=0.0000,0.0000,0.5000,0.0000,0.0000,0.0140,-0.100000 +a=6378137.0000 +rf=298.2572221010000 +lat_0=-90.000000000 +lon_0=140.000000000 +k=0.96027295 +x_0=300000.000 +y_0=-2299363.482 +units=m +no_defs <>
-# W [STPL69UTM43S]
+<STPL69UTM43S> +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 <>
 <STPM50UTM21> +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 <>
 <TAHAAUTM05S> +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 <>
 <TAHI51UTM06S> +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 <>
 <TAHI79UTM6S> +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]
 <TANNAUTM59S> +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 <>
-<TERA50SPTA> +title=Terre Adelie Stereo polaire Terre Adelie +proj=sterea +towgs84=324.8000,153.6000,172.1000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-67.000000000 +lon_0=140.000000000 +k=1.00000000 +x_0=300000.000 +y_0=200000.000 +units=m +no_defs <>
-<TERA50STEREO> +title=Terre Adelie 1950 +proj=sterea +towgs84=324.8000,153.6000,172.1000 +a=6378388.0000 +rf=297.0000000000000 +lat_0=-90.000000000 +lon_0=140.000000000 +k=0.96027295 +x_0=300000.000 +y_0=-2299363.482 +units=m +no_defs <>
+<TERA50STEREO> +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]
 <TUBU69UTM6S> +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]
 <UTM01SW72> +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 <>
-<UTM01SW84> +title=World Geodetic System 1984 UTM fuseau 01 Sud +proj=tmerc +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=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM01W84> +title=World Geodetic System 1984 UTM fuseau 01 +proj=tmerc +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=-177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM02SW84> +title=World Geodetic System 1984 UTM fuseau 02 Sud +proj=tmerc +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=-171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM02W84> +title=World Geodetic System 1984 UTM fuseau 02 +proj=tmerc +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=-171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM03SW84> +title=World Geodetic System 1984 UTM fuseau 03 Sud +proj=tmerc +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=-165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM03W84> +title=World Geodetic System 1984 UTM fuseau 03 +proj=tmerc +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=-165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM04SW84> +title=World Geodetic System 1984 UTM fuseau 04 Sud +proj=tmerc +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=-159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM04W84> +title=World Geodetic System 1984 UTM fuseau 04 +proj=tmerc +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=-159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM05SW84> +title=World Geodetic System 1984 UTM fuseau 05 Sud +proj=tmerc +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=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM05W84> +title=World Geodetic System 1984 UTM fuseau 05 +proj=tmerc +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=-153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM06SW84> +title=World Geodetic System 1984 UTM fuseau 06 Sud +proj=tmerc +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=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM06W84> +title=World Geodetic System 1984 UTM fuseau 06 +proj=tmerc +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=-147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM07SW84> +title=World Geodetic System 1984 UTM fuseau 07 Sud +proj=tmerc +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=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM07W84> +title=World Geodetic System 1984 UTM fuseau 07 +proj=tmerc +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=-141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM08SW84> +title=World Geodetic System 1984 UTM fuseau 08 Sud +proj=tmerc +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=-135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM08W84> +title=World Geodetic System 1984 UTM fuseau 08 +proj=tmerc +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=-135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM09SW84> +title=World Geodetic System 1984 UTM fuseau 09 Sud +proj=tmerc +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=-129.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM09W84> +title=World Geodetic System 1984 UTM fuseau 09 +proj=tmerc +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=-129.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM10SW84> +title=World Geodetic System 1984 UTM fuseau 10 Sud +proj=tmerc +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=-123.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM10W84> +title=World Geodetic System 1984 UTM fuseau 10 +proj=tmerc +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=-123.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM11SW84> +title=World Geodetic System 1984 UTM fuseau 11 Sud +proj=tmerc +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=-117.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM11W84> +title=World Geodetic System 1984 UTM fuseau 11 +proj=tmerc +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=-117.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM12SW84> +title=World Geodetic System 1984 UTM fuseau 12 Sud +proj=tmerc +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=-111.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM12W84> +title=World Geodetic System 1984 UTM fuseau 12 +proj=tmerc +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=-111.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM13SW84> +title=World Geodetic System 1984 UTM fuseau 13 Sud +proj=tmerc +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=-105.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM13W84> +title=World Geodetic System 1984 UTM fuseau 13 +proj=tmerc +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=-105.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM14SW84> +title=World Geodetic System 1984 UTM fuseau 14 Sud +proj=tmerc +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=-99.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM14W84> +title=World Geodetic System 1984 UTM fuseau 14 +proj=tmerc +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=-99.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM15SW84> +title=World Geodetic System 1984 UTM fuseau 15 Sud +proj=tmerc +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=-93.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM15W84> +title=World Geodetic System 1984 UTM fuseau 15 +proj=tmerc +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=-93.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM16SW84> +title=World Geodetic System 1984 UTM fuseau 16 Sud +proj=tmerc +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=-87.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM16W84> +title=World Geodetic System 1984 UTM fuseau 16 +proj=tmerc +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=-87.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM17SW84> +title=World Geodetic System 1984 UTM fuseau 17 Sud +proj=tmerc +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=-81.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM17W84> +title=World Geodetic System 1984 UTM fuseau 17 +proj=tmerc +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=-81.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM18SW84> +title=World Geodetic System 1984 UTM fuseau 18 Sud +proj=tmerc +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=-75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM18W84> +title=World Geodetic System 1984 UTM fuseau 18 +proj=tmerc +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=-75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM19SW84> +title=World Geodetic System 1984 UTM fuseau 19 Sud +proj=tmerc +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=-69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM19W84> +title=World Geodetic System 1984 UTM fuseau 19 +proj=tmerc +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=-69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM20SW84> +title=World Geodetic System 1984 UTM fuseau 20 Sud +proj=tmerc +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=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM20W84> +title=World Geodetic System 1984 UTM fuseau 20 +proj=tmerc +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=-63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
+<UTM01SW84> +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 <>
+<UTM01W84> +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 <>
+<UTM02SW84> +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 <>
+<UTM02W84> +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 <>
+<UTM03SW84> +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 <>
+<UTM03W84> +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 <>
+<UTM04SW84> +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 <>
+<UTM04W84> +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 <>
+<UTM05SW84> +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 <>
+<UTM05W84> +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 <>
+<UTM06SW84> +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 <>
+<UTM06W84> +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 <>
+<UTM07SW84> +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 <>
+<UTM07W84> +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 <>
+<UTM08SW84> +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 <>
+<UTM08W84> +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 <>
+<UTM09SW84> +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 <>
+<UTM09W84> +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 <>
+<UTM10SW84> +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 <>
+<UTM10W84> +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 <>
+<UTM11SW84> +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 <>
+<UTM11W84> +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 <>
+<UTM12SW84> +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 <>
+<UTM12W84> +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 <>
+<UTM13SW84> +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 <>
+<UTM13W84> +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 <>
+<UTM14SW84> +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 <>
+<UTM14W84> +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 <>
+<UTM15SW84> +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 <>
+<UTM15W84> +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 <>
+<UTM16SW84> +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 <>
+<UTM16W84> +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 <>
+<UTM17SW84> +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 <>
+<UTM17W84> +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 <>
+<UTM18SW84> +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 <>
+<UTM18W84> +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 <>
+<UTM19SW84> +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 <>
+<UTM19W84> +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 <>
+<UTM20SW84> +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 <>
+<UTM20W84> +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 <>
 <UTM20W84GUAD> +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 <>
 <UTM20W84MART> +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 <>
-<UTM21SW84> +title=World Geodetic System 1984 UTM fuseau 21 Sud +proj=tmerc +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=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM21W84> +title=World Geodetic System 1984 UTM fuseau 21 +proj=tmerc +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=-57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
+<UTM21SW84> +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 <>
+<UTM21W84> +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 <>
 <UTM22RGFG95> +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 <>
-<UTM22SW84> +title=World Geodetic System 1984 UTM fuseau 22 Sud +proj=tmerc +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=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM22W84> +title=World Geodetic System 1984 UTM fuseau 22 +proj=tmerc +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=-51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM23SW84> +title=World Geodetic System 1984 UTM fuseau 23 Sud +proj=tmerc +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=-45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM23W84> +title=World Geodetic System 1984 UTM fuseau 23 +proj=tmerc +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=-45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM24SW84> +title=World Geodetic System 1984 UTM fuseau 24 Sud +proj=tmerc +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=-39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM24W84> +title=World Geodetic System 1984 UTM fuseau 24 +proj=tmerc +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=-39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM25SW84> +title=World Geodetic System 1984 UTM fuseau 25 Sud +proj=tmerc +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=-33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM25W84> +title=World Geodetic System 1984 UTM fuseau 25 +proj=tmerc +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=-33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM26SW84> +title=World Geodetic System 1984 UTM fuseau 26 Sud +proj=tmerc +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=-27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM26W84> +title=World Geodetic System 1984 UTM fuseau 26 +proj=tmerc +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=-27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM27SW84> +title=World Geodetic System 1984 UTM fuseau 27 Sud +proj=tmerc +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=-21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM27W84> +title=World Geodetic System 1984 UTM fuseau 27 +proj=tmerc +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=-21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM28SW84> +title=World Geodetic System 1984 UTM fuseau 28 Sud +proj=tmerc +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=-15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM28W84> +title=World Geodetic System 1984 UTM fuseau 28 +proj=tmerc +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=-15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM29SW84> +title=World Geodetic System 1984 UTM fuseau 29 Sud +proj=tmerc +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=-9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM29W84> +title=World Geodetic System 1984 UTM fuseau 29 +proj=tmerc +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=-9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
+<UTM22SW84> +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 <>
+<UTM22W84> +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 <>
+<UTM23SW84> +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 <>
+<UTM23W84> +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 <>
+<UTM24SW84> +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 <>
+<UTM24W84> +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 <>
+<UTM25SW84> +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 <>
+<UTM25W84> +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 <>
+<UTM26ETRS89> +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 <>
+<UTM26SW84> +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 <>
+<UTM26W84> +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 <>
+<UTM27ETRS89> +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 <>
+<UTM27SW84> +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 <>
+<UTM27W84> +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 <>
+<UTM28ETRS89> +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 <>
+<UTM28SW84> +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 <>
+<UTM28W84> +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 <>
+<UTM29ETRS89> +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 <>
+<UTM29SW84> +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 <>
+<UTM29W84> +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 <>
 <UTM30> +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 <>
+<UTM30ETRS89> +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 <>
 <UTM30RGF93> +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 <>
-<UTM30SW84> +title=World Geodetic System 1984 UTM fuseau 30 Sud +proj=tmerc +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=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
+<UTM30SW84> +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 <>
 <UTM30W72> +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 <>
-<UTM30W84> +title=World Geodetic System 1984 UTM fuseau 30 +proj=tmerc +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=-3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
+<UTM30W84> +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 <>
 <UTM31> +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 <>
+<UTM31ETRS89> +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 <>
 <UTM31RGF93> +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 <>
-<UTM31SW84> +title=World Geodetic System 1984 UTM fuseau 31 Sud +proj=tmerc +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=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
+<UTM31SW84> +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 <>
 <UTM31W72> +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 <>
-<UTM31W84> +title=World Geodetic System 1984 UTM fuseau 31 +proj=tmerc +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=3.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
+<UTM31W84> +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 <>
 <UTM32> +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 <>
+<UTM32ETRS89> +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 <>
 <UTM32RGF93> +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 <>
-<UTM32SW84> +title=World Geodetic System 1984 UTM fuseau 32 Sud +proj=tmerc +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=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
+<UTM32SW84> +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 <>
 <UTM32W72> +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 <>
-<UTM32W84> +title=World Geodetic System 1984 UTM fuseau 32 +proj=tmerc +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=9.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM33SW84> +title=World Geodetic System 1984 UTM fuseau 33 Sud +proj=tmerc +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=15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM33W84> +title=World Geodetic System 1984 UTM fuseau 33 +proj=tmerc +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=15.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM34SW84> +title=World Geodetic System 1984 UTM fuseau 34 Sud +proj=tmerc +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=21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM34W84> +title=World Geodetic System 1984 UTM fuseau 34 +proj=tmerc +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=21.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM35SW84> +title=World Geodetic System 1984 UTM fuseau 35 Sud +proj=tmerc +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=27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM35W84> +title=World Geodetic System 1984 UTM fuseau 35 +proj=tmerc +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=27.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM36SW84> +title=World Geodetic System 1984 UTM fuseau 36 Sud +proj=tmerc +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=33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM36W84> +title=World Geodetic System 1984 UTM fuseau 36 +proj=tmerc +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=33.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM37SW84> +title=World Geodetic System 1984 UTM fuseau 37 Sud +proj=tmerc +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=39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM37W84> +title=World Geodetic System 1984 UTM fuseau 37 +proj=tmerc +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=39.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM38SW84> +title=World Geodetic System 1984 UTM fuseau 38 Sud +proj=tmerc +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=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM38W84> +title=World Geodetic System 1984 UTM fuseau 38 +proj=tmerc +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=45.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM39SW84> +title=World Geodetic System 1984 UTM fuseau 39 Sud +proj=tmerc +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=51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM39W84> +title=World Geodetic System 1984 UTM fuseau 39 +proj=tmerc +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=51.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM40SW84> +title=World Geodetic System 1984 UTM fuseau 40 Sud +proj=tmerc +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=57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM40W84> +title=World Geodetic System 1984 UTM fuseau 40 +proj=tmerc +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=57.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM41SW84> +title=World Geodetic System 1984 UTM fuseau 41 Sud +proj=tmerc +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=63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM41W84> +title=World Geodetic System 1984 UTM fuseau 41 +proj=tmerc +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=63.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM42SW84> +title=World Geodetic System 1984 UTM fuseau 42 Sud +proj=tmerc +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=69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM42W84> +title=World Geodetic System 1984 UTM fuseau 42 +proj=tmerc +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=69.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM43SW84> +title=World Geodetic System 1984 UTM fuseau 43 Sud +proj=tmerc +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=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM43W84> +title=World Geodetic System 1984 UTM fuseau 43 +proj=tmerc +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=75.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM44SW84> +title=World Geodetic System 1984 UTM fuseau 44 Sud +proj=tmerc +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=81.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM44W84> +title=World Geodetic System 1984 UTM fuseau 44 +proj=tmerc +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=81.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM45SW84> +title=World Geodetic System 1984 UTM fuseau 45 Sud +proj=tmerc +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=87.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM45W84> +title=World Geodetic System 1984 UTM fuseau 45 +proj=tmerc +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=87.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM46SW84> +title=World Geodetic System 1984 UTM fuseau 46 Sud +proj=tmerc +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=93.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM46W84> +title=World Geodetic System 1984 UTM fuseau 46 +proj=tmerc +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=93.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM47SW84> +title=World Geodetic System 1984 UTM fuseau 47 Sud +proj=tmerc +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=99.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM47W84> +title=World Geodetic System 1984 UTM fuseau 47 +proj=tmerc +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=99.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM48SW84> +title=World Geodetic System 1984 UTM fuseau 48 Sud +proj=tmerc +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=105.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM48W84> +title=World Geodetic System 1984 UTM fuseau 48 +proj=tmerc +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=105.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM49SW84> +title=World Geodetic System 1984 UTM fuseau 49 Sud +proj=tmerc +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=111.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM49W84> +title=World Geodetic System 1984 UTM fuseau 49 +proj=tmerc +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=111.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM50SW84> +title=World Geodetic System 1984 UTM fuseau 50 Sud +proj=tmerc +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=117.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM50W84> +title=World Geodetic System 1984 UTM fuseau 50 +proj=tmerc +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=117.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM51SW84> +title=World Geodetic System 1984 UTM fuseau 51 Sud +proj=tmerc +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=123.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM51W84> +title=World Geodetic System 1984 UTM fuseau 51 +proj=tmerc +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=123.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM52SW84> +title=World Geodetic System 1984 UTM fuseau 52 Sud +proj=tmerc +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=129.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM52W84> +title=World Geodetic System 1984 UTM fuseau 52 +proj=tmerc +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=129.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM53SW84> +title=World Geodetic System 1984 UTM fuseau 53 Sud +proj=tmerc +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=135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM53W84> +title=World Geodetic System 1984 UTM fuseau 53 +proj=tmerc +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=135.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM54SW84> +title=World Geodetic System 1984 UTM fuseau 54 Sud +proj=tmerc +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=141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM54W84> +title=World Geodetic System 1984 UTM fuseau 54 +proj=tmerc +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=141.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM55SW84> +title=World Geodetic System 1984 UTM fuseau 55 Sud +proj=tmerc +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=147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM55W84> +title=World Geodetic System 1984 UTM fuseau 55 +proj=tmerc +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=147.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM56SW84> +title=World Geodetic System 1984 UTM fuseau 56 Sud +proj=tmerc +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=153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM56W84> +title=World Geodetic System 1984 UTM fuseau 56 +proj=tmerc +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=153.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM57SW84> +title=World Geodetic System 1984 UTM fuseau 57 Sud +proj=tmerc +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=159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM57W84> +title=World Geodetic System 1984 UTM fuseau 57 +proj=tmerc +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=159.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM58SW84> +title=World Geodetic System 1984 UTM fuseau 58 Sud +proj=tmerc +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=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM58W84> +title=World Geodetic System 1984 UTM fuseau 58 +proj=tmerc +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=165.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM59SW84> +title=World Geodetic System 1984 UTM fuseau 59 Sud +proj=tmerc +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=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM59W84> +title=World Geodetic System 1984 UTM fuseau 59 +proj=tmerc +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=171.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
-<UTM60SW84> +title=World Geodetic System 1984 UTM fuseau 60 Sud +proj=tmerc +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=177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=10000000.000 +units=m +no_defs <>
-<UTM60W84> +title=World Geodetic System 1984 UTM fuseau 60 +proj=tmerc +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=177.000000000 +k_0=0.99960000 +x_0=500000.000 +y_0=0.000 +units=m +no_defs <>
+<UTM32W84> +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 <>
+<UTM33ETRS89> +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 <>
+<UTM33SW84> +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 <>
+<UTM33W84> +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 <>
+<UTM34ETRS89> +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 <>
+<UTM34SW84> +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 <>
+<UTM34W84> +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 <>
+<UTM35ETRS89> +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 <>
+<UTM35SW84> +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 <>
+<UTM35W84> +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 <>
+<UTM36ETRS89> +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 <>
+<UTM36SW84> +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 <>
+<UTM36W84> +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 <>
+<UTM37ETRS89> +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 <>
+<UTM37SW84> +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 <>
+<UTM37W84> +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 <>
+<UTM38ETRS89> +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 <>
+<UTM38SW84> +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 <>
+<UTM38W84> +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 <>
+<UTM39SW84> +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 <>
+<UTM39W84> +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 <>
+<UTM40SW84> +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 <>
+<UTM40W84> +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 <>
+<UTM41SW84> +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 <>
+<UTM41W84> +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 <>
+<UTM42SW84> +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 <>
+<UTM42W84> +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 <>
+<UTM43SW84> +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 <>
+<UTM43W84> +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 <>
+<UTM44SW84> +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 <>
+<UTM44W84> +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 <>
+<UTM45SW84> +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 <>
+<UTM45W84> +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 <>
+<UTM46SW84> +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 <>
+<UTM46W84> +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 <>
+<UTM47SW84> +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 <>
+<UTM47W84> +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 <>
+<UTM48SW84> +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 <>
+<UTM48W84> +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 <>
+<UTM49SW84> +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 <>
+<UTM49W84> +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 <>
+<UTM50SW84> +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 <>
+<UTM50W84> +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 <>
+<UTM51SW84> +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 <>
+<UTM51W84> +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 <>
+<UTM52SW84> +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 <>
+<UTM52W84> +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 <>
+<UTM53SW84> +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 <>
+<UTM53W84> +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 <>
+<UTM54SW84> +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 <>
+<UTM54W84> +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 <>
+<UTM55SW84> +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 <>
+<UTM55W84> +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 <>
+<UTM56SW84> +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 <>
+<UTM56W84> +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 <>
+<UTM57SW84> +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 <>
+<UTM57W84> +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 <>
+<UTM58SW84> +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 <>
+<UTM58W84> +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 <>
+<UTM59SW84> +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 <>
+<UTM59W84> +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 <>
+<UTM60SW84> +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 <>
+<UTM60W84> +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]
 <WALL78UTM1S> +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/pyproj/data/MD b/lib/pyproj/data/MD
deleted file mode 100644
index d815254..0000000
Binary files a/lib/pyproj/data/MD and /dev/null differ
diff --git a/lib/pyproj/data/TN b/lib/pyproj/data/TN
deleted file mode 100644
index 5dde73b..0000000
Binary files a/lib/pyproj/data/TN and /dev/null differ
diff --git a/lib/pyproj/data/WI b/lib/pyproj/data/WI
deleted file mode 100644
index d481579..0000000
Binary files a/lib/pyproj/data/WI and /dev/null differ
diff --git a/lib/pyproj/data/WO b/lib/pyproj/data/WO
deleted file mode 100644
index 641dba5..0000000
Binary files a/lib/pyproj/data/WO and /dev/null differ
diff --git a/lib/pyproj/data/alaska b/lib/pyproj/data/alaska
deleted file mode 100644
index d269f15..0000000
Binary files a/lib/pyproj/data/alaska and /dev/null differ
diff --git a/lib/pyproj/data/conus b/lib/pyproj/data/conus
deleted file mode 100644
index e968a50..0000000
Binary files a/lib/pyproj/data/conus and /dev/null differ
diff --git a/lib/pyproj/data/epsg b/lib/pyproj/data/epsg
index fbb2c9a..128ff7c 100644
--- a/lib/pyproj/data/epsg
+++ b/lib/pyproj/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 +datum=GGRS87 +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=-73.472,-51.66,-112.482,0.953,4.6,-2.368,0.586 +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=-241.54,-163.64,396.06,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=214,804,268,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 +datum=carthage +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 +datum=NAD83 +no_defs  <>
 # Nahrwan 1967
-<4270> +proj=longlat +ellps=clrk80 +no_defs  <>
+<4270> +proj=longlat +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,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 +datum=nzgd49 +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 +datum=OSGB36 +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=-679,669,-48,0,0,0,0 +no_defs  <>
 # TM65
-<4299> +proj=longlat +ellps=mod_airy +datum=ire65 +no_defs  <>
+<4299> +proj=longlat +datum=ire65 +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=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +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 +datum=hermannskogel +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 +datum=potsdam +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=230,-199,-752,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,93 @@
 # 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=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +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  <>
+# Ukraine 2000
+<5561> +proj=longlat +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +no_defs  <>
+# FEH2010
+<5593> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs  <>
+# DB_REF
+<5681> +proj=longlat +ellps=bessel +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 +939,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 +1021,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 +1059,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=30.28813972222222 +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 +datum=carthage +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 +1120,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 +datum=GGRS87 +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 +1201,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 +1241,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,64 +1254,64 @@
 <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 +datum=hermannskogel +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
 <2190> +proj=utm +zone=26 +ellps=intl +towgs84=-203,141,53,0,0,0,0 +units=m +no_defs  <>
 # 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  <>
+# ED50 / France EuroLambert (deprecated)
+<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 +1323,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 +datum=NAD83 +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 +1361,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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +1543,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 +1709,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 +1853,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=-73.472,-51.66,-112.482,0.953,4.6,-2.368,0.586 +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=-73.472,-51.66,-112.482,0.953,4.6,-2.368,0.586 +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 +datum=NAD83 +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 +datum=NAD83 +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 +2904,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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +2966,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 +2990,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 (deprecated)
+<3038> +proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# ETRS89 / TM27 (deprecated)
+<3039> +proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# ETRS89 / UTM zone 28N (N-E)
+<3040> +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# ETRS89 / UTM zone 29N (N-E)
+<3041> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# ETRS89 / UTM zone 30N (N-E)
+<3042> +proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# ETRS89 / UTM zone 31N (N-E)
+<3043> +proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# ETRS89 / UTM zone 32N (N-E)
+<3044> +proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# ETRS89 / UTM zone 33N (N-E)
+<3045> +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# ETRS89 / UTM zone 34N (N-E)
+<3046> +proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# ETRS89 / UTM zone 35N (N-E)
+<3047> +proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# ETRS89 / UTM zone 36N (N-E)
+<3048> +proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# ETRS89 / UTM zone 37N (N-E)
+<3049> +proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# ETRS89 / TM38 (deprecated)
+<3050> +proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# ETRS89 / TM39 (deprecated)
+<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 +3046,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 +datum=potsdam +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +no_uoff +gamma=337.25556 +datum=NAD83 +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 +no_uoff +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +3142,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 +3170,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 +3182,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,59 +3217,59 @@
 # 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.
 #
 # ETRS89 / Faroe Lambert
 # 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  <>
-# 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  <>
+# Pulkovo 1942 / 3-degree Gauss-Kruger zone 6 (deprecated)
+<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 (deprecated)
+<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  <>
-# 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  <>
-# 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  <>
+<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 (deprecated)
+<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 (deprecated)
+<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 +datum=NAD83 +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 +no_uoff +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 +no_uoff +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 +3277,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 +datum=NAD83 +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 +datum=NAD83 +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 +3334,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=-241.54,-163.64,396.06,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 +3342,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 +3553,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 +datum=NAD83 +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 +3591,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 +datum=NAD83 +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 +3629,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 +datum=NAD83 +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 +3649,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 +3675,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 +datum=NAD83 +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 +datum=NAD83 +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 +no_uoff +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 +no_uoff +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 +3707,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 +3735,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 +datum=NAD83 +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 +datum=NAD83 +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 +3761,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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +3837,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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +3871,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 +no_uoff +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 +4055,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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +4117,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 +no_uoff +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 +4389,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 +4403,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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +4473,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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +4509,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 +datum=hermannskogel +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 +4523,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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +4554,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 +4602,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 +4635,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 +4669,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 +datum=NAD83 +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 +datum=NAD83 +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 +4704,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,17 +4742,932 @@
 # 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
 <4083> +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
 # WGS 84 / World Equidistant Cylindrical
-# Unable to translate coordinate system EPSG:4087 into PROJ.4 format.
-#
+<4087> +proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs  <>
 # World Equidistant Cylindrical (Sphere)
-# Unable to translate coordinate system EPSG:4088 into PROJ.4 format.
+<4088> +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  <>
+# 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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 32N (zE-N)
+<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 +datum=NAD83 +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
+<5221> +proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813972222222 +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  <>
+# 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 +no_uoff +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 +datum=NAD83 +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 (deprecated)
+<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 (deprecated)
+<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=30.28813972222222 +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
+<5514> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813972222222 +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/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 +datum=potsdam +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 (deprecated)
+<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  <>
+# Ukraine 2000 / Gauss-Kruger zone 4
+<5562> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs  <>
+# Ukraine 2000 / Gauss-Kruger zone 5
+<5563> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs  <>
+# Ukraine 2000 / Gauss-Kruger zone 6
+<5564> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs  <>
+# Ukraine 2000 / Gauss-Kruger zone 7
+<5565> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs  <>
+# Ukraine 2000 / Gauss-Kruger CM 21E
+<5566> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs  <>
+# Ukraine 2000 / Gauss-Kruger CM 27E
+<5567> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs  <>
+# Ukraine 2000 / Gauss-Kruger CM 33E
+<5568> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs  <>
+# Ukraine 2000 / Gauss-Kruger CM 39E
+<5569> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs  <>
+# Ukraine 2000 / 3-degree Gauss-Kruger zone 7
+<5570> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs  <>
+# Ukraine 2000 / 3-degree Gauss-Kruger zone 8
+<5571> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs  <>
+# Ukraine 2000 / 3-degree Gauss-Kruger zone 9
+<5572> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs  <>
+# Ukraine 2000 / 3-degree Gauss-Kruger zone 10
+<5573> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs  <>
+# Ukraine 2000 / 3-degree Gauss-Kruger zone 11
+<5574> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs  <>
+# Ukraine 2000 / 3-degree Gauss-Kruger zone 12
+<5575> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs  <>
+# Ukraine 2000 / 3-degree Gauss-Kruger zone 13
+<5576> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs  <>
+# Ukraine 2000 / 3-degree Gauss-Kruger CM 21E
+<5577> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs  <>
+# Ukraine 2000 / 3-degree Gauss-Kruger CM 24E
+<5578> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs  <>
+# Ukraine 2000 / 3-degree Gauss-Kruger CM 27E
+<5579> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs  <>
+# Ukraine 2000 / 3-degree Gauss-Kruger CM 30E
+<5580> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs  <>
+# Ukraine 2000 / 3-degree Gauss-Kruger CM 33E
+<5581> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs  <>
+# Ukraine 2000 / 3-degree Gauss-Kruger CM 36E
+<5582> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs  <>
+# Ukraine 2000 / 3-degree Gauss-Kruger CM 39E
+<5583> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs  <>
+# NAD27 / New Brunswick Stereographic (NAD27)
+<5588> +proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=304800 +y_0=304800 +datum=NAD27 +units=ft +no_defs  <>
+# Sibun Gorge 1922 / Colony Grid
+<5589> +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 +to_meter=0.3047972654 +no_defs  <>
+# FEH2010 / Fehmarnbelt TM
+<5596> +proj=tmerc +lat_0=0 +lon_0=11.33333333333333 +k=1 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# NAD27 / Michigan East
+<5623> +proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999942857 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs  <>
+# NAD27 / Michigan Old Central
+<5624> +proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs  <>
+# NAD27 / Michigan West
+<5625> +proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs  <>
+# ED50 / TM 6 NE
+<5627> +proj=tmerc +lat_0=0 +lon_0=6 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs  <>
+# Moznet / UTM zone 38S
+<5629> +proj=utm +zone=38 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs  <>
+# Pulkovo 1942(58) / Gauss-Kruger zone 2 (E-N)
+<5631> +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  <>
+# PTRA08 / LCC Europe
+<5632> +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  <>
+# PTRA08 / LAEA Europe
+<5633> +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  <>
+# REGCAN95 / LCC Europe
+<5634> +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  <>
+# REGCAN95 / LAEA Europe
+<5635> +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  <>
+# TUREF / LAEA Europe
+<5636> +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  <>
+# TUREF / LCC Europe
+<5637> +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  <>
+# ISN2004 / LAEA Europe
+<5638> +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  <>
+# ISN2004 / LCC Europe
+<5639> +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  <>
+# SIRGAS 2000 / Brazil Mercator
+<5641> +proj=merc +lon_0=-43 +lat_ts=-2 +x_0=5000000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# ED50 / SPBA LCC
+<5643> +proj=lcc +lat_1=52.66666666666666 +lat_2=54.33333333333334 +lat_0=48 +lon_0=10 +x_0=815000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs  <>
+# RGR92 / UTM zone 39S
+<5644> +proj=utm +zone=39 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# NAD83 / Vermont (ftUS)
+<5646> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000.00001016 +y_0=0 +datum=NAD83 +units=us-ft +no_defs  <>
+# ETRS89 / UTM zone 31N (zE-N)
+<5649> +proj=tmerc +lat_0=0 +lon_0=3 +k=0.9996 +x_0=31500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# ETRS89 / UTM zone 33N (zE-N)
+<5650> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=33500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# ETRS89 / UTM zone 31N (N-zE)
+<5651> +proj=tmerc +lat_0=0 +lon_0=3 +k=0.9996 +x_0=31500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# ETRS89 / UTM zone 32N (N-zE)
+<5652> +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  <>
+# ETRS89 / UTM zone 33N (N-zE)
+<5653> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=33500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# NAD83(HARN) / Vermont (ftUS)
+<5654> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs  <>
+# NAD83(NSRS2007) / Vermont (ftUS)
+<5655> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs  <>
+# Monte Mario / TM Emilia-Romagna
+<5659> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=500053 +y_0=-3999820 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +units=m +no_defs  <>
+# Pulkovo 1942(58) / Gauss-Kruger zone 3 (E-N)
+<5663> +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(83) / Gauss-Kruger zone 2 (E-N)
+<5664> +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 (E-N)
+<5665> +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  <>
+# PD/83 / 3-degree Gauss-Kruger zone 3 (E-N)
+<5666> +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 (E-N)
+<5667> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs  <>
+# RD/83 / 3-degree Gauss-Kruger zone 4 (E-N)
+<5668> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs  <>
+# RD/83 / 3-degree Gauss-Kruger zone 5 (E-N)
+<5669> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs  <>
+# Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 3 (E-N)
+<5670> +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 (E-N)
+<5671> +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 5 (E-N)
+<5672> +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(83) / 3-degree Gauss-Kruger zone 3 (E-N)
+<5673> +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 (E-N)
+<5674> +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 (E-N)
+<5675> +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  <>
+# DHDN / 3-degree Gauss-Kruger zone 2 (E-N)
+<5676> +proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +datum=potsdam +units=m +no_defs  <>
+# DHDN / 3-degree Gauss-Kruger zone 3 (E-N)
+<5677> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +datum=potsdam +units=m +no_defs  <>
+# DHDN / 3-degree Gauss-Kruger zone 4 (E-N)
+<5678> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +datum=potsdam +units=m +no_defs  <>
+# DHDN / 3-degree Gauss-Kruger zone 5 (E-N)
+<5679> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +datum=potsdam +units=m +no_defs  <>
+# DHDN / 3-degree Gauss-Kruger zone 1 (E-N)
+<5680> +proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +datum=potsdam +units=m +no_defs  <>
+# DB_REF / 3-degree Gauss-Kruger zone 2 (E-N)
+<5682> +proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +units=m +no_defs  <>
+# DB_REF / 3-degree Gauss-Kruger zone 3 (E-N)
+<5683> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs  <>
+# DB_REF / 3-degree Gauss-Kruger zone 4 (E-N)
+<5684> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs  <>
+# DB_REF / 3-degree Gauss-Kruger zone 5 (E-N)
+<5685> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs  <>
+# NZGD2000 / UTM zone 1S
+<5700> +proj=utm +zone=1 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
 # EPSG topocentric example A
 # Unable to translate coordinate system EPSG:5819 into PROJ.4 format.
 #
@@ -4676,304 +5677,318 @@
 # EPSG vertical perspective example
 # Unable to translate coordinate system EPSG:5821 into PROJ.4 format.
 #
+# AGD66 / ACT Standard Grid
+<5825> +proj=tmerc +lat_0=-35.31773627777778 +lon_0=149.0092948305555 +k=1.000086 +x_0=200000 +y_0=600000 +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs  <>
+# Yemen NGN96 / UTM zone 37N
+<5836> +proj=utm +zone=37 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# Yemen NGN96 / UTM zone 40N
+<5837> +proj=utm +zone=40 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# Peru96 / UTM zone 17S
+<5839> +proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# WGS 84 / TM 12 SE
+<5842> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs  <>
+# RGRDC 2005 / Congo TM zone 30
+<5844> +proj=tmerc +lat_0=0 +lon_0=30 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
+# SAD69(96) / UTM zone 22S
+<5858> +proj=utm +zone=22 +south +ellps=aust_SA +units=m +no_defs  <>
 # 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  <>
-# AGD66 / AMG zone 48
-<20248> +proj=utm +zone=48 +south +ellps=aust_SA +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 (deprecated)
+<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  <>
-# AGD84 / AMG zone 48
-<20348> +proj=utm +zone=48 +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 (deprecated)
+<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  <>
-# AGD84 / AMG zone 57
-<20357> +proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs  <>
-# AGD84 / AMG zone 58
-<20358> +proj=utm +zone=58 +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 (deprecated)
+<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 (deprecated)
+<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 +6010,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 +6046,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 +datum=carthage +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 +datum=carthage +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 +datum=carthage +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 +6187,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 +6233,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 +6257,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=214,804,268,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=214,804,268,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
@@ -5287,27 +6292,27 @@
 <24371> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +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 1880 / India zone IIa
 <24372> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +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 1880 / India zone III
+# Kalianpur 1880 / India zone IIIa
 <24373> +proj=lcc +lat_1=19 +lat_0=19 +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 1880 / India zone IV
+# Kalianpur 1880 / India zone IVa
 <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=214,804,268,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
 <24379> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +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 IIb
 <24380> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +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 III
+# Kalianpur 1975 / India zone IIIa
 <24381> +proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +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 1880 / India zone IIb
 <24382> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +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 1975 / India zone IV
+# Kalianpur 1975 / India zone IVa
 <24383> +proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +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  <>
 # Kertau 1968 / Singapore Grid
 <24500> +proj=cass +lat_0=1.287646666666667 +lon_0=103.8530022222222 +x_0=30000 +y_0=30000 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs  <>
@@ -5316,7 +6321,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 +no_uoff +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 +6331,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  <>
-# ETRS89 / UTM zone 38N
-<25838> +proj=utm +zone=38 +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 (deprecated)
+<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,200 +6413,200 @@
 # 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 +no_uoff +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  <>
-# NAD Michigan / Michigan East
+<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 (deprecated)
 <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
+# NAD Michigan / Michigan Old Central (deprecated)
 <26802> +proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs  <>
-# NAD Michigan / Michigan West
+# NAD Michigan / Michigan West (deprecated)
 <26803> +proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs  <>
 # NAD Michigan / Michigan North
 <26811> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs  <>
@@ -5610,37 +6615,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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +6663,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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +6711,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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +no_uoff +gamma=323.1301023611111 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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=-242.2,-144.9,370.3,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=-242.2,-144.9,370.3,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=-242.2,-144.9,370.3,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=-242.2,-144.9,370.3,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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +datum=nzgd49 +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 +7007,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 +7047,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 +datum=OSGB36 +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,8 +7055,8 @@
 # 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  <>
-# GDA94 / MGA zone 48
+<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 (deprecated)
 <28348> +proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
 # GDA94 / MGA zone 49
 <28349> +proj=utm +zone=49 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs  <>
@@ -6074,298 +7079,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=-679,669,-48,0,0,0,0 +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=-679,669,-48,0,0,0,0 +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=-679,669,-48,0,0,0,0 +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=-679,669,-48,0,0,0,0 +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=-679,669,-48,0,0,0,0 +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 +datum=ire65 +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 +datum=ire65 +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 +7376,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=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +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=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +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=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs  <>
 # Nord Sahara 1959 / UTM zone 32N
-<30732> +proj=utm +zone=32 +ellps=clrk80 +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  <>
-# 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  <>
+<30732> +proj=utm +zone=32 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs  <>
+# Nord Sahara 1959 / Nord Algerie
+<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=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs  <>
+# Nord Sahara 1959 / Sud Algerie
+<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=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +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 +7400,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 +datum=hermannskogel +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 +datum=hermannskogel +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 +datum=hermannskogel +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 +datum=hermannskogel +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 +datum=hermannskogel +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 +datum=hermannskogel +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 +datum=hermannskogel +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 +datum=hermannskogel +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 +datum=hermannskogel +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 +datum=hermannskogel +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 +datum=hermannskogel +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 +datum=hermannskogel +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 +datum=hermannskogel +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 +datum=hermannskogel +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 +datum=hermannskogel +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 +datum=hermannskogel +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 +datum=hermannskogel +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 +datum=hermannskogel +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 +datum=hermannskogel +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 +datum=hermannskogel +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 +datum=hermannskogel +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 +datum=hermannskogel +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 +datum=hermannskogel +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 +datum=potsdam +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 +datum=potsdam +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 +datum=potsdam +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 +datum=potsdam +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 +datum=potsdam +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 +datum=potsdam +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 +datum=potsdam +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 +datum=potsdam +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 +datum=potsdam +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 +7580,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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +datum=NAD83 +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 +8365,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/pyproj/data/esri.extra b/lib/pyproj/data/esri.extra
index 2514b33..611dd66 100644
--- a/lib/pyproj/data/esri.extra
+++ b/lib/pyproj/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/pyproj/data/hawaii b/lib/pyproj/data/hawaii
deleted file mode 100644
index 6c920b8..0000000
Binary files a/lib/pyproj/data/hawaii and /dev/null differ
diff --git a/lib/pyproj/data/null b/lib/pyproj/data/null
deleted file mode 100644
index 27fb3dc..0000000
Binary files a/lib/pyproj/data/null and /dev/null differ
diff --git a/lib/pyproj/data/other.extra b/lib/pyproj/data/other.extra
index 168525d..39c27e2 100644
--- a/lib/pyproj/data/other.extra
+++ b/lib/pyproj/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/pyproj/data/proj_outIGNF.dist b/lib/pyproj/data/proj_outIGNF.dist
index 4621f21..45112f6 100644
--- a/lib/pyproj/data/proj_outIGNF.dist
+++ b/lib/pyproj/data/proj_outIGNF.dist
@@ -1,12 +1,14 @@
++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
+ 600000.0000 2600545.4523  0.0000	652760.737	7033791.243 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
+ 600000.0000 2200000.0000  0.0000	649398.872	6633524.191 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
+1203792.5981 626873.17210  0.0000	1238875.764	5057405.016 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
@@ -17,14 +19,14 @@
  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
+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
@@ -35,4 +37,4 @@
 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
+3356123.5400 1303218.3090 5247430.6050	3353421.833	1304074.314 5248935.607
diff --git a/lib/pyproj/data/prvi b/lib/pyproj/data/prvi
deleted file mode 100644
index 91f907f..0000000
Binary files a/lib/pyproj/data/prvi and /dev/null differ
diff --git a/lib/pyproj/data/stgeorge b/lib/pyproj/data/stgeorge
deleted file mode 100644
index bb8e08d..0000000
Binary files a/lib/pyproj/data/stgeorge and /dev/null differ
diff --git a/lib/pyproj/data/stlrnc b/lib/pyproj/data/stlrnc
deleted file mode 100644
index eec9c5d..0000000
Binary files a/lib/pyproj/data/stlrnc and /dev/null differ
diff --git a/lib/pyproj/data/stpaul b/lib/pyproj/data/stpaul
deleted file mode 100644
index 52b8967..0000000
Binary files a/lib/pyproj/data/stpaul and /dev/null differ
diff --git a/lib/pyproj/data/td_out.dist b/lib/pyproj/data/td_out.dist
index 540d523..060d14d 100644
--- a/lib/pyproj/data/td_out.dist
+++ b/lib/pyproj/data/td_out.dist
@@ -12,3 +12,14 @@ Test MD used where available
 79d58'00.000"W 36d58'00.000"N 0.0	79d57'59.128"W	36d58'0.501"N 0.000
 79d58'00.000"W 37d02'00.000"N 0.0	79d57'59.126"W	37d2'0.501"N 0.000
 79d58'00.000"W 36d58'00.000"N 0.0	79d57'59.128"W	36d58'0.501"N 0.000
+##############################################################
+Test that we use grid shift files even if we are right on the
+edge or even a wee bit outside (#141).
+-5.5 52.0	-5.501106465528	51.999890470284 0.000000000000
+-5.5000000000001 52.0000000000001	-5.501106465529	51.999890470284 0.000000000000
+-5.4999 51.9999	-5.501006458305	51.999790470257 0.000000000000
+-5.5001 52.0	-5.500100000000	52.000000000000 0.000000000000
+-5.5 52.0	-5.498893534472	52.000109529716 0.000000000000
+-5.5000000000001 52.0000000000001	-5.498893534472	52.000109529717 0.000000000000
+-5.4999 51.9999	-5.498793541695	52.000009529743 0.000000000000
+-5.5001 52.0	-5.500100000000	52.000000000000 0.000000000000
diff --git a/lib/pyproj/data/test27 b/lib/pyproj/data/test27
index cd25621..583f603 100755
--- a/lib/pyproj/data/test27
+++ b/lib/pyproj/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/pyproj/data/test83 b/lib/pyproj/data/test83
index 2927dc7..2de16ab 100755
--- a/lib/pyproj/data/test83
+++ b/lib/pyproj/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/pyproj/data/testIGNF b/lib/pyproj/data/testIGNF
index ec782eb..1522677 100755
--- a/lib/pyproj/data/testIGNF
+++ b/lib/pyproj/data/testIGNF
@@ -8,6 +8,8 @@
 # 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()
@@ -18,13 +20,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 "============================================"
@@ -38,6 +39,10 @@ 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} <<EOF
+ 3.300866856 43.4477976569 0.0000
+EOF
 echo "+init=${INIT_FILE}:LAMBE +to +init=${INIT_FILE}:LAMB93" >>${OUT}
 $EXE +init=${INIT_FILE}:LAMBE +to +init=${INIT_FILE}:LAMB93 -E $RES >>${OUT} <<EOF
  600000.0000 2600545.4523  0.0000
diff --git a/lib/pyproj/data/testdatumfile b/lib/pyproj/data/testdatumfile
index 4a647ef..e03d1d8 100755
--- a/lib/pyproj/data/testdatumfile
+++ b/lib/pyproj/data/testdatumfile
@@ -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 "============================================"
@@ -69,6 +68,31 @@ $EXE +proj=latlong +ellps=clrk66 +nadgrids=conus \
 79d58'00.000"W 36d58'00.000"N 0.0
 EOF
 #
+echo "##############################################################" >> ${OUT}
+echo "Test that we use grid shift files even if we are right on the" >> ${OUT}
+echo "edge or even a wee bit outside (#141)."  >> ${OUT}
+#
+# Our test points are (1) right on mesh corner, (2) outside but within 
+# epsilon (3) inside a bit (4) outside by more than epsilon
+#
+$EXE +proj=latlong +ellps=WGS84 +nadgrids=ntf_r93.gsb \
+ +to +proj=latlong +datum=WGS84 \
+ -E -f "%.12f" >>${OUT} <<EOF
+-5.5 52.0
+-5.5000000000001 52.0000000000001
+-5.4999 51.9999
+-5.5001 52.0
+EOF
+#
+$EXE +proj=latlong +datum=WGS84 \
+ +to +proj=latlong +ellps=WGS84 +nadgrids=ntf_r93.gsb \
+ -E -f "%.12f" >>${OUT} <<EOF
+-5.5 52.0
+-5.5000000000001 52.0000000000001
+-5.4999 51.9999
+-5.5001 52.0
+EOF
+#
 ##############################################################################
 # Done! 
 # do 'diff' with distribution results
diff --git a/lib/pyproj/data/testntv2 b/lib/pyproj/data/testntv2
index 096f4bb..4a4cfb2 100755
--- a/lib/pyproj/data/testntv2
+++ b/lib/pyproj/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/pyproj/data/testvarious b/lib/pyproj/data/testvarious
index e329778..31a86c9 100755
--- a/lib/pyproj/data/testvarious
+++ b/lib/pyproj/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} <<EOF
+1d00'00.000"W 10d00'00.000"N 0.0
+0d00'00.000"W 10d00'00.000"N 0.0
+0d00'00.000"E 10d00'00.000"N 0.0
+1d00'00.000"E 45d00'00.000"N 0.0
+179d00'00.000"E 45d00'00.000"N 0.0
+181d00'00.000"E 45d00'00.000"N 0.0
+350d00'00.000"E 45d00'00.000"N 0.0
+370d00'00.000"E 45d00'00.000"N 0.0
+EOF
+#
+echo "##############################################################" >> ${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} <<EOF
-0d00'00.000"W 0d00'00.000"N 0.0
-0d00'00.000"W 0d00'00.000"N 10.0
+0d00'00.001"W 0d00'00.001"N 0.0
+0d00'00.001"W 0d00'00.001"N 10.0
 79d00'00.000"W 45d00'00.000"N 0.0
-0d00'00.000"W 90d00'00.000"N 0.0
+45d00'00.000"W 89d59'59.990"N 0.0
 EOF
 #
 echo "##############################################################" >> ${OUT}
@@ -138,6 +153,15 @@ $EXE +proj=latlong +datum=WGS84 \
 EOF
 #
 echo "##############################################################" >> ${OUT}
+echo "Test stere without lat_ts (#147)" >> ${OUT}
+#
+$EXE +proj=latlong +datum=WGS84 \
+ +to +proj=stere +lat_0=40 +lon_0=10  +datum=WGS84 \
+ -E >>${OUT} <<EOF
+20 45
+EOF
+#
+echo "##############################################################" >> ${OUT}
 echo "Test sts projection (re: ticket 12)" >> ${OUT}
 #
 $EXE +proj=latlong +ellps=WGS84 \
@@ -151,6 +175,246 @@ $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} <<EOF
+116d2'11.12630 5d54'19.90183
+EOF
+echo "##############################################################" >> ${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} <<EOF
+10000 20000
+500000 2000000  
+1000000 2000000  
+2000000 2000000  
+4000000 2000000  
+EOF
+#
+echo "##############################################################" >> ${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} <<EOF
+0dN 0.000
+15d22'16.108"W	17d52'53.478"N 0.000  
+10d40'55.532"W	17d42'48.526"N 0.000  
+1d32'21.33"W	17d3'47.233"N 0.000  
+15d4'42.357"E	14d48'56.372"N 0.000  
+EOF
+#
+echo "##############################################################" >> ${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} <<EOF
+10000 20000
+500000 2000000  
+1000000 2000000  
+2000000 2000000  
+4000000 2000000  
+EOF
+#
+echo "##############################################################" >> ${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} <<EOF
+0dN 0.000
+15d22'16.108"W	17d52'53.478"N 0.000  
+10d40'55.532"W	17d42'48.526"N 0.000  
+1d32'21.33"W	17d3'47.233"N 0.000  
+15d4'42.357"E	14d48'56.372"N 0.000  
+EOF
+#
+echo "##############################################################" >> ${OUT}
+echo "Test robinson projection (#113)" >> ${OUT}
+#
+$EXE +proj=latlong +datum=WGS84 \
+ +to +proj=robin +datum=WGS84 \
+ -E >>${OUT} <<EOF
+-30 40 
+-35 45
+EOF
+echo "##############################################################" >> ${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} <<EOF
+0 41.81031
+-90 0
+EOF
+echo "Test inverse projection on sphere" >> ${OUT}
+$EXE +proj=latlong +a=1 +lon_0=0 \
+ +to +proj=healpix +a=1 +lon_0=0  -f '%.'5'f' -I\
+ -E >>${OUT} <<EOF
+0 0.7853981633974483
+-1.5707963267948966 0
+EOF
+echo "Test forward projection on ellipsoid" >> ${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} <<EOF
+0 41.937853904844985
+-90 0
+EOF
+echo "Test inverse projection on ellipsoid" >> ${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} <<EOF
+0 0.7853981633974483
+-1.5707963267948966 0
+EOF
+echo "##############################################################" >> ${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} <<EOF
+0 41.81031
+-90 0
+EOF
+echo "Test inverse 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' -I\
+ -E >>${OUT} <<EOF
+0 0.7853981633974483
+-1.5707963267948966 0
+EOF
+echo "Test forward projection on ellipsoid" >> ${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} <<EOF
+0 41.937853904844985
+-90 0
+EOF
+echo "Test inverse projection on ellipsoid" >> ${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} <<EOF
+0 0.7853981633974483
+-1.5707963267948966 0
+EOF
+echo "##############################################################" >> ${OUT}
+echo "Test geos projection" >> ${OUT}
+echo "Test geos on a sphere" >> ${OUT}
+$EXE +proj=latlong +ellps=sphere \
+ +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=sphere -E >>${OUT} <<EOF
+16d11'8" 58d35'31"
+-43d11'47" -22d54'30"
+18d25'26" -33d55'31"
+47d58'42" 29d22'11"
+EOF
+echo "Test geos on a ellipsoid" >> ${OUT}
+$EXE +proj=latlong +ellps=sphere \
+ +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=WGS84 -E >>${OUT} <<EOF
+16d11'8" 58d35'31"
+-43d11'47" -22d54'30"
+18d25'26" -33d55'31"
+47d58'42" 29d22'11"
+EOF
+echo "Test inv geos on a sphere" >> ${OUT}
+$EXE +proj=latlong +ellps=sphere \
+ +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=sphere -I -E >>${OUT} <<EOF
+849736.77 4960015.43
+-3780930.93 -2326595.36
+1608689.65 -3412115.56
+3825202.59 2885980.79
+EOF
+echo "Test inv geos on a ellipsoid" >> ${OUT}
+$EXE +proj=latlong +ellps=sphere \
+ +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=WGS84 -I -E >>${OUT} <<EOF
+852862.53 4945122.70
+-3787026.57 -2314765.32
+1612331.00 -3397031.37
+3832522.65 2872185.29
+EOF
+echo "Test geos on a sphere with alternate sweep" >> ${OUT}
+$EXE +proj=latlong +ellps=sphere \
+ +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=sphere +sweep=y -E >>${OUT} <<EOF
+16d11'8" 58d35'31"
+-43d11'47" -22d54'30"
+18d25'26" -33d55'31"
+47d58'42" 29d22'11"
+EOF
+echo "Test geos on a ellipsoid with alternate sweep" >> ${OUT}
+$EXE +proj=latlong +ellps=sphere \
+ +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=WGS84 +sweep=y -E >>${OUT} <<EOF
+16d11'8" 58d35'31"
+-43d11'47" -22d54'30"
+18d25'26" -33d55'31"
+47d58'42" 29d22'11"
+EOF
+echo "Test inv geos on a sphere with alternate sweep" >> ${OUT}
+$EXE +proj=latlong +ellps=sphere \
+ +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=sphere +sweep=y -I -E >>${OUT} <<EOF
+841586.28 4961396.21
+-3772913.22 -2339604.71
+1601377.77 -3415545.15
+3812722.89 2902474.62
+EOF
+echo "Test inv geos on a ellipsoid with alternate sweep" >> ${OUT}
+$EXE +proj=latlong +ellps=sphere \
+ +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=WGS84 +sweep=y -I -E >>${OUT} <<EOF
+844731.03 4946509.59
+-3779077.27 -2327750.87
+1605067.15 -3400461.47
+3820138.08 2888664.15
+EOF
+#
+echo "##############################################################" >> ${OUT}
+echo "Test the natural earth projection" >> ${OUT}
+$EXE +proj=latlong +a=1 +lon_0=0 \
+ +to +proj=natearth +a=6371008.7714 +b=6371008.7714 -f '%.'7'f' \
+ -E >>${OUT} <<EOF
+0.0 0.0 0 0.0 0.0
+0.0 22.5 0 0.0 2525419.569383768
+0.0 45.0 0 0.0 5052537.389973222
+0.0 67.5 0 0.0 7400065.6562573705
+0.0 90.0 0 0.0 9062062.394736718
+45.0 0.0 0 4356790.016612169 0.0
+45.0 22.5 0 4253309.544984069 2525419.569383768
+45.0 45.0 0 3924521.5829515466 5052537.389973222
+45.0 67.5 0 3354937.47115583 7400065.6562573705
+45.0 90.0 0 2397978.2448443635 9062062.394736718
+90.0 0.0 0 8713580.033224339 0.0
+90.0 22.5 0 8506619.089968137 2525419.569383768
+90.0 45.0 0 7849043.165903093 5052537.389973222
+90.0 67.5 0 6709874.94231166 7400065.6562573705
+90.0 90.0 0 4795956.489688727 9062062.394736718
+135.0 0.0 0 1.3070370049836507E7 0.0
+135.0 22.5 0 1.2759928634952208E7 2525419.569383768
+135.0 45.0 0 1.177356474885464E7 5052537.389973222
+135.0 67.5 0 1.0064812413467491E7 7400065.6562573705
+135.0 90.0 0 7193934.734533091 9062062.394736718
+180.0 0.0 0 1.7427160066448677E7 0.0
+180.0 22.5 0 1.7013238179936275E7 2525419.569383768
+180.0 45.0 0 1.5698086331806187E7 5052537.389973222
+180.0 67.5 0 1.341974988462332E7 7400065.6562573705
+180.0 90.0 0 9591912.979377454 9062062.394736718
+EOF
+echo "##############################################################" >> ${OUT}
+echo "Test pconic (#148)" >> ${OUT}
+#
+$EXE +proj=latlong +datum=WGS84 \
+ +to +proj=pconic  +units=m +lat_1=20n +lat_2=60n +lon_0=60W +datum=WGS84 \
+ -E >>${OUT} <<EOF
+-70.4 -23.65
+EOF
+$EXE +proj=pconic  +units=m +lat_1=20n +lat_2=60n +lon_0=60W +datum=WGS84 \
+ +to +proj=latlong +datum=WGS84 \
+ -E >>${OUT} <<EOF
+-2240096.40 -6940342.15
+EOF
 ##############################################################################
 # Done! 
 # do 'diff' with distribution results
diff --git a/lib/pyproj/data/tv_out.dist b/lib/pyproj/data/tv_out.dist
index cd49b91..20d00d3 100644
--- a/lib/pyproj/data/tv_out.dist
+++ b/lib/pyproj/data/tv_out.dist
@@ -18,14 +18,24 @@ Test simple prime meridian handling.
 0d00'00.000"W 0d00'00.000"N 0.0	1dW	0dN 0.000
 79d00'00.000"W 45d00'00.000"N 0.0	80dW	45dN 0.000
 ##############################################################
+Test support for the lon_wrap switch.
+1d00'00.000"W 10d00'00.000"N 0.0	359dE	10dN 0.000
+0d00'00.000"W 10d00'00.000"N 0.0	360dE	10dN 0.000
+0d00'00.000"E 10d00'00.000"N 0.0	360dE	10dN 0.000
+1d00'00.000"E 45d00'00.000"N 0.0	1dE	45dN 0.000
+179d00'00.000"E 45d00'00.000"N 0.0	179dE	45dN 0.000
+181d00'00.000"E 45d00'00.000"N 0.0	181dE	45dN 0.000
+350d00'00.000"E 45d00'00.000"N 0.0	350dE	45dN 0.000
+370d00'00.000"E 45d00'00.000"N 0.0	10dE	45dN 0.000
+##############################################################
 Test simple prime meridian handling within a projection.
 500000 3000000	113dW	27d7'20.891"N 0.000
 ##############################################################
 Test geocentric x/y/z generation.
-0d00'00.000"W 0d00'00.000"N 0.0	6378137.00	-0.00 0.00
-0d00'00.000"W 0d00'00.000"N 10.0	6378147.00	-0.00 0.00
+0d00'00.001"W 0d00'00.001"N 0.0	6378137.00	-0.03 0.03
+0d00'00.001"W 0d00'00.001"N 10.0	6378147.00	-0.03 0.03
 79d00'00.000"W 45d00'00.000"N 0.0	861996.98	-4434590.01 4487348.41
-0d00'00.000"W 90d00'00.000"N 0.0	0.00	-0.00 6356752.31
+45d00'00.000"W 89d59'59.990"N 0.0	0.22	-0.22 6356752.31
 ##############################################################
 Test geocentric x/y/z consumption.
 6378137.00      -0.00 0.00	0dE	0dN 0.000
@@ -36,6 +46,143 @@ Test geocentric x/y/z consumption.
 Test stere projection (re: win32 ticket 12)
 105 40	5577808.93	1494569.40 0.00
 ##############################################################
+Test stere without lat_ts (#147)
+20 45	789468.08	602385.33 0.00
+##############################################################
 Test sts projection (re: ticket 12)
 4.897000 52.371000	383646.09	5997047.89 0.00
 383646.088858 5997047.888175	4d53'49.2"E	52d22'15.6"N 0.000
+##############################################################
+Test RSO Borneo projection (re: ticket 62)
+116d2'11.12630 5d54'19.90183	704570.40	653979.68 0.00
+##############################################################
+Test extended transverse mercator (#97)
+10000 20000	20dW	0dN 0.000
+500000 2000000	15d22'16.108"W	17d52'53.478"N 0.000  
+1000000 2000000	10d40'55.532"W	17d42'48.526"N 0.000  
+2000000 2000000	1d32'21.33"W	17d3'47.233"N 0.000  
+4000000 2000000	15d4'42.357"E	14d48'56.372"N 0.000  
+##############################################################
+Test extended transverse mercator inverse (#97)
+0dN 0.000	2278817.00	20000.00 0.00
+15d22'16.108"W	17d52'53.478"N 0.000	499999.99	2000000.01 0.00  
+10d40'55.532"W	17d42'48.526"N 0.000	999999.99	1999999.99 0.00  
+1d32'21.33"W	17d3'47.233"N 0.000	2000000.00	1999999.99 0.00  
+15d4'42.357"E	14d48'56.372"N 0.000	4000000.00	2000000.01 0.00  
+##############################################################
+Test transverse mercator (#97)
+10000 20000	20dW	0dN 0.000
+500000 2000000	15d22'16.108"W	17d52'53.478"N 0.000  
+1000000 2000000	10d40'55.532"W	17d42'48.526"N 0.000  
+2000000 2000000	1d32'21.399"W	17d3'47.244"N 0.000  
+4000000 2000000	15d4'6.539"E	14d49'7.331"N 0.000  
+##############################################################
+Test transverse mercator inverse (#97)
+0dN 0.000	2278812.96	20000.00 0.00
+15d22'16.108"W	17d52'53.478"N 0.000	499999.99	2000000.01 0.00  
+10d40'55.532"W	17d42'48.526"N 0.000	999999.99	1999999.99 0.00  
+1d32'21.33"W	17d3'47.233"N 0.000	2000000.03	1999999.62 0.00  
+15d4'42.357"E	14d48'56.372"N 0.000	3999967.33	1999855.31 0.00  
+##############################################################
+Test robinson projection (#113)
+-30 40	-2612095.95	4276351.58 0.00 
+-35 45	-2963455.42	4805073.65 0.00
+##############################################################
+Test forward projection on sphere
+0 41.81031	0.00000	0.78540 0.00000
+-90 0	-1.57080	0.00000 0.00000
+Test inverse projection on sphere
+0 0.7853981633974483	0.00000	41.81031 0.00000
+-1.5707963267948966 0	-90.00000	0.00000 0.00000
+Test forward projection on ellipsoid
+0 41.937853904844985	0.00000	0.78540 0.00000
+-90 0	-1.57080	0.00000 0.00000
+Test inverse projection on ellipsoid
+0 0.7853981633974483	0.00000	41.93785 0.00000
+-1.5707963267948966 0	-90.00000	0.00000 0.00000
+##############################################################
+Test forward projection on sphere
+0 41.81031	0.00000	0.78540 0.00000
+-90 0	-1.57080	0.00000 0.00000
+Test inverse projection on sphere
+0 0.7853981633974483	0.00000	41.81031 0.00000
+-1.5707963267948966 0	-90.00000	0.00000 0.00000
+Test forward projection on ellipsoid
+0 41.937853904844985	0.00000	0.78540 0.00000
+-90 0	-1.57080	0.00000 0.00000
+Test inverse projection on ellipsoid
+0 0.7853981633974483	0.00000	41.93785 0.00000
+-1.5707963267948966 0	-90.00000	0.00000 0.00000
+##############################################################
+Test geos projection
+Test geos on a sphere
+16d11'8" 58d35'31"	849736.77	4960015.43 0.00
+-43d11'47" -22d54'30"	-3780930.93	-2326595.36 0.00
+18d25'26" -33d55'31"	1608689.65	-3412115.56 0.00
+47d58'42" 29d22'11"	3825202.59	2885980.79 0.00
+Test geos on a ellipsoid
+16d11'8" 58d35'31"	852862.53	4945122.70 0.00
+-43d11'47" -22d54'30"	-3787026.57	-2314765.32 0.00
+18d25'26" -33d55'31"	1612331.00	-3397031.37 0.00
+47d58'42" 29d22'11"	3832522.65	2872185.29 0.00
+Test inv geos on a sphere
+849736.77 4960015.43	16d11'8"E	58d35'31"N 0.000
+-3780930.93 -2326595.36	43d11'47"W	22d54'30"S 0.000
+1608689.65 -3412115.56	18d25'26"E	33d55'31"S 0.000
+3825202.59 2885980.79	47d58'42"E	29d22'11"N 0.000
+Test inv geos on a ellipsoid
+852862.53 4945122.70	16d11'8"E	58d35'31"N 0.000
+-3787026.57 -2314765.32	43d11'47"W	22d54'30"S 0.000
+1612331.00 -3397031.37	18d25'26"E	33d55'31"S 0.000
+3832522.65 2872185.29	47d58'42"E	29d22'11"N 0.000
+Test geos on a sphere with alternate sweep
+16d11'8" 58d35'31"	841586.28	4961396.21 0.00
+-43d11'47" -22d54'30"	-3772913.22	-2339604.71 0.00
+18d25'26" -33d55'31"	1601377.77	-3415545.15 0.00
+47d58'42" 29d22'11"	3812722.89	2902474.62 0.00
+Test geos on a ellipsoid with alternate sweep
+16d11'8" 58d35'31"	844731.03	4946509.59 0.00
+-43d11'47" -22d54'30"	-3779077.27	-2327750.87 0.00
+18d25'26" -33d55'31"	1605067.15	-3400461.47 0.00
+47d58'42" 29d22'11"	3820138.08	2888664.15 0.00
+Test inv geos on a sphere with alternate sweep
+841586.28 4961396.21	16d11'8"E	58d35'31"N 0.000
+-3772913.22 -2339604.71	43d11'47"W	22d54'30"S 0.000
+1601377.77 -3415545.15	18d25'26"E	33d55'31"S 0.000
+3812722.89 2902474.62	47d58'42"E	29d22'11"N 0.000
+Test inv geos on a ellipsoid with alternate sweep
+844731.03 4946509.59	16d11'8"E	58d35'31"N 0.000
+-3779077.27 -2327750.87	43d11'47"W	22d54'30"S 0.000
+1605067.15 -3400461.47	18d25'26"E	33d55'31"S 0.000
+3820138.08 2888664.15	47d58'42"E	29d22'11"N 0.000
+##############################################################
+Test the natural earth projection
+0.0 0.0 0	0.0000000	0.0000000 0.0000000 0.0 0.0
+0.0 22.5 0	0.0000000	2525419.5693838 0.0000000 0.0 2525419.569383768
+0.0 45.0 0	0.0000000	5052537.3899732 0.0000000 0.0 5052537.389973222
+0.0 67.5 0	0.0000000	7400065.6562574 0.0000000 0.0 7400065.6562573705
+0.0 90.0 0	0.0000000	9062062.3947367 0.0000000 0.0 9062062.394736718
+45.0 0.0 0	4356790.0166122	0.0000000 0.0000000 4356790.016612169 0.0
+45.0 22.5 0	4253309.5449841	2525419.5693838 0.0000000 4253309.544984069 2525419.569383768
+45.0 45.0 0	3924521.5829515	5052537.3899732 0.0000000 3924521.5829515466 5052537.389973222
+45.0 67.5 0	3354937.4711558	7400065.6562574 0.0000000 3354937.47115583 7400065.6562573705
+45.0 90.0 0	2397978.2448444	9062062.3947367 0.0000000 2397978.2448443635 9062062.394736718
+90.0 0.0 0	8713580.0332243	0.0000000 0.0000000 8713580.033224339 0.0
+90.0 22.5 0	8506619.0899681	2525419.5693838 0.0000000 8506619.089968137 2525419.569383768
+90.0 45.0 0	7849043.1659031	5052537.3899732 0.0000000 7849043.165903093 5052537.389973222
+90.0 67.5 0	6709874.9423117	7400065.6562574 0.0000000 6709874.94231166 7400065.6562573705
+90.0 90.0 0	4795956.4896887	9062062.3947367 0.0000000 4795956.489688727 9062062.394736718
+135.0 0.0 0	13070370.0498365	0.0000000 0.0000000 1.3070370049836507E7 0.0
+135.0 22.5 0	12759928.6349522	2525419.5693838 0.0000000 1.2759928634952208E7 2525419.569383768
+135.0 45.0 0	11773564.7488546	5052537.3899732 0.0000000 1.177356474885464E7 5052537.389973222
+135.0 67.5 0	10064812.4134675	7400065.6562574 0.0000000 1.0064812413467491E7 7400065.6562573705
+135.0 90.0 0	7193934.7345331	9062062.3947367 0.0000000 7193934.734533091 9062062.394736718
+180.0 0.0 0	17427160.0664487	0.0000000 0.0000000 1.7427160066448677E7 0.0
+180.0 22.5 0	17013238.1799363	2525419.5693838 0.0000000 1.7013238179936275E7 2525419.569383768
+180.0 45.0 0	15698086.3318062	5052537.3899732 0.0000000 1.5698086331806187E7 5052537.389973222
+180.0 67.5 0	13419749.8846233	7400065.6562574 0.0000000 1.341974988462332E7 7400065.6562573705
+180.0 90.0 0	9591912.9793775	9062062.3947367 0.0000000 9591912.979377454 9062062.394736718
+##############################################################
+Test pconic (#148)
+-70.4 -23.65	-2240096.40	-6940342.15 0.00
+-2240096.40 -6940342.15	70d24'W	23d39'S 0.000
diff --git a/lib/pyproj/datadir.py b/lib/pyproj/datadir.py
new file mode 100644
index 0000000..f532cf2
--- /dev/null
+++ b/lib/pyproj/datadir.py
@@ -0,0 +1,6 @@
+import os
+
+if 'PROJ_DIR' in os.environ:
+    pyproj_datadir = os.environ['PROJ_DIR']
+else:
+    pyproj_datadir = os.sep.join([os.path.dirname(__file__), 'data'])
diff --git a/nad2bin.c b/nad2bin.c
index db4bb07..6951552 100644
--- a/nad2bin.c
+++ b/nad2bin.c
@@ -1,65 +1,376 @@
-/* Convert bivariate ASCII NAD27 to NAD83 tables to binary structure */
+/* Convert bivariate ASCII NAD27 to NAD83 tables to NTv2 binary structure */
 #include <stdio.h>
 #include <stdlib.h>
+#include <assert.h>
+
 #define PJ_LIB__
 #include <projects.h>
 #define U_SEC_TO_RAD 4.848136811095359935899141023e-12
-	static char
-*usage = "<ASCII_dist_table local_bin_table";
 
+/************************************************************************/
+/*                             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;
+    }
+}
+
+/************************************************************************/
+/*                               Usage()                                */
+/************************************************************************/
+
+static void Usage()
+{
+    fprintf(stderr,
+            "usage: nad2bin [-f ctable/ctable2/ntv2] binary_output < ascii_source\n" );
+    exit(1);
+}
+
+/************************************************************************/
+/*                                main()                                */
+/************************************************************************/
 int main(int argc, char **argv) {
-	struct CTABLE ct;
-	FLP *p, t;
-	size_t tsize;
-	int i, j, ichk;
-	long lam, laml, phi, phil;
-	FILE *bin;
-
-	if (argc != 2) {
-		fprintf(stderr,"usage: %s %s\n", argv[0], usage);
-		exit(1);
-	}
-	fgets(ct.id, MAX_TAB_ID, stdin);
-	scanf("%d %d %*d %lf %lf %lf %lf", &ct.lim.lam, &ct.lim.phi,
-		&ct.ll.lam, &ct.del.lam, &ct.ll.phi, &ct.del.phi);
-	if (!(ct.cvs = (FLP *)malloc(tsize = ct.lim.lam * ct.lim.phi *
-		sizeof(FLP)))) {
-		perror("mem. alloc");
-		exit(1);
-	}
-	ct.ll.lam *= DEG_TO_RAD;
-	ct.ll.phi *= DEG_TO_RAD;
-	ct.del.lam *= DEG_TO_RAD;
-	ct.del.phi *= DEG_TO_RAD;
-	/* load table */
-	for (p = ct.cvs, i = 0; i < ct.lim.phi; ++i) {
-		scanf("%d:%ld %ld", &ichk, &laml, &phil);
-		if (ichk != i) {
-			fprintf(stderr,"format check on row\n");
-			exit(1);
-		}
-		t.lam = laml * U_SEC_TO_RAD;
-		t.phi = phil * U_SEC_TO_RAD;
-		*p++ = t;
-		for (j = 1; j < ct.lim.lam; ++j) {
-			scanf("%ld %ld", &lam, &phi);
-			t.lam = (laml += lam) * U_SEC_TO_RAD;
-			t.phi = (phil += phi) * U_SEC_TO_RAD;
-			*p++ = t;
-		}
+    struct CTABLE ct;
+    FLP *p, t;
+    size_t tsize;
+    int i, j, ichk;
+    long lam, laml, phi, phil;
+    FILE *fp;
+
+    const char *output_file = NULL;
+
+    const char *format   = "ctable2";
+    const char *GS_TYPE  = "SECONDS";
+    const char *VERSION  = "";
+    const char *SYSTEM_F = "NAD27";
+    const char *SYSTEM_T = "NAD83";
+    const char *SUB_NAME = "";
+    const char *CREATED  = "";
+    const char *UPDATED  = "";
+
+/* ==================================================================== */
+/*      Process arguments.                                              */
+/* ==================================================================== */
+    for( i = 1; i < argc; i++ )
+    {
+        if( strcmp(argv[i],"-f") == 0 && i < argc-1 ) 
+        {
+            format = argv[++i];
+        }
+        else if( output_file == NULL )
+        {
+            output_file = argv[i];
+        }
+        else
+            Usage();
+    }
+
+    if( output_file == NULL )
+        Usage();
+
+    fprintf( stdout, "Output Binary File Format: %s\n", format );
+
+/* ==================================================================== */
+/*      Read the ASCII Table                                            */
+/* ==================================================================== */
+
+    if ( NULL == fgets(ct.id, MAX_TAB_ID, stdin) ) {
+        perror("fgets");
+        exit(1);
+    }
+    if ( EOF == scanf("%d %d %*d %lf %lf %lf %lf", &ct.lim.lam, &ct.lim.phi,
+          &ct.ll.lam, &ct.del.lam, &ct.ll.phi, &ct.del.phi) ) {
+        perror("scanf");
+        exit(1);
+    }
+    if (!(ct.cvs = (FLP *)malloc(tsize = ct.lim.lam * ct.lim.phi *
+                                 sizeof(FLP)))) {
+        perror("mem. alloc");
+        exit(1);
+    }
+    ct.ll.lam *= DEG_TO_RAD;
+    ct.ll.phi *= DEG_TO_RAD;
+    ct.del.lam *= DEG_TO_RAD;
+    ct.del.phi *= DEG_TO_RAD;
+    /* load table */
+    for (p = ct.cvs, i = 0; i < ct.lim.phi; ++i) {
+        if ( EOF == scanf("%d:%ld %ld", &ichk, &laml, &phil) ) {
+            perror("scanf on row");
+            exit(1);
+        }
+        if (ichk != i) {
+            fprintf(stderr,"format check on row\n");
+            exit(1);
+        }
+        t.lam = laml * U_SEC_TO_RAD;
+        t.phi = phil * U_SEC_TO_RAD;
+        *p++ = t;
+        for (j = 1; j < ct.lim.lam; ++j) {
+            if ( EOF == scanf("%ld %ld", &lam, &phi) ) {
+                perror("scanf on column");
+                exit(1);
+            }
+            t.lam = (laml += lam) * U_SEC_TO_RAD;
+            t.phi = (phil += phi) * U_SEC_TO_RAD;
+            *p++ = t;
+        }
+    }
+    if (feof(stdin)) {
+        fprintf(stderr, "premature EOF\n");
+        exit(1);
+    }
+
+/* ==================================================================== */
+/*      Write out the old ctable format - this is machine and byte      */
+/*      order specific.                                                 */
+/* ==================================================================== */
+    if( strcmp(format,"ctable") == 0 ) 
+    {
+	if (!(fp = fopen(output_file, "wb"))) {
+            perror(output_file);
+            exit(2);
 	}
-	if (feof(stdin)) {
-		fprintf(stderr, "premature EOF\n");
-		exit(1);
+	if (fwrite(&ct, sizeof(ct), 1, fp) != 1 ||
+            fwrite(ct.cvs, tsize, 1, fp) != 1) {
+            fprintf(stderr, "output failure\n");
+            exit(2);
 	}
-	if (!(bin = freopen(argv[1], "wb", stdout))) {
-		perror(argv[1]);
-		exit(2);
+        fclose( fp );
+	exit(0); /* normal completion */
+    }
+
+/* ==================================================================== */
+/*      Write out the old ctable format - this is machine and byte      */
+/*      order specific.                                                 */
+/* ==================================================================== */
+    if( strcmp(format,"ctable2") == 0 ) 
+    {
+        char header[160];
+
+	if (!(fp = fopen(output_file, "wb"))) {
+            perror(output_file);
+            exit(2);
 	}
-	if (fwrite(&ct, sizeof(ct), 1, stdout) != 1 ||
-		fwrite(ct.cvs, tsize, 1, stdout) != 1) {
-		fprintf(stderr, "output failure\n");
-		exit(2);
+
+        assert( MAX_TAB_ID == 80 );
+        assert( sizeof(int) == 4 ); /* for ct.lim.lam/phi */
+
+        memset( header, 0, sizeof(header) );
+
+        memcpy( header +   0, "CTABLE V2.0     ", 16 );
+        memcpy( header +  16, ct.id, 80 );
+        memcpy( header +  96, &ct.ll.lam, 8 );
+        memcpy( header + 104, &ct.ll.phi, 8 );
+        memcpy( header + 112, &ct.del.lam, 8 );
+        memcpy( header + 120, &ct.del.phi, 8 );
+        memcpy( header + 128, &ct.lim.lam, 4 );
+        memcpy( header + 132, &ct.lim.phi, 4 );
+
+        /* force into LSB format */
+        if( !IS_LSB ) 
+        {
+            swap_words( header +  96, 8, 4 );
+            swap_words( header + 128, 4, 2 );
+            swap_words( ct.cvs, 4, ct.lim.lam * 2 * ct.lim.phi );
+        }
+
+        if( fwrite( header, sizeof(header), 1, fp ) != 1 ) {
+            perror( "fwrite" );
+            exit( 2 );
+        }
+
+	if (fwrite(ct.cvs, tsize, 1, fp) != 1) {
+            perror( "fwrite" );
+            exit(2);
 	}
+
+        fclose( fp );
 	exit(0); /* normal completion */
+    }
+
+/* ==================================================================== */
+/*      Write out the NTv2 format grid shift file.                      */
+/* ==================================================================== */
+    if( strcmp(format,"ntv2") == 0 ) 
+    {
+        if (!(fp = fopen(output_file, "wb"))) 
+        {
+            perror(output_file);
+            exit(2);
+        }
+        
+/* -------------------------------------------------------------------- */
+/*      Write the file header.                                          */
+/* -------------------------------------------------------------------- */
+        {    
+            char achHeader[11*16];
+
+            memset( achHeader, 0, sizeof(achHeader) );
+        
+            memcpy( achHeader +  0*16, "NUM_OREC", 8 );
+            achHeader[ 0*16 + 8] = 0xb;
+
+            memcpy( achHeader +  1*16, "NUM_SREC", 8 );
+            achHeader[ 1*16 + 8] = 0xb;
+
+            memcpy( achHeader +  2*16, "NUM_FILE", 8 );
+            achHeader[ 2*16 + 8] = 0x1;
+
+            memcpy( achHeader +  3*16, "GS_TYPE         ", 16 );
+            memcpy( achHeader +  3*16+8, GS_TYPE, MIN(16,strlen(GS_TYPE)) );
+
+            memcpy( achHeader +  4*16, "VERSION         ", 16 );
+            memcpy( achHeader +  4*16+8, VERSION, MIN(16,strlen(VERSION)) );
+
+            memcpy( achHeader +  5*16, "SYSTEM_F        ", 16 );
+            memcpy( achHeader +  5*16+8, SYSTEM_F, MIN(16,strlen(SYSTEM_F)) );
+
+            memcpy( achHeader +  6*16, "SYSTEM_T        ", 16 );
+            memcpy( achHeader +  6*16+8, SYSTEM_T, MIN(16,strlen(SYSTEM_T)) );
+
+            memcpy( achHeader +  7*16, "MAJOR_F ", 8);
+            memcpy( achHeader +  8*16, "MINOR_F ", 8 );
+            memcpy( achHeader +  9*16, "MAJOR_T ", 8 );
+            memcpy( achHeader + 10*16, "MINOR_T ", 8 );
+
+            fwrite( achHeader, 1, sizeof(achHeader), fp );
+        }
+        
+/* -------------------------------------------------------------------- */
+/*      Write the grid header.                                          */
+/* -------------------------------------------------------------------- */
+        {
+            unsigned char achHeader[11*16];
+            double dfValue;
+            int nGSCount = ct.lim.lam * ct.lim.phi;
+            LP ur;
+
+            ur.lam = ct.ll.lam + (ct.lim.lam-1) * ct.del.lam;
+            ur.phi = ct.ll.phi + (ct.lim.phi-1) * ct.del.phi;
+
+            assert( sizeof(nGSCount) == 4 );
+
+            memset( achHeader, 0, sizeof(achHeader) );
+
+            memcpy( achHeader +  0*16, "SUB_NAME        ", 16 );
+            memcpy( achHeader +  0*16+8, SUB_NAME, MIN(16,strlen(SUB_NAME)) );
+    
+            memcpy( achHeader +  1*16, "PARENT          ", 16 );
+            memcpy( achHeader +  1*16+8, "NONE", MIN(16,strlen("NONE")) );
+    
+            memcpy( achHeader +  2*16, "CREATED         ", 16 );
+            memcpy( achHeader +  2*16+8, CREATED, MIN(16,strlen(CREATED)) );
+    
+            memcpy( achHeader +  3*16, "UPDATED         ", 16 );
+            memcpy( achHeader +  3*16+8, UPDATED, MIN(16,strlen(UPDATED)) );
+
+            memcpy( achHeader +  4*16, "S_LAT   ", 8 );
+            dfValue = ct.ll.phi * 3600.0 / DEG_TO_RAD;
+            memcpy( achHeader +  4*16 + 8, &dfValue, 8 );
+
+            memcpy( achHeader +  5*16, "N_LAT   ", 8 );
+            dfValue = ur.phi * 3600.0 / DEG_TO_RAD;
+            memcpy( achHeader +  5*16 + 8, &dfValue, 8 );
+
+            memcpy( achHeader +  6*16, "E_LONG  ", 8 );
+            dfValue = -1 * ur.lam * 3600.0 / DEG_TO_RAD;
+            memcpy( achHeader +  6*16 + 8, &dfValue, 8 );
+
+            memcpy( achHeader +  7*16, "W_LONG  ", 8 );
+            dfValue = -1 * ct.ll.lam * 3600.0 / DEG_TO_RAD;
+            memcpy( achHeader +  7*16 + 8, &dfValue, 8 );
+
+            memcpy( achHeader +  8*16, "LAT_INC ", 8 );
+            dfValue = ct.del.phi * 3600.0 / DEG_TO_RAD;
+            memcpy( achHeader +  8*16 + 8, &dfValue, 8 );
+    
+            memcpy( achHeader +  9*16, "LONG_INC", 8 );
+            dfValue = ct.del.lam * 3600.0 / DEG_TO_RAD;
+            memcpy( achHeader +  9*16 + 8, &dfValue, 8 );
+    
+            memcpy( achHeader + 10*16, "GS_COUNT", 8 );
+            memcpy( achHeader + 10*16+8, &nGSCount, 4 );
+    
+            if( !IS_LSB ) 
+            {
+                swap_words( achHeader +  4*16 + 8, 8, 1 );
+                swap_words( achHeader +  5*16 + 8, 8, 1 );
+                swap_words( achHeader +  6*16 + 8, 8, 1 );
+                swap_words( achHeader +  7*16 + 8, 8, 1 );
+                swap_words( achHeader +  8*16 + 8, 8, 1 );
+                swap_words( achHeader +  9*16 + 8, 8, 1 );
+                swap_words( achHeader + 10*16 + 8, 4, 1 );
+            }
+
+            fwrite( achHeader, 1, sizeof(achHeader), fp );
+        }
+
+/* -------------------------------------------------------------------- */
+/*      Write the actual grid cells.                                    */
+/* -------------------------------------------------------------------- */
+        {
+            float *row_buf;
+            int row;
+
+            row_buf = (float *) pj_malloc(ct.lim.lam * sizeof(float) * 4);
+            memset( row_buf, 0, sizeof(float)*4 );
+
+            for( row = 0; row < ct.lim.phi; row++ )
+            {
+                int	    i;
+
+                for( i = 0; i < ct.lim.lam; i++ )
+                {
+                    FLP *cvs = ct.cvs + (row) * ct.lim.lam
+                        + (ct.lim.lam - i - 1);
+
+                    /* convert radians to seconds */
+                    row_buf[i*4+0] = cvs->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-proj.py b/setup-proj.py
new file mode 100644
index 0000000..3579917
--- /dev/null
+++ b/setup-proj.py
@@ -0,0 +1,59 @@
+# build pyproj using installed proj library and data files
+# (instead of bundled source and data)
+from distutils.core import setup, Extension
+import os, glob, numpy, sys, subprocess
+
+proj_dir = os.environ.get('PROJ_DIR')
+if proj_dir is None: proj_dir='/usr/local'
+proj_libdir = os.environ.get('PROJ_LIBDIR')
+proj_incdir = os.environ.get('PROJ_INCDIR')
+libdirs=[]
+incdirs=[numpy.get_include()]
+libraries=['proj']
+
+if proj_libdir is None and proj_dir is not None:
+    libdirs.append(os.path.join(proj_dir,'lib'))
+    libdirs.append(os.path.join(proj_dir,'lib64'))
+if proj_incdir is None and proj_dir is not None:
+    incdirs.append(os.path.join(proj_dir,'include'))
+
+pyprojext =\
+Extension("pyproj._proj",["_proj.c"],include_dirs=incdirs,library_dirs=libdirs,libraries=libraries)
+
+# over-write default data directory.
+pyproj_datadir = os.path.join(os.path.join(proj_dir,'share'),'proj')
+datadirfile = os.path.join('lib',os.path.join('pyproj','datadir.py'))
+f = open(datadirfile,'w')
+f.write('pyproj_datadir="%s"\n' % pyproj_datadir)
+f.close()
+
+packages          = ['pyproj']
+package_dirs       = {'':'lib'}
+
+setup(name = "pyproj",
+  version = "1.9.3",
+  description = "Python interface to PROJ.4 library",
+  long_description  = """
+Performs cartographic transformations between geographic (lat/lon)
+and map projection (x/y) coordinates. Can also transform directly
+from one map projection coordinate system to another.
+Coordinates can be given as numpy arrays, python arrays, lists or scalars.
+Optimized for numpy arrays.""",
+  url               = "http://code.google.com/p/pyproj",
+  download_url      = "http://python.org/pypi/pyproj",
+  author            = "Jeff Whitaker",
+  author_email      = "jeffrey.s.whitaker at noaa.gov",
+  platforms         = ["any"],
+  license           = "OSI Approved",
+  keywords          = ["python","map projections","GIS","mapping","maps"],
+  classifiers       = ["Development Status :: 4 - Beta",
+                       "Intended Audience :: Science/Research",
+                       "License :: OSI Approved",
+                       "Topic :: Software Development :: Libraries :: Python Modules",
+                       "Topic :: Scientific/Engineering :: GIS",
+                       "Topic :: Scientific/Engineering :: Mathematics",
+                       "Operating System :: OS Independent"],
+  packages          = packages,
+  package_dir       = package_dirs,
+  ext_modules = [pyprojext]
+  )
diff --git a/setup.py b/setup.py
index 57f019a..f5d1531 100644
--- a/setup.py
+++ b/setup.py
@@ -4,15 +4,14 @@ from distutils.core import setup, Extension
 
 deps = glob.glob('src/*.c')
 extensions = [Extension("pyproj._proj",deps+['_proj.c'],include_dirs = ['src'])]
-extensions.append(Extension("pyproj._geod",deps+['_geod.c'],include_dirs = ['src']))
 
 # create binary datum shift grid files.
 pathout = os.path.join('lib',os.path.join('pyproj','data'))
 if sys.argv[1] != 'sdist':
     cc = ccompiler.new_compiler()
-    sysconfig.customize_compiler(cc)
+    #sysconfig.customize_compiler(cc) # doesn't work in python 3.3
     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')
@@ -32,7 +31,7 @@ datafiles = [os.path.join('data',os.path.basename(f)) for f in datafiles]
 package_data = {'pyproj':datafiles}
 
 setup(name = "pyproj",
-  version = "1.8.9",
+  version = "1.9.3",
   description = "Python interface to PROJ.4 library",
   long_description  = """
 Performs cartographic transformations between geographic (lat/lon)
@@ -45,7 +44,7 @@ Optimized for numpy arrays.""",
   author            = "Jeff Whitaker",
   author_email      = "jeffrey.s.whitaker at noaa.gov",
   platforms         = ["any"],
-  license           = ["OSI Approved"],
+  license           = "OSI Approved",
   keywords          = ["python","map projections","GIS","mapping","maps"],
   classifiers       = ["Development Status :: 4 - Beta",
                        "Intended Audience :: Science/Research", 
diff --git a/setupegg.py b/setupegg.py
deleted file mode 100644
index c40639c..0000000
--- a/setupegg.py
+++ /dev/null
@@ -1,6 +0,0 @@
-"""
-Poor man's setuptools script...
-"""
-
-from setuptools import setup
-execfile('setup.py')
diff --git a/src/PJ_aea.c b/src/PJ_aea.c
index c379936..53f03b0 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 <projects.h>
 
-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 dea9edf..6ff2871 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	<projects.h>
 
-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 2de02ee..abb4d12 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 <projects.h>
 
-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 a49b30b..1e39b2f 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 <projects.h>
 
-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 5cb7425..471e726 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 81a5bf9..4b1e786 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 4539c66..38fa9db 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 97e4f3a..f5b7883 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 c17a713..65f2112 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 2b5c810..f90267d 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 533fb63..c69a6ba 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 eda95b0..01a0f03 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 dee05a9..b84b3f8 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 db9dd7e..53f2f27 100644
--- a/src/PJ_geos.c
+++ b/src/PJ_geos.c
@@ -2,9 +2,10 @@
 ** libproj -- library of cartographic projections
 **
 ** Copyright (c) 2004   Gerald I. Evenden
+** Copyright (c) 2012   Martin Raspaud
 */
 static const char
-LIBPROJ_ID[] = "$Id: PJ_geos.c 1504 2009-01-06 02:11:57Z warmerdam $";
+LIBPROJ_ID[] = "$Id: PJ_geos.c 2176 2012-02-27 07:56:32Z warmerdam $";
 /*
 ** See also (section 4.4.3.2):
 **   http://www.eumetsat.int/en/area4/msg/news/us_doc/cgms_03_26.pdf
@@ -35,7 +36,9 @@ LIBPROJ_ID[] = "$Id: PJ_geos.c 1504 2009-01-06 02:11:57Z warmerdam $";
 	double  radius_p_inv2; \
 	double  radius_g; \
 	double  radius_g_1; \
-	double  C;
+	double  C; \
+        char *  sweep_axis; \
+        int     flip_axis;
 #define PJ_LIB__
 #include	<projects.h>
 
@@ -54,8 +57,16 @@ FORWARD(s_forward); /* spheroid */
 	if (((P->radius_g - Vx) * Vx - Vy * Vy - Vz * Vz) < 0.) F_ERROR;
 /* Calculation based on view angles from satellite.*/
 	tmp = P->radius_g - Vx;
-	xy.x = P->radius_g_1 * atan(Vy / tmp);
-	xy.y = P->radius_g_1 * atan(Vz / hypot(Vy, tmp));
+        if(P->flip_axis)
+          {
+            xy.x = P->radius_g_1 * atan(Vy / hypot(Vz, tmp));
+            xy.y = P->radius_g_1 * atan(Vz / tmp);
+          }
+        else
+          {
+            xy.x = P->radius_g_1 * atan(Vy / tmp);
+            xy.y = P->radius_g_1 * atan(Vz / hypot(Vy, tmp));
+          }
 	return (xy);
 }
 FORWARD(e_forward); /* ellipsoid */
@@ -74,17 +85,33 @@ FORWARD(e_forward); /* ellipsoid */
 		F_ERROR;
 /* Calculation based on view angles from satellite. */
 	tmp = P->radius_g - Vx;
-	xy.x = P->radius_g_1 * atan (Vy / tmp);
-	xy.y = P->radius_g_1 * atan (Vz / hypot (Vy, tmp));
+        if(P->flip_axis)
+          {
+            xy.x = P->radius_g_1 * atan (Vy / hypot (Vz, tmp));
+            xy.y = P->radius_g_1 * atan (Vz / tmp);
+          }
+        else
+          {
+            xy.x = P->radius_g_1 * atan (Vy / tmp);
+            xy.y = P->radius_g_1 * atan (Vz / hypot (Vy, tmp));
+          }
 	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;
-	Vy = tan (xy.x / (P->radius_g - 1.0));
-	Vz = tan (xy.y / (P->radius_g - 1.0)) * sqrt (1.0 + Vy * Vy);
+	if(P->flip_axis)
+          {
+            Vz = tan (xy.y / (P->radius_g - 1.0));
+            Vy = tan (xy.x / (P->radius_g - 1.0)) * sqrt (1.0 + Vz * Vz);
+          }
+        else
+          {
+            Vy = tan (xy.x / (P->radius_g - 1.0));
+            Vz = tan (xy.y / (P->radius_g - 1.0)) * sqrt (1.0 + Vy * Vy);
+          }
 /* Calculation of terms in cubic equation and determinant.*/
 	a   = Vy * Vy + Vz * Vz + Vx * Vx;
 	b   = 2 * P->radius_g * Vx;
@@ -100,12 +127,20 @@ 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;
-	Vy = tan (xy.x / P->radius_g_1);
-	Vz = tan (xy.y / P->radius_g_1) * hypot(1.0, Vy);
+        if(P->flip_axis)
+          {
+            Vz = tan (xy.y / P->radius_g_1);
+            Vy = tan (xy.x / P->radius_g_1) * hypot(1.0, Vz);
+          }
+        else
+          {
+            Vy = tan (xy.x / P->radius_g_1);
+            Vz = tan (xy.y / P->radius_g_1) * hypot(1.0, Vy);
+          }
 /* Calculation of terms in cubic equation and determinant.*/
 	a = Vz / P->radius_p;
 	a   = Vy * Vy + a * a + Vx * Vx;
@@ -124,9 +159,24 @@ 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->sweep_axis = pj_param(P->ctx, P->params, "ssweep").s;
+        if (P->sweep_axis == NULL)
+          P->flip_axis = 0;
+        else
+          {
+            if (P->sweep_axis[1] != '\0' ||
+                (P->sweep_axis[0] != 'x' &&
+                 P->sweep_axis[0] != 'y'))
+              E_ERROR(-49);
+            if (P->sweep_axis[0] == 'y')
+              P->flip_axis = 1;
+            else
+              P->flip_axis = 0;
+          }
+        P->radius_g_1 = P->h / P->a;
+	P->radius_g = 1. + P->radius_g_1;
 	P->C  = P->radius_g * P->radius_g - 1.0;
 	if (P->es) {
 		P->radius_p      = sqrt (P->one_es);
diff --git a/src/PJ_gn_sinu.c b/src/PJ_gn_sinu.c
index 3bf9854..bfd8bc2 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 ed8ded8..387557e 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 23b86ee..bffe0b2 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 d5ccbe1..fb5f3de 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 0000000..30f3a5a
--- /dev/null
+++ b/src/PJ_healpix.c
@@ -0,0 +1,703 @@
+/******************************************************************************
+ * $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 at landcareresearch.co.nz
+ *
+ ******************************************************************************
+ * Copyright (c) 2001, Thomas Flemming, tf at 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	<projects.h>
+PROJ_HEAD(healpix, "HEALPix") "\n\tSph., Ellps.";
+PROJ_HEAD(rhealpix, "rHEALPix") "\n\tSph., Ellps.\n\tnpole= spole=";
+# include	<stdio.h>
+# 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<br>
+ * 1 - Counter-clockwise rotation by PI/2<br>
+ * 2 - Counter-clockwise rotation by PI<br>
+ * 3 - Counter-clockwise rotation by 3*PI/2<br>
+ * 4 - Counter-clockwise rotation by 3*PI/2<br>
+ * 5 - Counter-clockwise rotation by PI<br>
+ * 6 - Counter-clockwise rotation by PI/2<br>
+ **/
+# 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;
+}
+/**
+ * Returns the index of the 2d array in rot.
+ * @param index range from -3 to 3.
+ * @return the index into the rot 3d array.
+ */
+static int get_rotate_index(int index){
+    switch(index){
+	case 0:
+	    return 0;
+	case 1:
+	    return 1;
+	case 2: 
+	    return 2;
+	case 3: 
+	    return 3;
+	case -1:
+	    return 4;
+	case -2:
+	    return 5;
+	case -3:
+	    return 6;
+    }
+    return 0;
+}
+/**
+ * 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.
+ **/
+static
+int pnpoly(int nvert, double vert[][2], 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[][2] = {
+	    {-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((int)sizeof(healpixVertsJit)/sizeof(healpixVertsJit[0]),
+                  healpixVertsJit,x,y);
+    }else{
+	// Used for calculating if a point is within the rHEALPix projection for sphere.
+	double rhealpixVertsJit[][2] = {
+	    {-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((int)sizeof(rhealpixVertsJit)/sizeof(rhealpixVertsJit[0]),
+                  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[j];
+	}
+    }
+}
+/**
+ * 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 = R*(-3.0*PI/4.0 + npole*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 = R*(-3.0*PI/4.0 + spole*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 = (npole + 1) % 4;
+	    }else if(y > -1*x -1*R*PI/4.0 + eps && y >= x + R*5.0*PI/4.0 - eps){
+		capmap.cn = (npole + 2) % 4;
+	    }else if(y <= -1*x -1*R*PI/4.0 + eps && y > x + R*5.0*PI/4.0 + eps){
+		capmap.cn = (npole + 3) % 4;
+	    }else{
+		capmap.cn = npole;
+	    }
+	}else if(capmap.region == south){
+	    if(y <= x + R*PI/4.0 + eps && y > -1*x - R*5.0*PI/4 + eps){
+		capmap.cn = (spole + 1) % 4;
+	    }else if(y < x + R*PI/4.0 - eps && y <= -1*x - R*5.0*PI/4.0 + eps){
+		capmap.cn = (spole + 2) % 4;
+	    }else if(y >= x + R*PI/4.0 - eps && y < -1*x - R*5.0*PI/4.0 - eps){
+		capmap.cn = (spole + 3) % 4;
+	    }else {
+		capmap.cn = spole;
+	    }
+	}
+	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;
+	    a[0] = R * (-3.0*PI/4.0 + pole * PI/2);
+	    a[1] = R * (PI/2.0 + pole * 0);
+
+	    tmpRot = rot[get_rotate_index(capmap.cn - pole)];
+	    vector_sub(v,c,v_min_c);	
+	    dot_product(tmpRot,v_min_c,ret_dot);
+	    vector_add(ret_dot, a, vector);
+
+	}else {
+	    pole = spole;
+	    a[0] = R * (-3.0*PI/4.0 + pole * PI/2);
+	    a[1] = R * (PI/-2.0 + pole * 0);
+
+	    tmpRot = rot[get_rotate_index(-1*(capmap.cn - pole))];
+	    vector_sub(v,c,v_min_c);	
+	    dot_product(tmpRot,v_min_c,ret_dot);
+
+	    vector_add(ret_dot, a, vector);
+	}
+
+	xy.x = vector[0];
+	xy.y = vector[1];
+	return xy;
+    }else{
+	// compute inverse function.
+	// get the current position of rHEALPix polar squares
+	int cn;
+	int pole = 0;
+	double (*tmpRot)[2];
+	double c[2] = {capmap.x,capmap.y};
+	// disassemble
+	if(capmap.region == north){
+	    pole = npole;
+	    a[0] = R * (-3.0*PI/4.0 + capmap.cn * PI/2);
+	    a[1] = R * (PI/2.0 + capmap.cn * 0);
+
+	    tmpRot = rot[get_rotate_index(-1*(capmap.cn - pole))];
+	    vector_sub(v,c,v_min_c);	
+	    dot_product(tmpRot,v_min_c,ret_dot);
+	    vector_add(ret_dot, a, vector);
+
+	}else{
+	    pole = spole;
+	    a[0] = R * (-3.0*PI/4.0 + capmap.cn * PI/2);
+	    a[1] = R * (PI/-2.0 + capmap.cn * 0);
+
+	    tmpRot = rot[get_rotate_index(capmap.cn - pole)];
+	    vector_sub(v,c,v_min_c);	
+	    dot_product(tmpRot,v_min_c,ret_dot);
+	    vector_add(ret_dot, a, 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, x, y;
+    P->a = P->ra;
+
+    // Scale down to radius 1 sphere before checking x,y
+    x = scale_number(xy.x,P->a,1);
+    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 0000000..4155c85
--- /dev/null
+++ b/src/PJ_igh.c
@@ -0,0 +1,190 @@
+#define PROJ_PARMS__ \
+        struct PJconsts* pj[12]; \
+        double dy0;
+#define PJ_LIB__
+#include	<projects.h>
+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 135b3da..ae41111 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_isea.c b/src/PJ_isea.c
new file mode 100644
index 0000000..fb38aff
--- /dev/null
+++ b/src/PJ_isea.c
@@ -0,0 +1,1134 @@
+/*
+ * This code was entirely written by Nathan Wagner
+ * and is in the public domain.
+ */
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <float.h>
+
+#ifndef M_PI
+#  define M_PI 3.14159265358979323846
+#endif
+
+/*
+ * Proj 4 provides its own entry points into
+ * the code, so none of the library functions
+ * need to be global
+ */
+#define ISEA_STATIC static
+#ifndef ISEA_STATIC
+#define ISEA_STATIC
+#endif
+
+struct hex {
+        int iso;
+        int x, y, z;
+};
+
+/* y *must* be positive down as the xy /iso conversion assumes this */
+ISEA_STATIC
+int hex_xy(struct hex *h) {
+	if (!h->iso) return 1;
+	if (h->x >= 0) {
+		h->y = -h->y - (h->x+1)/2;
+	} else {
+		/* need to round toward -inf, not toward zero, so x-1 */
+		h->y = -h->y - h->x/2;
+	}
+	h->iso = 0;
+
+	return 1;
+}
+
+ISEA_STATIC
+int hex_iso(struct hex *h) {
+	if (h->iso) return 1;
+
+	if (h->x >= 0) {
+		h->y = (-h->y - (h->x+1)/2);
+	} else {
+		/* need to round toward -inf, not toward zero, so x-1 */
+		h->y = (-h->y - (h->x)/2);
+	}
+
+	h->z = -h->x - h->y;
+	h->iso = 1;
+	return 1;
+}
+
+ISEA_STATIC
+int hexbin2(int horizontal, double width, double x, double y,
+                int *i, int *j) {
+	double z, rx, ry, rz;
+	double abs_dx, abs_dy, abs_dz;
+	int ix, iy, iz, s;
+	struct hex h;
+
+	x = x / cos(30 * M_PI / 180.0); /* rotated X coord */
+	y = y - x / 2.0; /* adjustment for rotated X */
+
+	/* adjust for actual hexwidth */
+	x /= width;
+	y /= width;
+
+	z = -x - y;
+
+	ix = rx = floor(x + 0.5);
+	iy = ry = floor(y + 0.5);
+	iz = rz = floor(z + 0.5);
+
+	s = ix + iy + iz;
+
+	if (s) {
+		abs_dx = fabs(rx - x);
+		abs_dy = fabs(ry - y);
+		abs_dz = fabs(rz - z);
+
+		if (abs_dx >= abs_dy && abs_dx >= abs_dz) {
+			ix -= s;
+		} else if (abs_dy >= abs_dx && abs_dy >= abs_dz) {
+			iy -= s;
+		} else {
+			iz -= s;
+		}
+	}
+	h.x = ix;
+	h.y = iy;
+	h.z = iz;
+	h.iso = 1;
+
+	hex_xy(&h);
+	*i = h.x;
+	*j = h.y;
+        return ix * 100 + iy;
+}
+#ifndef ISEA_STATIC
+#define ISEA_STATIC
+#endif
+
+enum isea_poly { ISEA_NONE, ISEA_ICOSAHEDRON = 20 };
+enum isea_topology { ISEA_HEXAGON=6, ISEA_TRIANGLE=3, ISEA_DIAMOND=4 };
+enum isea_address_form { ISEA_GEO, ISEA_Q2DI, ISEA_SEQNUM, ISEA_INTERLEAVE,
+	ISEA_PLANE, ISEA_Q2DD, ISEA_PROJTRI, ISEA_VERTEX2DD, ISEA_HEX
+};
+
+struct isea_dgg {
+	int	polyhedron; /* ignored, icosahedron */
+	double	o_lat, o_lon, o_az; /* orientation, radians */
+	int	pole; /* true if standard snyder */
+	int	topology; /* ignored, hexagon */
+	int	aperture; /* valid values depend on partitioning method */
+	int	resolution;
+	double	radius; /* radius of the earth in meters, ignored 1.0 */
+	int	output; /* an isea_address_form */
+	int	triangle; /* triangle of last transformed point */
+	int	quad; /* quad of last transformed point */
+	unsigned long serial;
+};
+
+struct isea_pt {
+	double x, y;
+};
+
+struct isea_geo {
+	double lon, lat;
+};
+
+struct isea_address {
+	int	type; /* enum isea_address_form */
+	int	number;
+	double	x,y; /* or i,j or lon,lat depending on type */
+};
+
+/* ENDINC */
+
+enum snyder_polyhedron {
+	SNYDER_POLY_HEXAGON, SNYDER_POLY_PENTAGON,
+	SNYDER_POLY_TETRAHEDRON, SNYDER_POLY_CUBE,
+	SNYDER_POLY_OCTAHEDRON, SNYDER_POLY_DODECAHEDRON,
+	SNYDER_POLY_ICOSAHEDRON
+};
+
+struct snyder_constants {
+	double          g, G, theta, ea_w, ea_a, ea_b, g_w, g_a, g_b;
+};
+
+/* TODO put these in radians to avoid a later conversion */
+ISEA_STATIC
+struct snyder_constants constants[] = {
+	{23.80018260, 62.15458023, 60.0, 3.75, 1.033, 0.968, 5.09, 1.195, 1.0},
+	{20.07675127, 55.69063953, 54.0, 2.65, 1.030, 0.983, 3.59, 1.141, 1.027},
+	{0.0},
+	{0.0},
+	{0.0},
+	{0.0},
+	{37.37736814, 36.0, 30.0, 17.27, 1.163, 0.860, 13.14, 1.584, 1.0},
+};
+
+#define E 52.62263186
+#define F 10.81231696
+
+#define DEG60 1.04719755119659774614
+#define DEG120 2.09439510239319549229
+#define DEG72 1.25663706143591729537
+#define DEG90 1.57079632679489661922
+#define DEG144 2.51327412287183459075
+#define DEG36 0.62831853071795864768
+#define DEG108 1.88495559215387594306
+#define DEG180 M_PI
+/* sqrt(5)/M_PI */
+#define ISEA_SCALE 0.8301572857837594396028083
+
+/* 26.565051177 degrees */
+#define V_LAT 0.46364760899944494524
+
+#define RAD2DEG (180.0/M_PI)
+#define DEG2RAD (M_PI/180.0)
+
+ISEA_STATIC
+struct isea_geo vertex[] = {
+	{0.0, DEG90},
+	{DEG180, V_LAT},
+	{-DEG108, V_LAT},
+	{-DEG36, V_LAT},
+	{DEG36, V_LAT},
+	{DEG108, V_LAT},
+	{-DEG144, -V_LAT},
+	{-DEG72, -V_LAT},
+	{0.0, -V_LAT},
+	{DEG72, -V_LAT},
+	{DEG144, -V_LAT},
+	{0.0, -DEG90}
+};
+
+/* TODO make an isea_pt array of the vertices as well */
+
+static int      tri_v1[] = {0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 2, 3, 4, 5, 1, 11, 11, 11, 11, 11};
+
+/* 52.62263186 */
+#define E_RAD 0.91843818702186776133
+
+/* 10.81231696 */
+#define F_RAD 0.18871053072122403508
+
+/* triangle Centers */
+struct isea_geo icostriangles[] = {
+	{0.0, 0.0},
+	{-DEG144, E_RAD},
+	{-DEG72, E_RAD},
+	{0.0, E_RAD},
+	{DEG72, E_RAD},
+	{DEG144, E_RAD},
+	{-DEG144, F_RAD},
+	{-DEG72, F_RAD},
+	{0.0, F_RAD},
+	{DEG72, F_RAD},
+	{DEG144, F_RAD},
+	{-DEG108, -F_RAD},
+	{-DEG36, -F_RAD},
+	{DEG36, -F_RAD},
+	{DEG108, -F_RAD},
+	{DEG180, -F_RAD},
+	{-DEG108, -E_RAD},
+	{-DEG36, -E_RAD},
+	{DEG36, -E_RAD},
+	{DEG108, -E_RAD},
+	{DEG180, -E_RAD},
+};
+
+static double
+az_adjustment(int triangle)
+{
+	double          adj;
+
+	struct isea_geo v;
+	struct isea_geo c;
+
+	v = vertex[tri_v1[triangle]];
+	c = icostriangles[triangle];
+
+	/* TODO looks like the adjustment is always either 0 or 180 */
+	/* at least if you pick your vertex carefully */
+	adj = atan2(cos(v.lat) * sin(v.lon - c.lon),
+		    cos(c.lat) * sin(v.lat)
+		    - sin(c.lat) * cos(v.lat) * cos(v.lon - c.lon));
+	return adj;
+}
+
+/* R tan(g) sin(60) */
+#define TABLE_G 0.6615845383
+
+/* H = 0.25 R tan g = */
+#define TABLE_H 0.1909830056
+
+#define RPRIME 0.91038328153090290025
+
+ISEA_STATIC
+struct isea_pt
+isea_triangle_xy(int triangle)
+{
+	struct isea_pt  c;
+	double Rprime = 0.91038328153090290025;
+
+	triangle = (triangle - 1) % 20;
+
+	c.x = TABLE_G * ((triangle % 5) - 2) * 2.0;
+	if (triangle > 9) {
+		c.x += TABLE_G;
+	}
+	switch (triangle / 5) {
+	case 0:
+		c.y = 5.0 * TABLE_H;
+		break;
+	case 1:
+		c.y = TABLE_H;
+		break;
+	case 2:
+		c.y = -TABLE_H;
+		break;
+	case 3:
+		c.y = -5.0 * TABLE_H;
+		break;
+	default:
+		/* should be impossible */
+		exit(EXIT_FAILURE);
+	};
+	c.x *= Rprime;
+	c.y *= Rprime;
+
+	return c;
+}
+
+/* snyder eq 14 */
+static double
+sph_azimuth(double f_lon, double f_lat, double t_lon, double t_lat)
+{
+	double          az;
+
+	az = atan2(cos(t_lat) * sin(t_lon - f_lon),
+		   cos(f_lat) * sin(t_lat)
+		   - sin(f_lat) * cos(t_lat) * cos(t_lon - f_lon)
+		);
+	return az;
+}
+
+/* coord needs to be in radians */
+ISEA_STATIC
+int
+isea_snyder_forward(struct isea_geo * ll, struct isea_pt * out)
+{
+	int             i;
+
+	/*
+	 * spherical distance from center of polygon face to any of its
+	 * vertexes on the globe
+	 */
+	double          g;
+
+	/*
+	 * spherical angle between radius vector to center and adjacent edge
+	 * of spherical polygon on the globe
+	 */
+	double          G;
+
+	/*
+	 * plane angle between radius vector to center and adjacent edge of
+	 * plane polygon
+	 */
+	double          theta;
+
+	/* additional variables from snyder */
+	double          q, Rprime, H, Ag, Azprime, Az, dprime, f, rho,
+	                x, y;
+
+	/* variables used to store intermediate results */
+	double          cot_theta, tan_g, az_offset;
+
+	/* how many multiples of 60 degrees we adjust the azimuth */
+	int             Az_adjust_multiples;
+
+	struct snyder_constants c;
+
+	/*
+	 * TODO by locality of reference, start by trying the same triangle
+	 * as last time
+	 */
+
+	/* TODO put these constants in as radians to begin with */
+	c = constants[SNYDER_POLY_ICOSAHEDRON];
+	theta = c.theta * DEG2RAD;
+	g = c.g * DEG2RAD;
+	G = c.G * DEG2RAD;
+
+	for (i = 1; i <= 20; i++) {
+		double          z;
+		struct isea_geo center;
+
+		center = icostriangles[i];
+
+		/* step 1 */
+#if 0
+		z = sph_distance(center.lon, center.lat, ll->lon, ll->lat);
+#else
+		z = acos(sin(center.lat) * sin(ll->lat)
+			 + cos(center.lat) * cos(ll->lat) * cos(ll->lon - center.lon));
+#endif
+
+		/* not on this triangle */
+		if (z > g + 0.000005) { /* TODO DBL_EPSILON */
+			continue;
+		}
+		Az = sph_azimuth(ll->lon, ll->lat, center.lon, center.lat);
+
+		Az = atan2(cos(ll->lat) * sin(ll->lon - center.lon),
+			   cos(center.lat) * sin(ll->lat)
+		- sin(center.lat) * cos(ll->lat) * cos(ll->lon - center.lon)
+			);
+
+		/* step 2 */
+
+		/* This calculates "some" vertex coordinate */
+		az_offset = az_adjustment(i);
+
+		Az -= az_offset;
+
+		/* TODO I don't know why we do this.  It's not in snyder */
+		/* maybe because we should have picked a better vertex */
+		if (Az < 0.0) {
+			Az += 2.0 * M_PI;
+		}
+		/*
+		 * adjust Az for the point to fall within the range of 0 to
+		 * 2(90 - theta) or 60 degrees for the hexagon, by
+		 * and therefore 120 degrees for the triangle
+		 * of the icosahedron
+		 * subtracting or adding multiples of 60 degrees to Az and
+		 * recording the amount of adjustment
+		 */
+
+		Az_adjust_multiples = 0;
+		while (Az < 0.0) {
+			Az += DEG120;
+			Az_adjust_multiples--;
+		}
+		while (Az > DEG120 + DBL_EPSILON) {
+			Az -= DEG120;
+			Az_adjust_multiples++;
+		}
+
+		/* step 3 */
+		cot_theta = 1.0 / tan(theta);
+		tan_g = tan(g);	/* TODO this is a constant */
+
+		/* Calculate q from eq 9. */
+		/* TODO cot_theta is cot(30) */
+		q = atan2(tan_g, cos(Az) + sin(Az) * cot_theta);
+
+		/* not in this triangle */
+		if (z > q + 0.000005) {
+			continue;
+		}
+		/* step 4 */
+
+		/* Apply equations 5-8 and 10-12 in order */
+
+		/* eq 5 */
+		/* Rprime = 0.9449322893 * R; */
+		/* R' in the paper is for the truncated */
+		Rprime = 0.91038328153090290025;
+
+		/* eq 6 */
+		H = acos(sin(Az) * sin(G) * cos(g) - cos(Az) * cos(G));
+
+		/* eq 7 */
+		/* Ag = (Az + G + H - DEG180) * M_PI * R * R / DEG180; */
+		Ag = Az + G + H - DEG180;
+
+		/* eq 8 */
+		Azprime = atan2(2.0 * Ag, Rprime * Rprime * tan_g * tan_g - 2.0 * Ag * cot_theta);
+
+		/* eq 10 */
+		/* cot(theta) = 1.73205080756887729355 */
+		dprime = Rprime * tan_g / (cos(Azprime) + sin(Azprime) * cot_theta);
+
+		/* eq 11 */
+		f = dprime / (2.0 * Rprime * sin(q / 2.0));
+
+		/* eq 12 */
+		rho = 2.0 * Rprime * f * sin(z / 2.0);
+
+		/*
+		 * add back the same 60 degree multiple adjustment from step
+		 * 2 to Azprime
+		 */
+
+		Azprime += DEG120 * Az_adjust_multiples;
+
+		/* calculate rectangular coordinates */
+
+		x = rho * sin(Azprime);
+		y = rho * cos(Azprime);
+
+		/*
+		 * TODO
+		 * translate coordinates to the origin for the particular
+		 * hexagon on the flattened polyhedral map plot
+		 */
+
+		out->x = x;
+		out->y = y;
+
+		return i;
+	}
+
+	/*
+	 * should be impossible, this implies that the coordinate is not on
+	 * any triangle
+	 */
+
+	fprintf(stderr, "impossible transform: %f %f is not on any triangle\n",
+		ll->lon * RAD2DEG, ll->lat * RAD2DEG);
+
+	exit(EXIT_FAILURE);
+
+	/* not reached */
+	return 0;		/* supresses a warning */
+}
+
+/*
+ * return the new coordinates of any point in orginal coordinate system.
+ * Define a point (newNPold) in orginal coordinate system as the North Pole in
+ * new coordinate system, and the great circle connect the original and new
+ * North Pole as the lon0 longitude in new coordinate system, given any point
+ * in orginal coordinate system, this function return the new coordinates.
+ */
+
+#define PRECISION 0.0000000000005
+
+/* formula from Snyder, Map Projections: A working manual, p31 */
+/*
+ * old north pole at np in new coordinates
+ * could be simplified a bit with fewer intermediates
+ *
+ * TODO take a result pointer
+ */
+ISEA_STATIC
+struct isea_geo
+snyder_ctran(struct isea_geo * np, struct isea_geo * pt)
+{
+	struct isea_geo npt;
+	double          alpha, phi, lambda, lambda0, beta, lambdap, phip;
+	double          sin_phip;
+	double          lp_b;	/* lambda prime minus beta */
+	double          cos_p, sin_a;
+
+	phi = pt->lat;
+	lambda = pt->lon;
+	alpha = np->lat;
+	beta = np->lon;
+	lambda0 = beta;
+
+	cos_p = cos(phi);
+	sin_a = sin(alpha);
+
+	/* mpawm 5-7 */
+	sin_phip = sin_a * sin(phi) - cos(alpha) * cos_p * cos(lambda - lambda0);
+
+	/* mpawm 5-8b */
+
+	/* use the two argument form so we end up in the right quadrant */
+	lp_b = atan2(cos_p * sin(lambda - lambda0),
+	   (sin_a * cos_p * cos(lambda - lambda0) + cos(alpha) * sin(phi)));
+
+	lambdap = lp_b + beta;
+
+	/* normalize longitude */
+	/* TODO can we just do a modulus ? */
+	lambdap = fmod(lambdap, 2 * M_PI);
+	while (lambdap > M_PI)
+		lambdap -= 2 * M_PI;
+	while (lambdap < -M_PI)
+		lambdap += 2 * M_PI;
+
+	phip = asin(sin_phip);
+
+	npt.lat = phip;
+	npt.lon = lambdap;
+
+	return npt;
+}
+
+ISEA_STATIC
+struct isea_geo
+isea_ctran(struct isea_geo * np, struct isea_geo * pt, double lon0)
+{
+	struct isea_geo npt;
+
+	np->lon += M_PI;
+	npt = snyder_ctran(np, pt);
+	np->lon -= M_PI;
+
+	npt.lon -= (M_PI - lon0 + np->lon);
+
+	/*
+	 * snyder is down tri 3, isea is along side of tri1 from vertex 0 to
+	 * vertex 1 these are 180 degrees apart
+	 */
+	npt.lon += M_PI;
+	/* normalize longitude */
+	npt.lon = fmod(npt.lon, 2 * M_PI);
+	while (npt.lon > M_PI)
+		npt.lon -= 2 * M_PI;
+	while (npt.lon < -M_PI)
+		npt.lon += 2 * M_PI;
+
+	return npt;
+}
+
+/* in radians */
+#define ISEA_STD_LAT 1.01722196792335072101
+#define ISEA_STD_LON .19634954084936207740
+
+/* fuller's at 5.2454 west, 2.3009 N, adjacent at 7.46658 deg */
+
+ISEA_STATIC
+int
+isea_grid_init(struct isea_dgg * g)
+{
+	if (!g)
+		return 0;
+
+	g->polyhedron = 20;
+	g->o_lat = ISEA_STD_LAT;
+	g->o_lon = ISEA_STD_LON;
+	g->o_az = 0.0;
+	g->aperture = 4;
+	g->resolution = 6;
+	g->radius = 1.0;
+	g->topology = 6;
+
+	return 1;
+}
+
+ISEA_STATIC
+int
+isea_orient_isea(struct isea_dgg * g)
+{
+	if (!g)
+		return 0;
+	g->o_lat = ISEA_STD_LAT;
+	g->o_lon = ISEA_STD_LON;
+	g->o_az = 0.0;
+	return 1;
+}
+
+ISEA_STATIC
+int
+isea_orient_pole(struct isea_dgg * g)
+{
+	if (!g)
+		return 0;
+	g->o_lat = M_PI / 2.0;
+	g->o_lon = 0.0;
+	g->o_az = 0;
+	return 1;
+}
+
+ISEA_STATIC
+int
+isea_transform(struct isea_dgg * g, struct isea_geo * in,
+	       struct isea_pt * out)
+{
+	struct isea_geo i, pole;
+	int             tri;
+
+	pole.lat = g->o_lat;
+	pole.lon = g->o_lon;
+
+	i = isea_ctran(&pole, in, g->o_az);
+
+	tri = isea_snyder_forward(&i, out);
+	out->x *= g->radius;
+	out->y *= g->radius;
+	g->triangle = tri;
+
+	return tri;
+}
+
+#define DOWNTRI(tri) (((tri - 1) / 5) % 2 == 1)
+
+ISEA_STATIC
+void
+isea_rotate(struct isea_pt * pt, double degrees)
+{
+	double          rad;
+
+	double          x, y;
+
+	rad = -degrees * M_PI / 180.0;
+	while (rad >= 2.0 * M_PI) rad -= 2.0 * M_PI;
+	while (rad <= -2.0 * M_PI) rad += 2.0 * M_PI;
+
+	x = pt->x * cos(rad) + pt->y * sin(rad);
+	y = -pt->x * sin(rad) + pt->y * cos(rad);
+
+	pt->x = x;
+	pt->y = y;
+}
+
+ISEA_STATIC
+int isea_tri_plane(int tri, struct isea_pt *pt, double radius) {
+	struct isea_pt tc; /* center of triangle */
+
+	if (DOWNTRI(tri)) {
+		isea_rotate(pt, 180.0);
+	}
+	tc = isea_triangle_xy(tri);
+	tc.x *= radius;
+	tc.y *= radius;
+	pt->x += tc.x;
+	pt->y += tc.y;
+
+	return tri;
+}
+
+/* convert projected triangle coords to quad xy coords, return quad number */
+ISEA_STATIC
+int
+isea_ptdd(int tri, struct isea_pt *pt) {
+	int             downtri, quad;
+
+	downtri = (((tri - 1) / 5) % 2 == 1);
+	quad = ((tri - 1) % 5) + ((tri - 1) / 10) * 5 + 1;
+
+	isea_rotate(pt, downtri ? 240.0 : 60.0);
+	if (downtri) {
+		pt->x += 0.5;
+		/* pt->y += cos(30.0 * M_PI / 180.0); */
+		pt->y += .86602540378443864672;
+	}
+	return quad;
+}
+
+ISEA_STATIC
+int
+isea_dddi_ap3odd(struct isea_dgg *g, int quad, struct isea_pt *pt, struct isea_pt *di)
+{
+	struct isea_pt  v;
+	double          hexwidth;
+	double          sidelength;	/* in hexes */
+	int             d, i;
+	int             maxcoord;
+	struct hex      h;
+
+	/* This is the number of hexes from apex to base of a triangle */
+	sidelength = (pow(2.0, g->resolution) + 1.0) / 2.0;
+
+	/* apex to base is cos(30deg) */
+	hexwidth = cos(M_PI / 6.0) / sidelength;
+
+	/* TODO I think sidelength is always x.5, so
+	 * (int)sidelength * 2 + 1 might be just as good
+	 */
+	maxcoord = (int) (sidelength * 2.0 + 0.5);
+
+	v = *pt;
+	hexbin2(0, hexwidth, v.x, v.y, &h.x, &h.y);
+	h.iso = 0;
+	hex_iso(&h);
+
+	d = h.x - h.z;
+	i = h.x + h.y + h.y;
+	
+	/*
+	 * you want to test for max coords for the next quad in the same
+	 * "row" first to get the case where both are max
+	 */
+	if (quad <= 5) {
+		if (d == 0 && i == maxcoord) {
+			/* north pole */
+			quad = 0;
+			d = 0;
+			i = 0;
+		} else if (i == maxcoord) {
+			/* upper right in next quad */
+			quad += 1;
+			if (quad == 6)
+				quad = 1;
+			i = maxcoord - d;
+			d = 0;
+		} else if (d == maxcoord) {
+			/* lower right in quad to lower right */
+			quad += 5;
+			d = 0;
+		}
+	} else if (quad >= 6) {
+		if (i == 0 && d == maxcoord) {
+			/* south pole */
+			quad = 11;
+			d = 0;
+			i = 0;
+		} else if (d == maxcoord) {
+			/* lower right in next quad */
+			quad += 1;
+			if (quad == 11)
+				quad = 6;
+			d = maxcoord - i;
+			i = 0;
+		} else if (i == maxcoord) {
+			/* upper right in quad to upper right */
+			quad = (quad - 4) % 5;
+			i = 0;
+		}
+	}
+
+	di->x = d;
+	di->y = i;
+
+	g->quad = quad;
+	return quad;
+}
+
+ISEA_STATIC
+int
+isea_dddi(struct isea_dgg *g, int quad, struct isea_pt *pt, struct isea_pt *di) {
+	struct isea_pt  v;
+	double          hexwidth;
+	int             sidelength;	/* in hexes */
+	struct hex      h;
+
+	if (g->aperture == 3 && g->resolution % 2 != 0) {
+		return isea_dddi_ap3odd(g, quad, pt, di);
+	}
+	/* todo might want to do this as an iterated loop */
+	if (g->aperture >0) {
+		sidelength = (int) (pow(g->aperture, g->resolution / 2.0) + 0.5);
+	} else {
+		sidelength = g->resolution;
+	}
+
+	hexwidth = 1.0 / sidelength;
+
+	v = *pt;
+	isea_rotate(&v, -30.0);
+	hexbin2(0, hexwidth, v.x, v.y, &h.x, &h.y);
+	h.iso = 0;
+	hex_iso(&h);
+
+	/* we may actually be on another quad */
+	if (quad <= 5) {
+		if (h.x == 0 && h.z == -sidelength) {
+			/* north pole */
+			quad = 0;
+			h.z = 0;
+			h.y = 0;
+			h.x = 0;
+		} else if (h.z == -sidelength) {
+			quad = quad + 1;
+			if (quad == 6)
+				quad = 1;
+			h.y = sidelength - h.x;
+			h.z = h.x - sidelength;
+			h.x = 0;
+		} else if (h.x == sidelength) {
+			quad += 5;
+			h.y = -h.z;
+			h.x = 0;
+		}
+	} else if (quad >= 6) {
+		if (h.z == 0 && h.x == sidelength) {
+			/* south pole */
+			quad = 11;
+			h.x = 0;
+			h.y = 0;
+			h.z = 0;
+		} else if (h.x == sidelength) {
+			quad = quad + 1;
+			if (quad == 11)
+				quad = 6;
+			h.x = h.y + sidelength;
+			h.y = 0;
+			h.z = -h.x;
+		} else if (h.y == -sidelength) {
+			quad -= 4;
+			h.y = 0;
+			h.z = -h.x;
+		}
+	}
+	di->x = h.x;
+	di->y = -h.z;
+
+	g->quad = quad;
+	return quad;
+}
+
+ISEA_STATIC
+int isea_ptdi(struct isea_dgg *g, int tri, struct isea_pt *pt,
+	       	struct isea_pt *di) {
+	struct isea_pt  v;
+	int             quad;
+
+	v = *pt;
+	quad = isea_ptdd(tri, &v);
+	quad = isea_dddi(g, quad, &v, di);
+	return quad;
+}
+
+/* q2di to seqnum */
+ISEA_STATIC
+int isea_disn(struct isea_dgg *g, int quad, struct isea_pt *di) {
+	int             sidelength;
+	int             sn, height;
+	int             hexes;
+
+	if (quad == 0) {
+		g->serial = 1;
+		return g->serial;
+	}
+	/* hexes in a quad */
+	hexes = (int) (pow(g->aperture, g->resolution) + 0.5);
+	if (quad == 11) {
+		g->serial = 1 + 10 * hexes + 1;
+		return g->serial;
+	}
+	if (g->aperture == 3 && g->resolution % 2 == 1) {
+		height = (int) (pow(g->aperture, (g->resolution - 1) / 2.0));
+		sn = ((int) di->x) * height;
+		sn += ((int) di->y) / height;
+		sn += (quad - 1) * hexes;
+		sn += 2;
+	} else {
+		sidelength = (int) (pow(g->aperture, g->resolution / 2.0) + 0.5);
+		sn = (quad - 1) * hexes + sidelength * di->x + di->y + 2;
+	}
+
+	g->serial = sn;
+	return sn;
+}
+
+/* TODO just encode the quad in the d or i coordinate
+ * quad is 0-11, which can be four bits.
+ * d' = d << 4 + q, d = d' >> 4, q = d' & 0xf
+ */
+/* convert a q2di to global hex coord */
+ISEA_STATIC
+int isea_hex(struct isea_dgg *g, int tri,
+		struct isea_pt *pt, struct isea_pt *hex) {
+	struct isea_pt v;
+	int sidelength;
+	int d, i, x, y, quad;
+	double oddsl;
+
+	quad = isea_ptdi(g, tri, pt, &v);
+
+	hex->x = ((int)v.x << 4) + quad;
+	hex->y = v.y;
+
+	return 1;
+
+	d = v.x;
+	i = v.y;
+
+	/* Aperture 3 odd resolutions */
+	if (g->aperture == 3 && g->resolution % 2 != 0) {
+		int offset = (int)(pow(3.0, g->resolution - 1) + 0.5);
+
+		oddsl = (pow(2.0, g->resolution) + 1.0) / 2.0;
+
+		d += offset * ((g->quad-1) % 5);
+		i += offset * ((g->quad-1) % 5);
+
+		if (quad == 0) {
+			d = 0;
+			i = offset;
+		} else if (quad == 11) {
+			d = 2 * offset;
+			i = 0;
+		} else if (quad > 5) {
+			d += offset;
+		}
+
+		x = (2*d - i) /3;
+		y = (2*i - d) /3;
+
+		hex->x = x + offset / 3;
+		hex->y = y + 2 * offset / 3;
+		return 1;
+	}
+
+	/* aperture 3 even resolutions and aperture 4 */
+	sidelength = (int) (pow(g->aperture, g->resolution / 2.0) + 0.5);
+	if (g->quad == 0) {
+		hex->x = 0;
+		hex->y = sidelength;
+	} else if (g->quad == 11) {
+		hex->x = sidelength * 2;
+		hex->y = 0;
+	} else {
+		hex->x = d + sidelength * ((g->quad-1) % 5);
+		if (g->quad > 5) hex->x += sidelength;
+		hex->y = i + sidelength * ((g->quad-1) % 5);
+	}
+
+	return 1;
+}
+
+ISEA_STATIC
+struct isea_pt
+isea_forward(struct isea_dgg *g, struct isea_geo *in)
+{
+	int             tri, downtri, quad;
+	struct isea_pt  out, coord;
+
+	tri = isea_transform(g, in, &out);
+
+	downtri = (((tri - 1) / 5) % 2 == 1);
+	quad = ((tri - 1) % 5) + ((tri - 1) / 10) * 5 + 1;
+
+	if (g->output == ISEA_PLANE) {
+		isea_tri_plane(tri, &out, g->radius);
+		return out;
+	}
+
+	/* convert to isea standard triangle size */
+	out.x = out.x / g->radius * ISEA_SCALE;
+	out.y = out.y / g->radius * ISEA_SCALE;
+	out.x += 0.5;
+	out.y += 2.0 * .14433756729740644112;
+
+	switch (g->output) {
+	case ISEA_PROJTRI:
+		/* nothing to do, already in projected triangle */
+		break;
+	case ISEA_VERTEX2DD:
+		g->quad = isea_ptdd(tri, &out);
+		break;
+	case ISEA_Q2DD:
+		/* Same as above, we just don't print as much */
+		g->quad = isea_ptdd(tri, &out);
+		break;
+	case ISEA_Q2DI:
+		g->quad = isea_ptdi(g, tri, &out, &coord);
+		return coord;
+		break;
+	case ISEA_SEQNUM:
+		isea_ptdi(g, tri, &out, &coord);
+		/* disn will set g->serial */
+		isea_disn(g, g->quad, &coord);
+		return coord;
+		break;
+	case ISEA_HEX:
+		isea_hex(g, tri, &out, &coord);
+		return coord;
+		break;
+	}
+
+	return out;
+}
+/*
+ * Proj 4 integration code follows
+ */
+
+#define PROJ_PARMS__ \
+	struct isea_dgg dgg;
+
+#define PJ_LIB__
+#include <projects.h>
+
+PROJ_HEAD(isea, "Icosahedral Snyder Equal Area") "\n\tSph";
+
+FORWARD(s_forward);
+	struct isea_pt out;
+	struct isea_geo in;
+
+	in.lon = lp.lam;
+	in.lat = lp.phi;
+
+	out = isea_forward(&P->dgg, &in);
+	
+	xy.x = out.x;
+	xy.y = out.y;
+
+	return xy;
+}
+FREEUP; if (P) pj_dalloc(P); }
+
+ENTRY0(isea)
+	char *opt;
+
+        P->fwd = s_forward;
+        isea_grid_init(&P->dgg);
+
+        P->dgg.output = ISEA_PLANE;
+/*		P->dgg.radius = P->a; / * otherwise defaults to 1 */
+	/* calling library will scale, I think */
+
+	opt = pj_param(P->ctx,P->params, "sorient").s;
+	if (opt) {
+		if (!strcmp(opt, "isea")) {
+			isea_orient_isea(&P->dgg);
+		} else if (!strcmp(opt, "pole")) {
+			isea_orient_pole(&P->dgg);
+		} else {
+			E_ERROR(-34);
+		}
+	}
+
+	if (pj_param(P->ctx,P->params, "tazi").i) {
+		P->dgg.o_az = pj_param(P->ctx,P->params, "razi").f;
+	}
+
+	if (pj_param(P->ctx,P->params, "tlon_0").i) {
+		P->dgg.o_lon = pj_param(P->ctx,P->params, "rlon_0").f;
+	}
+
+	if (pj_param(P->ctx,P->params, "tlat_0").i) {
+		P->dgg.o_lat = pj_param(P->ctx,P->params, "rlat_0").f;
+	}
+
+	if (pj_param(P->ctx,P->params, "taperture").i) {
+		P->dgg.aperture = pj_param(P->ctx,P->params, "iaperture").i;
+	}
+
+	if (pj_param(P->ctx,P->params, "tresolution").i) {
+		P->dgg.resolution = pj_param(P->ctx,P->params, "iresolution").i;
+	}
+
+	opt = pj_param(P->ctx,P->params, "smode").s;
+	if (opt) {
+		if (!strcmp(opt, "plane")) {
+			P->dgg.output = ISEA_PLANE;
+		} else if (!strcmp(opt, "di")) {
+			P->dgg.output = ISEA_Q2DI;
+		}
+		else if (!strcmp(opt, "dd")) {
+			P->dgg.output = ISEA_Q2DD;
+		}
+		else if (!strcmp(opt, "hex")) {
+			P->dgg.output = ISEA_HEX;
+		}
+		else {
+			/* TODO verify error code.  Possibly eliminate magic */
+			E_ERROR(-34);
+		}
+	}
+
+	if (pj_param(P->ctx,P->params, "trescale").i) {
+		P->dgg.radius = ISEA_SCALE;
+	}
+
+	if (pj_param(P->ctx,P->params, "tresolution").i) {
+		P->dgg.resolution = pj_param(P->ctx,P->params, "iresolution").i;
+	} else {
+		P->dgg.resolution = 4;
+	}
+
+	if (pj_param(P->ctx,P->params, "taperture").i) {
+		P->dgg.aperture = pj_param(P->ctx,P->params, "iaperture").i;
+	} else {
+		P->dgg.aperture = 3;
+	}
+
+ENDENTRY(P)
diff --git a/src/PJ_krovak.c b/src/PJ_krovak.c
index 53e5099..ac21df6 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 <string.h>
 #include <stdio.h>
 
-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 70cd2f4..4cb39ec 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 d0e123a..8a13b3d 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 80a85d0..9d3494b 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 2bb101a..0e3289f 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 80c1531..595423f 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 e8edb54..d11a5c1 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 63e02ca..57a96e7 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 f8e0426..4b991c1 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 854f35e..185e95e 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 ce14cfb..98f0457 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_natearth.c b/src/PJ_natearth.c
new file mode 100644
index 0000000..f83a3ff
--- /dev/null
+++ b/src/PJ_natearth.c
@@ -0,0 +1,77 @@
+/*
+The Natural Earth projection was designed by Tom Patterson, US National Park
+Service, in 2007, using Flex Projector. The shape of the original projection
+was defined at every 5 degrees and piece-wise cubic spline interpolation was
+used to compute the complete graticule.
+The code here uses polynomial functions instead of cubic splines and
+is therefore much simpler to program. The polynomial approximation was
+developed by Bojan Savric, in collaboration with Tom Patterson and Bernhard
+Jenny, Institute of Cartography, ETH Zurich. It slightly deviates from
+Patterson's original projection by adding additional curvature to meridians
+where they meet the horizontal pole line. This improvement is by intention
+and designed in collaboration with Tom Patterson.
+Port to PROJ.4 by Bernhard Jenny, 6 June 2011
+*/
+
+#define PJ_LIB__
+#include	<projects.h>
+PROJ_HEAD(natearth, "Natural Earth") "\n\tPCyl., Sph.";
+#define A0 0.8707
+#define A1 -0.131979
+#define A2 -0.013791
+#define A3 0.003971
+#define A4 -0.001529
+#define B0 1.007226
+#define B1 0.015085
+#define B2 -0.044475
+#define B3 0.028874
+#define B4 -0.005916
+#define C0 B0
+#define C1 (3 * B1)
+#define C2 (7 * B2)
+#define C3 (9 * B3)
+#define C4 (11 * B4)
+#define EPS 1e-11
+#define MAX_Y (0.8707 * 0.52 * PI)
+
+FORWARD(s_forward); /* spheroid */
+	double phi2, phi4;
+
+	phi2 = lp.phi * lp.phi;
+	phi4 = phi2 * phi2;
+	xy.x = lp.lam * (A0 + phi2 * (A1 + phi2 * (A2 + phi4 * phi2 * (A3 + phi2 * A4))));
+	xy.y = lp.phi * (B0 + phi2 * (B1 + phi4 * (B2 + B3 * phi2 + B4 * phi4)));
+	return (xy);
+}
+INVERSE(s_inverse); /* spheroid */
+	double yc, tol, y2, y4, f, fder;
+
+        /* make sure y is inside valid range */
+	if (xy.y > MAX_Y) {
+		xy.y = MAX_Y;
+	} else if (xy.y < -MAX_Y) {
+		xy.y = -MAX_Y;
+	}
+
+        /* latitude */
+	yc = xy.y;
+        for (;;) { /* Newton-Raphson */
+		y2 = yc * yc;
+		y4 = y2 * y2;
+		f = (yc * (B0 + y2 * (B1 + y4 * (B2 + B3 * y2 + B4 * y4)))) - xy.y;
+		fder = C0 + y2 * (C1 + y4 * (C2 + C3 * y2 + C4 * y4));
+		yc -= tol = f / fder;
+		if (fabs(tol) < EPS) {
+			break;
+		}
+	}
+	lp.phi = yc;
+
+        /* longitude */
+	y2 = yc * yc;
+	lp.lam = xy.x / (A0 + y2 * (A1 + y2 * (A2 + y2 * y2 * y2 * (A3 + y2 * A4))));
+
+	return (lp);
+}
+FREEUP; if (P) pj_dalloc(P); }
+ENTRY0(natearth) P->es = 0; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
diff --git a/src/PJ_nell.c b/src/PJ_nell.c
index 5de57cb..dd41b46 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 a3ee264..0f355b9 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 460a600..34e0f6b 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 cdffd6e..8c7bd16 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 b5e42a1..b84a7ea 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 1b862db..c8888a8 100644
--- a/src/PJ_omerc.c
+++ b/src/PJ_omerc.c
@@ -1,166 +1,194 @@
+/*
+** 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	<projects.h>
+#include <projects.h>
+
 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 = 
+                    /* For libproj4 compatability */
+                    pj_param(P->ctx, P->params, "tno_off").i
+                    /* for backward compatibility */
+                    || pj_param(P->ctx, P->params, "tno_uoff").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 e846f13..33bc67a 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 35066c2..32036bb 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 28e82cf..5909dd4 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 92f93e4..71dac1e 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.4968,	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 1440327..7a7670e 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 c65635d..8c17533 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;
@@ -58,7 +58,7 @@ FORWARD(s_forward); /* spheroid */
 		rho = P->rho_c + tan(P->sig - lp.phi);
 		break;
 	case PCONIC:
-		rho = P->c2 * (P->c1 - tan(lp.phi));
+		rho = P->c2 * (P->c1 - tan(lp.phi - P->sig));
 		break;
 	default:
 		rho = P->rho_c - lp.phi;
diff --git a/src/PJ_somerc.c b/src/PJ_somerc.c
index d419e65..f7d1f11 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 a31bf97..52ec1df 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 ?
+            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 5e70952..7e52e15 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 f1557fe..c35d5cf 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 14cf2e8..3b1e0fb 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 b4e76aa..4ab5cf4 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 70a5a1d..6928bb3 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 4a4f31a..5c5918a 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 96fd5fc..f4942bb 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 fbab4c4..482e389 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 214e6f4..dfb455e 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 8eace00..388c790 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/aasincos.c b/src/aasincos.c
index 460590e..6f39478 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 40f2af4..59021ee 100644
--- a/src/biveval.c
+++ b/src/biveval.c
@@ -2,75 +2,77 @@
 # include <projects.h>
 # 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 1cc99f6..f1da537 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 6724a06..4106e11 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.c b/src/geod.c
deleted file mode 100644
index 2bdb803..0000000
--- a/src/geod.c
+++ /dev/null
@@ -1,245 +0,0 @@
-/* <<<< Geodesic filter program >>>> */
-# include "projects.h"
-# include "geodesic.h"
-# include "emess.h"
-# include <ctype.h>
-# include <stdio.h>
-# include <string.h>
-
-# 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 = "<stdin>";
-			} 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 510636b..0000000
--- 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_interface.c b/src/geod_interface.c
new file mode 100644
index 0000000..c144a35
--- /dev/null
+++ b/src/geod_interface.c
@@ -0,0 +1,34 @@
+#include "projects.h"
+#include "geod_interface.h"
+
+void geod_ini(void) {
+  GeodesicInit(&GlobalGeodesic, geod_a, geod_f);
+}
+
+void geod_pre(void) {
+  double
+    degree = PI/180,
+    lat1 = phi1 / degree, lon1 = lam1 /degree, azi1 = al12 / degree;
+  GeodesicLineInit(&GlobalGeodesicLine, &GlobalGeodesic,
+		   lat1, lon1, azi1, 0U);
+}
+
+void geod_for(void) {
+  double degree = PI/180, s12 = geod_S, lat2, lon2, azi2;
+  Position(&GlobalGeodesicLine, s12, &lat2, &lon2, &azi2);
+  azi2 += azi2 >= 0 ? -180 : 180; /* Compute back azimuth */
+  phi2 = lat2 * degree;
+  lam2 = lon2 * degree;
+  al21 = azi2 * degree;
+}
+
+void geod_inv(void) {
+  double
+    degree = PI / 180,
+    lat1 = phi1 / degree, lon1 = lam1 / degree,
+    lat2 = phi2 / degree, lon2 = lam2 / degree,
+    azi1, azi2, s12;
+  Inverse(&GlobalGeodesic, lat1, lon1, lat2, lon2, &s12, &azi1, &azi2);
+  azi2 += azi2 >= 0 ? -180 : 180; /* Compute back azimuth */
+  al12 = azi1 * degree; al21 = azi2 * degree; geod_S = s12;
+}
diff --git a/src/geod_interface.h b/src/geod_interface.h
new file mode 100644
index 0000000..161c757
--- /dev/null
+++ b/src/geod_interface.h
@@ -0,0 +1,45 @@
+#if !defined(GEOD_INTERFACE_H)
+#define GEOD_INTERFACE_H
+
+#include "geodesic.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _IN_GEOD_SET
+#  define GEOD_EXTERN extern
+#else
+#  define GEOD_EXTERN
+#endif
+
+GEOD_EXTERN struct geodesic {
+  double A, FLAT, LAM1, PHI1, ALPHA12, LAM2, PHI2, ALPHA21, DIST;
+} GEODESIC;
+
+# define geod_a	GEODESIC.A
+# define geod_f	GEODESIC.FLAT
+# define lam1	GEODESIC.LAM1
+# define phi1	GEODESIC.PHI1
+# define al12	GEODESIC.ALPHA12
+# define lam2	GEODESIC.LAM2
+# define phi2	GEODESIC.PHI2
+# define al21	GEODESIC.ALPHA21
+# define geod_S	GEODESIC.DIST
+    
+GEOD_EXTERN struct Geodesic GlobalGeodesic;
+GEOD_EXTERN struct GeodesicLine GlobalGeodesicLine;
+GEOD_EXTERN int n_alpha, n_S;
+GEOD_EXTERN double to_meter, fr_meter, del_alpha;
+	
+void geod_set(int, char **);
+void geod_ini(void);
+void geod_pre(void);
+void geod_for(void);
+void geod_inv(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/geod_inv.c b/src/geod_inv.c
deleted file mode 100644
index 61c8185..0000000
--- a/src/geod_inv.c
+++ /dev/null
@@ -1,59 +0,0 @@
-# include "projects.h"
-# include "geodesic.h"
-# define DTOL	1e-12
-
-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
index a190391..eaadce5 100644
--- a/src/geod_set.c
+++ b/src/geod_set.c
@@ -1,27 +1,17 @@
 
 #define _IN_GEOD_SET
 
-#include <stdlib.h>
 #include <string.h>
 #include "projects.h"
-#include "geodesic.h"
+#include "geod_interface.h"
 #include "emess.h"
-
-GEODESIC_T *
-GEOD_init(int argc, char **argv, GEODESIC_T *GEODESIC)
-{
-  paralist *start = 0, *curr = 0;
+	void
+geod_set(int argc, char **argv) {
+	paralist *start = 0, *curr;
 	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");
@@ -31,50 +21,41 @@ 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, &geod_a, &es)) emess(1,"ellipse setup failure");
 	/* set units */
-	if ((name = pj_param(start, "sunits").s)) {
+	if ((name = pj_param(NULL,start, "sunits").s) != NULL) {
 		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));
+		fr_meter = 1. / (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.;
-	}
+		to_meter = fr_meter = 1.;
+	geod_f = es/(1 + sqrt(1 - es));
+	geod_ini();
 	/* 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);
+		phi1 = pj_param(NULL,start, "rlat_1").f;
+		lam1 = pj_param(NULL,start, "rlon_1").f;
+		if (pj_param(NULL,start, "tlat_2").i) {
+			phi2 = pj_param(NULL,start, "rlat_2").f;
+			lam2 = pj_param(NULL,start, "rlon_2").f;
+			geod_inv();
+			geod_pre();
+		} else if ((geod_S = pj_param(NULL,start, "dS").f) != 0.) {
+			al12 = pj_param(NULL,start, "rA").f;
+			geod_pre();
+			geod_for();
 		} 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 ((n_alpha = pj_param(NULL,start, "in_A").i) > 0) {
+			if (!(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)) != 0.) {
+			n_S = geod_S / del_S + .5;
+		} else if ((n_S = pj_param(NULL,start, "in_S").i) <= 0)
 			emess(1,"no interval divisor selected");
 	}
 	/* free up linked list */
@@ -82,54 +63,4 @@ GEOD_init(int argc, char **argv, GEODESIC_T *GEODESIC)
 		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;
-  GEODESIC_T *ret_geod;
-  
-    /* 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 */
-  ret_geod = GEOD_init(argc, argv, geod);
-  
-  free( defn_copy );
-  return ret_geod;
 }
-
diff --git a/src/geodesic.c b/src/geodesic.c
new file mode 100644
index 0000000..794439a
--- /dev/null
+++ b/src/geodesic.c
@@ -0,0 +1,1461 @@
+/*
+ * This is a C implementation of the geodesic algorithms described in
+ *
+ *   C. F. F. Karney
+ *   Algorithms for geodesics
+ *   J. Geodesy (2012)
+ *   http://dx.doi.org/10.1007/s00190-012-0578-z
+ *   Addenda: http://geographiclib.sf.net/geod-addenda.html
+ *
+ * See the comments in geodesic.h for documentation.
+ *
+ * Copyright (c) Charles Karney (2012) <charles at karney.com> and licensed
+ * under the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ *
+ * This file was distributed with GeographicLib 1.27.
+ */
+
+#include "geodesic.h"
+#include <math.h>
+
+#define GEOGRAPHICLIB_GEODESIC_ORDER 6
+#define nC1   GEOGRAPHICLIB_GEODESIC_ORDER
+#define nC1p  GEOGRAPHICLIB_GEODESIC_ORDER
+#define nC2   GEOGRAPHICLIB_GEODESIC_ORDER
+#define nA3   GEOGRAPHICLIB_GEODESIC_ORDER
+#define nA3x  nA3
+#define nC3   GEOGRAPHICLIB_GEODESIC_ORDER
+#define nC3x  ((nC3 * (nC3 - 1)) / 2)
+#define nC4   GEOGRAPHICLIB_GEODESIC_ORDER
+#define nC4x  ((nC4 * (nC4 + 1)) / 2)
+
+typedef double real;
+typedef int boolx;
+
+static unsigned init = 0;
+static const int FALSE = 0;
+static const int TRUE = 1;
+static unsigned digits, maxit1, maxit2;
+static real epsilon, realmin, pi, degree, NaN,
+  tiny, tol0, tol1, tol2, tolb, xthresh;
+
+static void Init() {
+  if (!init) {
+#if defined(__DBL_MANT_DIG__)
+    digits = __DBL_MANT_DIG__;
+#else
+    digits = 53;
+#endif
+#if defined(__DBL_EPSILON__)
+    epsilon = __DBL_EPSILON__;
+#else
+    epsilon = pow(0.5, digits - 1);
+#endif
+#if defined(__DBL_MIN__)
+    realmin = __DBL_MIN__;
+#else
+    realmin = pow(0.5, 1022);
+#endif
+#if defined(M_PI)
+    pi = M_PI;
+#else
+    pi = atan2(0.0, -1.0);
+#endif
+    maxit1 = 20;
+    maxit2 = maxit1 + digits + 10;
+    tiny = sqrt(realmin);
+    tol0 = epsilon;
+    /* Increase multiplier in defn of tol1 from 100 to 200 to fix inverse case
+     * 52.784459512564 0 -52.784459512563990912 179.634407464943777557
+     * which otherwise failed for Visual Studio 10 (Release and Debug) */
+    tol1 = 200 * tol0;
+    tol2 = sqrt(tol0);
+    /* Check on bisection interval */
+    tolb = tol0 * tol2;
+    xthresh = 1000 * tol2;
+    degree = pi/180;
+    NaN = sqrt(-1.0);
+    init = 1;
+  }
+}
+
+enum captype {
+  CAP_NONE = 0U,
+  CAP_C1   = 1U<<0,
+  CAP_C1p  = 1U<<1,
+  CAP_C2   = 1U<<2,
+  CAP_C3   = 1U<<3,
+  CAP_C4   = 1U<<4,
+  CAP_ALL  = 0x1FU,
+  OUT_ALL  = 0x7F80U
+};
+
+static real sq(real x) { return x * x; }
+static real log1px(real x) {
+  volatile real
+    y = 1 + x,
+    z = y - 1;
+  /* Here's the explanation for this magic: y = 1 + z, exactly, and z
+   * approx x, thus log(y)/z (which is nearly constant near z = 0) returns
+   * a good approximation to the true log(1 + x)/x.  The multiplication x *
+   * (log(y)/z) introduces little additional error. */
+  return z == 0 ? x : x * log(y) / z;
+}
+
+static real atanhx(real x) {
+  real y = fabs(x);             /* Enforce odd parity */
+  y = log1px(2 * y/(1 - y))/2;
+  return x < 0 ? -y : y;
+}
+
+static real hypotx(real x, real y)
+{ return sqrt(x * x + y * y); }
+
+static real cbrtx(real x) {
+  real y = pow(fabs(x), 1/(real)(3)); /* Return the real cube root */
+  return x < 0 ? -y : y;
+}
+
+static real minx(real x, real y)
+{ return x < y ? x : y; }
+
+static real maxx(real x, real y)
+{ return x > y ? x : y; }
+
+static void swapx(real* x, real* y)
+{ real t = *x; *x = *y; *y = t; }
+
+static void SinCosNorm(real* sinx, real* cosx) {
+  real r = hypotx(*sinx, *cosx);
+  *sinx /= r;
+  *cosx /= r;
+}
+
+static real AngNormalize(real x)
+{ return x >= 180 ? x - 360 : (x < -180 ? x + 360 : x); }
+static real AngNormalize2(real x)
+{ return AngNormalize(fmod(x, (real)(360))); }
+
+static real AngRound(real x) {
+  const real z = (real)(0.0625); /* 1/16 */
+  volatile real y = fabs(x);
+  /* The compiler mustn't "simplify" z - (z - y) to y */
+  y = y < z ? z - (z - y) : y;
+  return x < 0 ? -y : y;
+}
+
+static void A3coeff(struct Geodesic* g);
+static void C3coeff(struct Geodesic* g);
+static void C4coeff(struct Geodesic* g);
+static real SinCosSeries(boolx sinp,
+                         real sinx, real cosx,
+                         const real c[], int n);
+static void Lengths(const struct Geodesic* g,
+                    real eps, real sig12,
+                    real ssig1, real csig1, real dn1,
+                    real ssig2, real csig2, real dn2,
+                    real cbet1, real cbet2,
+                    real* ps12b, real* pm12b, real* pm0,
+                    boolx scalep, real* pM12, real* pM21,
+                    /* Scratch areas of the right size */
+                    real C1a[], real C2a[]);
+static real Astroid(real x, real y);
+static real InverseStart(const struct Geodesic* g,
+                         real sbet1, real cbet1, real dn1,
+                         real sbet2, real cbet2, real dn2,
+                         real lam12,
+                         real* psalp1, real* pcalp1,
+                         /* Only updated if return val >= 0 */
+                         real* psalp2, real* pcalp2,
+                         /* Scratch areas of the right size */
+                         real C1a[], real C2a[]);
+static real Lambda12(const struct Geodesic* g,
+                     real sbet1, real cbet1, real dn1,
+                     real sbet2, real cbet2, real dn2,
+                     real salp1, real calp1,
+                     real* psalp2, real* pcalp2,
+                     real* psig12,
+                     real* pssig1, real* pcsig1,
+                     real* pssig2, real* pcsig2,
+                     real* peps, real* pdomg12,
+                     boolx diffp, real* pdlam12,
+                     /* Scratch areas of the right size */
+                     real C1a[], real C2a[], real C3a[]);
+static real A3f(const struct Geodesic* g, real eps);
+static void C3f(const struct Geodesic* g, real eps, real c[]);
+static void C4f(const struct Geodesic* g, real eps, real c[]);
+static real A1m1f(real eps);
+static void C1f(real eps, real c[]);
+static void C1pf(real eps, real c[]);
+static real A2m1f(real eps);
+static void C2f(real eps, real c[]);
+
+void GeodesicInit(struct Geodesic* g, real a, real f) {
+  if (!init) Init();
+  g->a = a;
+  g->f = f <= 1 ? f : 1/f;
+  g->f1 = 1 - g->f;
+  g->e2 = g->f * (2 - g->f);
+  g->ep2 = g->e2 / sq(g->f1);   /* e2 / (1 - e2) */
+  g->n = g->f / ( 2 - g->f);
+  g->b = g->a * g->f1;
+  g->c2 = (sq(g->a) + sq(g->b) *
+           (g->e2 == 0 ? 1 :
+            (g->e2 > 0 ? atanhx(sqrt(g->e2)) : atan(sqrt(-g->e2))) /
+            sqrt(fabs(g->e2))))/2; /* authalic radius squared */
+  /* The sig12 threshold for "really short" */
+  g->etol2 = 0.01 * tol2 / maxx((real)(0.1), sqrt(fabs(g->e2)));
+  A3coeff(g);
+  C3coeff(g);
+  C4coeff(g);
+}
+
+void GeodesicLineInit(struct GeodesicLine* l,
+                      const struct Geodesic* g,
+                      real lat1, real lon1, real azi1, unsigned caps) {
+  real alp1, cbet1, sbet1, phi, eps;
+  l->a = g->a;
+  l->f = g->f;
+  l->b = g->b;
+  l->c2 = g->c2;
+  l->f1 = g->f1;
+  /* If caps is 0 assume the standard direct calculation */
+  l->caps = (caps ? caps : DISTANCE_IN | LONGITUDE) |
+    LATITUDE | AZIMUTH; /* Always allow latitude and azimuth */
+
+  azi1 = AngNormalize(azi1);
+  lon1 = AngNormalize(lon1);
+  if (lat1 == 90) {
+    lon1 += lon1 < 0 ? 180 : -180;
+    lon1 = AngNormalize(lon1 - azi1);
+    azi1 = -180;
+  } else if (lat1 == -90) {
+    lon1 = AngNormalize(lon1 + azi1);
+    azi1 = 0;
+  } else {
+    /* Guard against underflow in salp0 */
+    azi1 = AngRound(azi1);
+  }
+
+  l->lat1 = lat1;
+  l->lon1 = lon1;
+  l->azi1 = azi1;
+  /* alp1 is in [0, pi] */
+  alp1 = azi1 * degree;
+  /* Enforce sin(pi) == 0 and cos(pi/2) == 0.  Better to face the ensuing
+   * problems directly than to skirt them. */
+  l->salp1 =     azi1  == -180 ? 0 : sin(alp1);
+  l->calp1 = fabs(azi1) ==   90 ? 0 : cos(alp1);
+  phi = lat1 * degree;
+  /* Ensure cbet1 = +epsilon at poles */
+  sbet1 = l->f1 * sin(phi);
+  cbet1 = fabs(lat1) == 90 ? tiny : cos(phi);
+  SinCosNorm(&sbet1, &cbet1);
+  l->dn1 = sqrt(1 + g->ep2 * sq(sbet1));
+
+  /* Evaluate alp0 from sin(alp1) * cos(bet1) = sin(alp0), */
+  l->salp0 = l->salp1 * cbet1; /* alp0 in [0, pi/2 - |bet1|] */
+  /* Alt: calp0 = hypot(sbet1, calp1 * cbet1).  The following
+   * is slightly better (consider the case salp1 = 0). */
+  l->calp0 = hypotx(l->calp1, l->salp1 * sbet1);
+  /* Evaluate sig with tan(bet1) = tan(sig1) * cos(alp1).
+   * sig = 0 is nearest northward crossing of equator.
+   * With bet1 = 0, alp1 = pi/2, we have sig1 = 0 (equatorial line).
+   * With bet1 =  pi/2, alp1 = -pi, sig1 =  pi/2
+   * With bet1 = -pi/2, alp1 =  0 , sig1 = -pi/2
+   * Evaluate omg1 with tan(omg1) = sin(alp0) * tan(sig1).
+   * With alp0 in (0, pi/2], quadrants for sig and omg coincide.
+   * No atan2(0,0) ambiguity at poles since cbet1 = +epsilon.
+   * With alp0 = 0, omg1 = 0 for alp1 = 0, omg1 = pi for alp1 = pi. */
+  l->ssig1 = sbet1; l->somg1 = l->salp0 * sbet1;
+  l->csig1 = l->comg1 = sbet1 != 0 || l->calp1 != 0 ? cbet1 * l->calp1 : 1;
+  SinCosNorm(&l->ssig1, &l->csig1); /* sig1 in (-pi, pi] */
+  /* SinCosNorm(somg1, comg1); -- don't need to normalize! */
+
+  l->k2 = sq(l->calp0) * g->ep2;
+  eps = l->k2 / (2 * (1 + sqrt(1 + l->k2)) + l->k2);
+
+  if (l->caps & CAP_C1) {
+    real s, c;
+    l->A1m1 = A1m1f(eps);
+    C1f(eps, l->C1a);
+    l->B11 = SinCosSeries(TRUE, l->ssig1, l->csig1, l->C1a, nC1);
+    s = sin(l->B11); c = cos(l->B11);
+    /* tau1 = sig1 + B11 */
+    l->stau1 = l->ssig1 * c + l->csig1 * s;
+    l->ctau1 = l->csig1 * c - l->ssig1 * s;
+    /* Not necessary because C1pa reverts C1a
+     *    B11 = -SinCosSeries(TRUE, stau1, ctau1, C1pa, nC1p); */
+  }
+
+  if (l->caps & CAP_C1p)
+    C1pf(eps, l->C1pa);
+
+  if (l->caps & CAP_C2) {
+    l->A2m1 = A2m1f(eps);
+    C2f(eps, l->C2a);
+    l->B21 = SinCosSeries(TRUE, l->ssig1, l->csig1, l->C2a, nC2);
+  }
+
+  if (l->caps & CAP_C3) {
+    C3f(g, eps, l->C3a);
+    l->A3c = -l->f * l->salp0 * A3f(g, eps);
+    l->B31 = SinCosSeries(TRUE, l->ssig1, l->csig1, l->C3a, nC3-1);
+  }
+
+  if (l->caps & CAP_C4) {
+    C4f(g, eps, l->C4a);
+    /* Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0) */
+    l->A4 = sq(l->a) * l->calp0 * l->salp0 * g->e2;
+    l->B41 = SinCosSeries(FALSE, l->ssig1, l->csig1, l->C4a, nC4);
+  }
+}
+
+real GenPosition(const struct GeodesicLine* l,
+                 boolx arcmode, real s12_a12,
+                 real* plat2, real* plon2, real* pazi2,
+                 real* ps12, real* pm12,
+                 real* pM12, real* pM21,
+                 real* pS12) {
+  real lat2 = 0, lon2 = 0, azi2 = 0, s12 = 0,
+    m12 = 0, M12 = 0, M21 = 0, S12 = 0;
+  /* Avoid warning about uninitialized B12. */
+  real sig12, ssig12, csig12, B12 = 0, AB1 = 0;
+  real omg12, lam12, lon12;
+  real ssig2, csig2, sbet2, cbet2, somg2, comg2, salp2, calp2, dn2;
+  unsigned outmask =
+    (plat2 ? LATITUDE : 0U) |
+    (plon2 ? LONGITUDE : 0U) |
+    (pazi2 ? AZIMUTH : 0U) |
+    (ps12 ? DISTANCE : 0U) |
+    (pm12 ? REDUCEDLENGTH : 0U) |
+    (pM12 || pM21 ? GEODESICSCALE : 0U) |
+    (pS12 ? AREA : 0U);
+
+  outmask &= l->caps & OUT_ALL;
+  if (!( TRUE /*Init()*/ && (arcmode || (l->caps & DISTANCE_IN & OUT_ALL)) ))
+    /* Uninitialized or impossible distance calculation requested */
+    return NaN;
+
+  if (arcmode) {
+    real s12a;
+    /* Interpret s12_a12 as spherical arc length */
+    sig12 = s12_a12 * degree;
+    s12a = fabs(s12_a12);
+    s12a -= 180 * floor(s12a / 180);
+    ssig12 = s12a ==  0 ? 0 : sin(sig12);
+    csig12 = s12a == 90 ? 0 : cos(sig12);
+  } else {
+    /* Interpret s12_a12 as distance */
+    real
+      tau12 = s12_a12 / (l->b * (1 + l->A1m1)),
+      s = sin(tau12),
+      c = cos(tau12);
+    /* tau2 = tau1 + tau12 */
+    B12 = - SinCosSeries(TRUE,
+                         l->stau1 * c + l->ctau1 * s,
+                         l->ctau1 * c - l->stau1 * s,
+                         l->C1pa, nC1p);
+    sig12 = tau12 - (B12 - l->B11);
+    ssig12 = sin(sig12); csig12 = cos(sig12);
+    if (fabs(l->f) > 0.01) {
+      /* Reverted distance series is inaccurate for |f| > 1/100, so correct
+       * sig12 with 1 Newton iteration.  The following table shows the
+       * approximate maximum error for a = WGS_a() and various f relative to
+       * GeodesicExact.
+       *     erri = the error in the inverse solution (nm)
+       *     errd = the error in the direct solution (series only) (nm)
+       *     errda = the error in the direct solution (series + 1 Newton) (nm)
+       *
+       *       f     erri  errd errda
+       *     -1/5    12e6 1.2e9  69e6
+       *     -1/10  123e3  12e6 765e3
+       *     -1/20   1110 108e3  7155
+       *     -1/50  18.63 200.9 27.12
+       *     -1/100 18.63 23.78 23.37
+       *     -1/150 18.63 21.05 20.26
+       *      1/150 22.35 24.73 25.83
+       *      1/100 22.35 25.03 25.31
+       *      1/50  29.80 231.9 30.44
+       *      1/20   5376 146e3  10e3
+       *      1/10  829e3  22e6 1.5e6
+       *      1/5   157e6 3.8e9 280e6 */
+      real
+        ssig2 = l->ssig1 * csig12 + l->csig1 * ssig12,
+        csig2 = l->csig1 * csig12 - l->ssig1 * ssig12,
+        serr;
+      B12 = SinCosSeries(TRUE, ssig2, csig2, l->C1a, nC1);
+      serr = (1 + l->A1m1) * (sig12 + (B12 - l->B11)) - s12_a12 / l->b;
+      sig12 = sig12 - serr / sqrt(1 + l->k2 * sq(ssig2));
+      ssig12 = sin(sig12); csig12 = cos(sig12);
+      /* Update B12 below */
+    }
+  }
+
+  /* sig2 = sig1 + sig12 */
+  ssig2 = l->ssig1 * csig12 + l->csig1 * ssig12;
+  csig2 = l->csig1 * csig12 - l->ssig1 * ssig12;
+  dn2 = sqrt(1 + l->k2 * sq(ssig2));
+  if (outmask & (DISTANCE | REDUCEDLENGTH | GEODESICSCALE)) {
+    if (arcmode || fabs(l->f) > 0.01)
+      B12 = SinCosSeries(TRUE, ssig2, csig2, l->C1a, nC1);
+    AB1 = (1 + l->A1m1) * (B12 - l->B11);
+  }
+  /* sin(bet2) = cos(alp0) * sin(sig2) */
+  sbet2 = l->calp0 * ssig2;
+  /* Alt: cbet2 = hypot(csig2, salp0 * ssig2); */
+  cbet2 = hypotx(l->salp0, l->calp0 * csig2);
+  if (cbet2 == 0)
+    /* I.e., salp0 = 0, csig2 = 0.  Break the degeneracy in this case */
+    cbet2 = csig2 = tiny;
+  /* tan(omg2) = sin(alp0) * tan(sig2) */
+  somg2 = l->salp0 * ssig2; comg2 = csig2;  /* No need to normalize */
+  /* tan(alp0) = cos(sig2)*tan(alp2) */
+  salp2 = l->salp0; calp2 = l->calp0 * csig2; /* No need to normalize */
+  /* omg12 = omg2 - omg1 */
+  omg12 = atan2(somg2 * l->comg1 - comg2 * l->somg1,
+                comg2 * l->comg1 + somg2 * l->somg1);
+
+  if (outmask & DISTANCE)
+    s12 = arcmode ? l->b * ((1 + l->A1m1) * sig12 + AB1) : s12_a12;
+
+  if (outmask & LONGITUDE) {
+    lam12 = omg12 + l->A3c *
+      ( sig12 + (SinCosSeries(TRUE, ssig2, csig2, l->C3a, nC3-1)
+                 - l->B31));
+    lon12 = lam12 / degree;
+    /* Use AngNormalize2 because longitude might have wrapped multiple
+     * times. */
+    lon12 = AngNormalize2(lon12);
+    lon2 = AngNormalize(l->lon1 + lon12);
+  }
+
+  if (outmask & LATITUDE)
+    lat2 = atan2(sbet2, l->f1 * cbet2) / degree;
+
+  if (outmask & AZIMUTH)
+    /* minus signs give range [-180, 180). 0- converts -0 to +0. */
+    azi2 = 0 - atan2(-salp2, calp2) / degree;
+
+  if (outmask & (REDUCEDLENGTH | GEODESICSCALE)) {
+    real
+      B22 = SinCosSeries(TRUE, ssig2, csig2, l->C2a, nC2),
+      AB2 = (1 + l->A2m1) * (B22 - l->B21),
+      J12 = (l->A1m1 - l->A2m1) * sig12 + (AB1 - AB2);
+    if (outmask & REDUCEDLENGTH)
+      /* Add parens around (csig1 * ssig2) and (ssig1 * csig2) to ensure
+       * accurate cancellation in the case of coincident points. */
+      m12 = l->b * ((dn2 * (l->csig1 * ssig2) - l->dn1 * (l->ssig1 * csig2))
+                    - l->csig1 * csig2 * J12);
+    if (outmask & GEODESICSCALE) {
+      real t = l->k2 * (ssig2 - l->ssig1) * (ssig2 + l->ssig1) / (l->dn1 + dn2);
+      M12 = csig12 + (t *  ssig2 -  csig2 * J12) * l->ssig1 / l->dn1;
+      M21 = csig12 - (t * l->ssig1 - l->csig1 * J12) *  ssig2 /  dn2;
+    }
+  }
+
+  if (outmask & AREA) {
+    real
+      B42 = SinCosSeries(FALSE, ssig2, csig2, l->C4a, nC4);
+    real salp12, calp12;
+    if (l->calp0 == 0 || l->salp0 == 0) {
+      /* alp12 = alp2 - alp1, used in atan2 so no need to normalized */
+      salp12 = salp2 * l->calp1 - calp2 * l->salp1;
+      calp12 = calp2 * l->calp1 + salp2 * l->salp1;
+      /* The right thing appears to happen if alp1 = +/-180 and alp2 = 0, viz
+       * salp12 = -0 and alp12 = -180.  However this depends on the sign being
+       * attached to 0 correctly.  The following ensures the correct
+       * behavior. */
+      if (salp12 == 0 && calp12 < 0) {
+        salp12 = tiny * l->calp1;
+        calp12 = -1;
+      }
+    } else {
+      /* tan(alp) = tan(alp0) * sec(sig)
+       * tan(alp2-alp1) = (tan(alp2) -tan(alp1)) / (tan(alp2)*tan(alp1)+1)
+       * = calp0 * salp0 * (csig1-csig2) / (salp0^2 + calp0^2 * csig1*csig2)
+       * If csig12 > 0, write
+       *   csig1 - csig2 = ssig12 * (csig1 * ssig12 / (1 + csig12) + ssig1)
+       * else
+       *   csig1 - csig2 = csig1 * (1 - csig12) + ssig12 * ssig1
+       * No need to normalize */
+      salp12 = l->calp0 * l->salp0 *
+        (csig12 <= 0 ? l->csig1 * (1 - csig12) + ssig12 * l->ssig1 :
+         ssig12 * (l->csig1 * ssig12 / (1 + csig12) + l->ssig1));
+      calp12 = sq(l->salp0) + sq(l->calp0) * l->csig1 * csig2;
+    }
+    S12 = l->c2 * atan2(salp12, calp12) + l->A4 * (B42 - l->B41);
+  }
+
+  if (outmask & LATITUDE)
+    *plat2 = lat2;
+  if (outmask & LONGITUDE)
+    *plon2 = lon2;
+  if (outmask & AZIMUTH)
+    *pazi2 = azi2;
+  if (outmask & DISTANCE)
+    *ps12 = s12;
+  if (outmask & REDUCEDLENGTH)
+    *pm12 = m12;
+  if (outmask & GEODESICSCALE) {
+    if (pM12) *pM12 = M12;
+    if (pM21) *pM21 = M21;
+  }
+  if (outmask & AREA)
+    *pS12 = S12;
+
+  return arcmode ? s12_a12 : sig12 / degree;
+}
+
+void Position(const struct GeodesicLine* l, real s12,
+              real* plat2, real* plon2, real* pazi2) {
+  GenPosition(l, FALSE, s12, plat2, plon2, pazi2, 0, 0, 0, 0, 0);
+}
+
+real GenDirect(const struct Geodesic* g,
+               real lat1, real lon1, real azi1,
+               boolx arcmode, real s12_a12,
+               real* plat2, real* plon2, real* pazi2,
+               real* ps12, real* pm12, real* pM12, real* pM21,
+               real* pS12) {
+  struct GeodesicLine l;
+  unsigned outmask =
+    (plat2 ? LATITUDE : 0U) |
+    (plon2 ? LONGITUDE : 0U) |
+    (pazi2 ? AZIMUTH : 0U) |
+    (ps12 ? DISTANCE : 0U) |
+    (pm12 ? REDUCEDLENGTH : 0U) |
+    (pM12 || pM21 ? GEODESICSCALE : 0U) |
+    (pS12 ? AREA : 0U);
+
+  GeodesicLineInit(&l, g, lat1, lon1, azi1,
+                   /* Automatically supply DISTANCE_IN if necessary */
+                   outmask | (arcmode ? NONE : DISTANCE_IN));
+  return GenPosition(&l, arcmode, s12_a12,
+                     plat2, plon2, pazi2, ps12, pm12, pM12, pM21, pS12);
+}
+
+void Direct(const struct Geodesic* g,
+            real lat1, real lon1, real azi1,
+            real s12,
+            real* plat2, real* plon2, real* pazi2) {
+  GenDirect(g, lat1, lon1, azi1, FALSE, s12, plat2, plon2, pazi2,
+            0, 0, 0, 0, 0);
+}
+
+real GenInverse(const struct Geodesic* g,
+                real lat1, real lon1, real lat2, real lon2,
+                real* ps12, real* pazi1, real* pazi2,
+                real* pm12, real* pM12, real* pM21, real* pS12) {
+  real s12 = 0, azi1 = 0, azi2 = 0, m12 = 0, M12 = 0, M21 = 0, S12 = 0;
+  real lon12;
+  int latsign, lonsign, swapp;
+  real phi, sbet1, cbet1, sbet2, cbet2, s12x = 0, m12x = 0;
+  real dn1, dn2, lam12, slam12, clam12;
+  real a12 = 0, sig12, calp1 = 0, salp1 = 0, calp2 = 0, salp2 = 0;
+  /* index zero elements of these arrays are unused */
+  real C1a[nC1 + 1], C2a[nC2 + 1], C3a[nC3];
+  boolx meridian;
+  real omg12 = 0;
+
+  unsigned outmask =
+    (ps12 ? DISTANCE : 0U) |
+    (pazi1 || pazi2 ? AZIMUTH : 0U) |
+    (pm12 ? REDUCEDLENGTH : 0U) |
+    (pM12 || pM21 ? GEODESICSCALE : 0U) |
+    (pS12 ? AREA : 0U);
+
+  outmask &= OUT_ALL;
+  lon12 = AngNormalize(AngNormalize(lon2) -
+                            AngNormalize(lon1));
+  /* If very close to being on the same meridian, then make it so.
+   * Not sure this is necessary... */
+  lon12 = AngRound(lon12);
+  /* Make longitude difference positive. */
+  lonsign = lon12 >= 0 ? 1 : -1;
+  lon12 *= lonsign;
+  if (lon12 == 180)
+    lonsign = 1;
+  /* If really close to the equator, treat as on equator. */
+  lat1 = AngRound(lat1);
+  lat2 = AngRound(lat2);
+  /* Swap points so that point with higher (abs) latitude is point 1 */
+  swapp = fabs(lat1) >= fabs(lat2) ? 1 : -1;
+  if (swapp < 0) {
+    lonsign *= -1;
+    swapx(&lat1, &lat2);
+  }
+  /* Make lat1 <= 0 */
+  latsign = lat1 < 0 ? 1 : -1;
+  lat1 *= latsign;
+  lat2 *= latsign;
+  /* Now we have
+   *
+   *     0 <= lon12 <= 180
+   *     -90 <= lat1 <= 0
+   *     lat1 <= lat2 <= -lat1
+   *
+   * longsign, swapp, latsign register the transformation to bring the
+   * coordinates to this canonical form.  In all cases, 1 means no change was
+   * made.  We make these transformations so that there are few cases to
+   * check, e.g., on verifying quadrants in atan2.  In addition, this
+   * enforces some symmetries in the results returned. */
+
+  phi = lat1 * degree;
+  /* Ensure cbet1 = +epsilon at poles */
+  sbet1 = g->f1 * sin(phi);
+  cbet1 = lat1 == -90 ? tiny : cos(phi);
+  SinCosNorm(&sbet1, &cbet1);
+
+  phi = lat2 * degree;
+  /* Ensure cbet2 = +epsilon at poles */
+  sbet2 = g->f1 * sin(phi);
+  cbet2 = fabs(lat2) == 90 ? tiny : cos(phi);
+  SinCosNorm(&sbet2, &cbet2);
+
+  /* If cbet1 < -sbet1, then cbet2 - cbet1 is a sensitive measure of the
+   * |bet1| - |bet2|.  Alternatively (cbet1 >= -sbet1), abs(sbet2) + sbet1 is
+   * a better measure.  This logic is used in assigning calp2 in Lambda12.
+   * Sometimes these quantities vanish and in that case we force bet2 = +/-
+   * bet1 exactly.  An example where is is necessary is the inverse problem
+   * 48.522876735459 0 -48.52287673545898293 179.599720456223079643
+   * which failed with Visual Studio 10 (Release and Debug) */
+
+  if (cbet1 < -sbet1) {
+    if (cbet2 == cbet1)
+      sbet2 = sbet2 < 0 ? sbet1 : -sbet1;
+  } else {
+    if (fabs(sbet2) == -sbet1)
+      cbet2 = cbet1;
+  }
+
+  dn1 = sqrt(1 + g->ep2 * sq(sbet1));
+  dn2 = sqrt(1 + g->ep2 * sq(sbet2));
+
+  lam12 = lon12 * degree;
+  slam12 = lon12 == 180 ? 0 : sin(lam12);
+  clam12 = cos(lam12);      /* lon12 == 90 isn't interesting */
+
+
+  meridian = lat1 == -90 || slam12 == 0;
+
+  if (meridian) {
+
+    /* Endpoints are on a single full meridian, so the geodesic might lie on
+     * a meridian. */
+
+    real ssig1, csig1, ssig2, csig2;
+    calp1 = clam12; salp1 = slam12; /* Head to the target longitude */
+    calp2 = 1; salp2 = 0;           /* At the target we're heading north */
+
+    /* tan(bet) = tan(sig) * cos(alp) */
+    ssig1 = sbet1; csig1 = calp1 * cbet1;
+    ssig2 = sbet2; csig2 = calp2 * cbet2;
+
+    /* sig12 = sig2 - sig1 */
+    sig12 = atan2(maxx(csig1 * ssig2 - ssig1 * csig2, (real)(0)),
+                  csig1 * csig2 + ssig1 * ssig2);
+    {
+      real dummy;
+      Lengths(g, g->n, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2,
+              cbet1, cbet2, &s12x, &m12x, &dummy,
+              (outmask & GEODESICSCALE) != 0U, &M12, &M21, C1a, C2a);
+    }
+    /* Add the check for sig12 since zero length geodesics might yield m12 <
+     * 0.  Test case was
+     *
+     *    echo 20.001 0 20.001 0 | Geod -i
+     *
+     * In fact, we will have sig12 > pi/2 for meridional geodesic which is
+     * not a shortest path. */
+    if (sig12 < 1 || m12x >= 0) {
+      m12x *= g->b;
+      s12x *= g->b;
+      a12 = sig12 / degree;
+    } else
+      /* m12 < 0, i.e., prolate and too close to anti-podal */
+      meridian = FALSE;
+  }
+
+  if (!meridian &&
+      sbet1 == 0 &&           /* and sbet2 == 0 */
+      /* Mimic the way Lambda12 works with calp1 = 0 */
+      (g->f <= 0 || lam12 <= pi - g->f * pi)) {
+
+    /* Geodesic runs along equator */
+    calp1 = calp2 = 0; salp1 = salp2 = 1;
+    s12x = g->a * lam12;
+    sig12 = omg12 = lam12 / g->f1;
+    m12x = g->b * sin(sig12);
+    if (outmask & GEODESICSCALE)
+      M12 = M21 = cos(sig12);
+    a12 = lon12 / g->f1;
+
+  } else if (!meridian) {
+
+    /* Now point1 and point2 belong within a hemisphere bounded by a
+     * meridian and geodesic is neither meridional or equatorial. */
+
+    /* Figure a starting point for Newton's method */
+    sig12 = InverseStart(g, sbet1, cbet1, dn1, sbet2, cbet2, dn2,
+                         lam12,
+                         &salp1, &calp1, &salp2, &calp2,
+                         C1a, C2a);
+
+    if (sig12 >= 0) {
+      /* Short lines (InverseStart sets salp2, calp2) */
+      real dnm = (dn1 + dn2) / 2;
+      s12x = sig12 * g->b * dnm;
+      m12x = sq(dnm) * g->b * sin(sig12 / dnm);
+      if (outmask & GEODESICSCALE)
+        M12 = M21 = cos(sig12 / dnm);
+      a12 = sig12 / degree;
+      omg12 = lam12 / (g->f1 * dnm);
+    } else {
+
+      /* Newton's method.  This is a straightforward solution of f(alp1) =
+       * lambda12(alp1) - lam12 = 0 with one wrinkle.  f(alp) has exactly one
+       * root in the interval (0, pi) and its derivative is positive at the
+       * root.  Thus f(alp) is positive for alp > alp1 and negative for alp <
+       * alp1.  During the course of the iteration, a range (alp1a, alp1b) is
+       * maintained which brackets the root and with each evaluation of
+       * f(alp) the range is shrunk, if possible.  Newton's method is
+       * restarted whenever the derivative of f is negative (because the new
+       * value of alp1 is then further from the solution) or if the new
+       * estimate of alp1 lies outside (0,pi); in this case, the new starting
+       * guess is taken to be (alp1a + alp1b) / 2. */
+      real ssig1 = 0, csig1 = 0, ssig2 = 0, csig2 = 0, eps = 0;
+      unsigned numit = 0;
+      /* Bracketing range */
+      real salp1a = tiny, calp1a = 1, salp1b = tiny, calp1b = -1;
+      boolx tripn, tripb;
+      for (tripn = FALSE, tripb = FALSE; numit < maxit2; ++numit) {
+        /* the WGS84 test set: mean = 1.47, sd = 1.25, max = 16
+         * WGS84 and random input: mean = 2.85, sd = 0.60 */
+        real dv,
+          v = (Lambda12(g, sbet1, cbet1, dn1, sbet2, cbet2, dn2, salp1, calp1,
+                        &salp2, &calp2, &sig12, &ssig1, &csig1, &ssig2, &csig2,
+                        &eps, &omg12, numit < maxit1, &dv, C1a, C2a, C3a)
+               - lam12);
+        /* 2 * tol0 is approximately 1 ulp for a number in [0, pi]. */
+        if (tripb || fabs(v) < (tripn ? 8 : 2) * tol0) break;
+        /* Update bracketing values */
+        if (v > 0 && (numit > maxit1 || calp1/salp1 > calp1b/salp1b)) {
+          salp1b = salp1; calp1b = calp1;
+        } else if (numit > maxit1 || calp1/salp1 < calp1a/salp1a) {
+          salp1a = salp1; calp1a = calp1;
+        }
+        if (numit < maxit1 && dv > 0) {
+          real
+            dalp1 = -v/dv;
+          real
+            sdalp1 = sin(dalp1), cdalp1 = cos(dalp1),
+            nsalp1 = salp1 * cdalp1 + calp1 * sdalp1;
+          if (nsalp1 > 0 && fabs(dalp1) < pi) {
+            calp1 = calp1 * cdalp1 - salp1 * sdalp1;
+            salp1 = nsalp1;
+            SinCosNorm(&salp1, &calp1);
+            /* In some regimes we don't get quadratic convergence because
+             * slope -> 0.  So use convergence conditions based on epsilon
+             * instead of sqrt(epsilon). */
+            tripn = fabs(v) <= 16 * tol0;
+            continue;
+          }
+        }
+        /* Either dv was not postive or updated value was outside legal
+         * range.  Use the midpoint of the bracket as the next estimate.
+         * This mechanism is not needed for the WGS84 ellipsoid, but it does
+         * catch problems with more eccentric ellipsoids.  Its efficacy is
+         * such for the WGS84 test set with the starting guess set to alp1 =
+         * 90deg:
+         * the WGS84 test set: mean = 5.21, sd = 3.93, max = 24
+         * WGS84 and random input: mean = 4.74, sd = 0.99 */
+        salp1 = (salp1a + salp1b)/2;
+        calp1 = (calp1a + calp1b)/2;
+        SinCosNorm(&salp1, &calp1);
+        tripn = FALSE;
+        tripb = (fabs(salp1a - salp1) + (calp1a - calp1) < tolb ||
+                 fabs(salp1 - salp1b) + (calp1 - calp1b) < tolb);
+      }
+      {
+        real dummy;
+        Lengths(g, eps, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2,
+                cbet1, cbet2, &s12x, &m12x, &dummy,
+                (outmask & GEODESICSCALE) != 0U, &M12, &M21, C1a, C2a);
+      }
+      m12x *= g->b;
+      s12x *= g->b;
+      a12 = sig12 / degree;
+      omg12 = lam12 - omg12;
+    }
+  }
+
+  if (outmask & DISTANCE)
+    s12 = 0 + s12x;             /* Convert -0 to 0 */
+
+  if (outmask & REDUCEDLENGTH)
+    m12 = 0 + m12x;             /* Convert -0 to 0 */
+
+  if (outmask & AREA) {
+    real
+      /* From Lambda12: sin(alp1) * cos(bet1) = sin(alp0) */
+      salp0 = salp1 * cbet1,
+      calp0 = hypotx(calp1, salp1 * sbet1); /* calp0 > 0 */
+    real alp12;
+    if (calp0 != 0 && salp0 != 0) {
+      real
+        /* From Lambda12: tan(bet) = tan(sig) * cos(alp) */
+        ssig1 = sbet1, csig1 = calp1 * cbet1,
+        ssig2 = sbet2, csig2 = calp2 * cbet2,
+        k2 = sq(calp0) * g->ep2,
+        eps = k2 / (2 * (1 + sqrt(1 + k2)) + k2),
+        /* Multiplier = a^2 * e^2 * cos(alpha0) * sin(alpha0). */
+        A4 = sq(g->a) * calp0 * salp0 * g->e2;
+      real C4a[nC4];
+      real B41, B42;
+      SinCosNorm(&ssig1, &csig1);
+      SinCosNorm(&ssig2, &csig2);
+      C4f(g, eps, C4a);
+      B41 = SinCosSeries(FALSE, ssig1, csig1, C4a, nC4);
+      B42 = SinCosSeries(FALSE, ssig2, csig2, C4a, nC4);
+      S12 = A4 * (B42 - B41);
+    } else
+      /* Avoid problems with indeterminate sig1, sig2 on equator */
+      S12 = 0;
+
+    if (!meridian &&
+        omg12 < (real)(0.75) * pi &&   /* Long difference too big */
+        sbet2 - sbet1 < (real)(1.75)) { /* Lat difference too big */
+      /* Use tan(Gamma/2) = tan(omg12/2)
+       * * (tan(bet1/2)+tan(bet2/2))/(1+tan(bet1/2)*tan(bet2/2))
+       * with tan(x/2) = sin(x)/(1+cos(x)) */
+      real
+        somg12 = sin(omg12), domg12 = 1 + cos(omg12),
+        dbet1 = 1 + cbet1, dbet2 = 1 + cbet2;
+      alp12 = 2 * atan2( somg12 * ( sbet1 * dbet2 + sbet2 * dbet1 ),
+                         domg12 * ( sbet1 * sbet2 + dbet1 * dbet2 ) );
+    } else {
+      /* alp12 = alp2 - alp1, used in atan2 so no need to normalize */
+      real
+        salp12 = salp2 * calp1 - calp2 * salp1,
+        calp12 = calp2 * calp1 + salp2 * salp1;
+      /* The right thing appears to happen if alp1 = +/-180 and alp2 = 0, viz
+       * salp12 = -0 and alp12 = -180.  However this depends on the sign
+       * being attached to 0 correctly.  The following ensures the correct
+       * behavior. */
+      if (salp12 == 0 && calp12 < 0) {
+        salp12 = tiny * calp1;
+        calp12 = -1;
+      }
+      alp12 = atan2(salp12, calp12);
+    }
+    S12 += g->c2 * alp12;
+    S12 *= swapp * lonsign * latsign;
+    /* Convert -0 to 0 */
+    S12 += 0;
+  }
+
+  /* Convert calp, salp to azimuth accounting for lonsign, swapp, latsign. */
+  if (swapp < 0) {
+    swapx(&salp1, &salp2);
+    swapx(&calp1, &calp2);
+    if (outmask & GEODESICSCALE)
+      swapx(&M12, &M21);
+  }
+
+  salp1 *= swapp * lonsign; calp1 *= swapp * latsign;
+  salp2 *= swapp * lonsign; calp2 *= swapp * latsign;
+
+  if (outmask & AZIMUTH) {
+    /* minus signs give range [-180, 180). 0- converts -0 to +0. */
+    azi1 = 0 - atan2(-salp1, calp1) / degree;
+    azi2 = 0 - atan2(-salp2, calp2) / degree;
+  }
+
+  if (outmask & DISTANCE)
+    *ps12 = s12;
+  if (outmask & AZIMUTH) {
+    if (pazi1) *pazi1 = azi1;
+    if (pazi2) *pazi2 = azi2;
+  }
+  if (outmask & REDUCEDLENGTH)
+    *pm12 = m12;
+  if (outmask & GEODESICSCALE) {
+    if (pM12) *pM12 = M12;
+    if (pM21) *pM21 = M21;
+  }
+  if (outmask & AREA)
+    *pS12 = S12;
+
+  /* Returned value in [0, 180] */
+  return a12;
+}
+
+void Inverse(const struct Geodesic* g,
+             double lat1, double lon1, double lat2, double lon2,
+             double* ps12, double* pazi1, double* pazi2) {
+  GenInverse(g, lat1, lon1, lat2, lon2, ps12, pazi1, pazi2, 0, 0, 0, 0);
+}
+
+real SinCosSeries(boolx sinp,
+                  real sinx, real cosx,
+                  const real c[], int n) {
+  /* Evaluate
+   * y = sinp ? sum(c[i] * sin( 2*i    * x), i, 1, n) :
+   *            sum(c[i] * cos((2*i+1) * x), i, 0, n-1)
+   * using Clenshaw summation.  N.B. c[0] is unused for sin series
+   * Approx operation count = (n + 5) mult and (2 * n + 2) add */
+  real ar, y0, y1;
+  c += (n + sinp);              /* Point to one beyond last element */
+  ar = 2 * (cosx - sinx) * (cosx + sinx); /* 2 * cos(2 * x) */
+  y0 = n & 1 ? *--c : 0; y1 = 0;          /* accumulators for sum */
+  /* Now n is even */
+  n /= 2;
+  while (n--) {
+    /* Unroll loop x 2, so accumulators return to their original role */
+    y1 = ar * y0 - y1 + *--c;
+    y0 = ar * y1 - y0 + *--c;
+  }
+  return sinp
+    ? 2 * sinx * cosx * y0      /* sin(2 * x) * y0 */
+    : cosx * (y0 - y1);         /* cos(x) * (y0 - y1) */
+}
+
+void Lengths(const struct Geodesic* g,
+             real eps, real sig12,
+             real ssig1, real csig1, real dn1,
+             real ssig2, real csig2, real dn2,
+             real cbet1, real cbet2,
+             real* ps12b, real* pm12b, real* pm0,
+             boolx scalep, real* pM12, real* pM21,
+             /* Scratch areas of the right size */
+             real C1a[], real C2a[]) {
+  real s12b = 0, m12b = 0, m0 = 0, M12 = 0, M21 = 0;
+  real A1m1, AB1, A2m1, AB2, J12;
+
+  /* Return m12b = (reduced length)/b; also calculate s12b = distance/b,
+   * and m0 = coefficient of secular term in expression for reduced length. */
+  C1f(eps, C1a);
+  C2f(eps, C2a);
+  A1m1 = A1m1f(eps);
+  AB1 = (1 + A1m1) * (SinCosSeries(TRUE, ssig2, csig2, C1a, nC1) -
+                      SinCosSeries(TRUE, ssig1, csig1, C1a, nC1));
+  A2m1 = A2m1f(eps);
+  AB2 = (1 + A2m1) * (SinCosSeries(TRUE, ssig2, csig2, C2a, nC2) -
+                      SinCosSeries(TRUE, ssig1, csig1, C2a, nC2));
+  m0 = A1m1 - A2m1;
+  J12 = m0 * sig12 + (AB1 - AB2);
+  /* Missing a factor of b.
+   * Add parens around (csig1 * ssig2) and (ssig1 * csig2) to ensure accurate
+   * cancellation in the case of coincident points. */
+  m12b = dn2 * (csig1 * ssig2) - dn1 * (ssig1 * csig2) - csig1 * csig2 * J12;
+  /* Missing a factor of b */
+  s12b = (1 + A1m1) * sig12 + AB1;
+  if (scalep) {
+    real csig12 = csig1 * csig2 + ssig1 * ssig2;
+    real t = g->ep2 * (cbet1 - cbet2) * (cbet1 + cbet2) / (dn1 + dn2);
+    M12 = csig12 + (t * ssig2 - csig2 * J12) * ssig1 / dn1;
+    M21 = csig12 - (t * ssig1 - csig1 * J12) * ssig2 / dn2;
+  }
+  *ps12b = s12b;
+  *pm12b = m12b;
+  *pm0 = m0;
+  if (scalep) {
+    *pM12 = M12;
+    *pM21 = M21;
+  }
+}
+
+real Astroid(real x, real y) {
+  /* Solve k^4+2*k^3-(x^2+y^2-1)*k^2-2*y^2*k-y^2 = 0 for positive root k.
+   * This solution is adapted from Geocentric::Reverse. */
+  real k;
+  real
+    p = sq(x),
+    q = sq(y),
+    r = (p + q - 1) / 6;
+  if ( !(q == 0 && r <= 0) ) {
+    real
+      /* Avoid possible division by zero when r = 0 by multiplying equations
+       * for s and t by r^3 and r, resp. */
+      S = p * q / 4,            /* S = r^3 * s */
+      r2 = sq(r),
+      r3 = r * r2,
+      /* The discrimant of the quadratic equation for T3.  This is zero on
+       * the evolute curve p^(1/3)+q^(1/3) = 1 */
+      disc = S * (S + 2 * r3);
+    real u = r;
+    real v, uv, w;
+    if (disc >= 0) {
+      real T3 = S + r3, T;
+      /* Pick the sign on the sqrt to maximize abs(T3).  This minimizes loss
+       * of precision due to cancellation.  The result is unchanged because
+       * of the way the T is used in definition of u. */
+      T3 += T3 < 0 ? -sqrt(disc) : sqrt(disc); /* T3 = (r * t)^3 */
+      /* N.B. cbrtx always returns the real root.  cbrtx(-8) = -2. */
+      T = cbrtx(T3);            /* T = r * t */
+      /* T can be zero; but then r2 / T -> 0. */
+      u += T + (T != 0 ? r2 / T : 0);
+    } else {
+      /* T is complex, but the way u is defined the result is real. */
+      real ang = atan2(sqrt(-disc), -(S + r3));
+      /* There are three possible cube roots.  We choose the root which
+       * avoids cancellation.  Note that disc < 0 implies that r < 0. */
+      u += 2 * r * cos(ang / 3);
+    }
+    v = sqrt(sq(u) + q);              /* guaranteed positive */
+    /* Avoid loss of accuracy when u < 0. */
+    uv = u < 0 ? q / (v - u) : u + v; /* u+v, guaranteed positive */
+    w = (uv - q) / (2 * v);           /* positive? */
+    /* Rearrange expression for k to avoid loss of accuracy due to
+     * subtraction.  Division by 0 not possible because uv > 0, w >= 0. */
+    k = uv / (sqrt(uv + sq(w)) + w);   /* guaranteed positive */
+  } else {               /* q == 0 && r <= 0 */
+    /* y = 0 with |x| <= 1.  Handle this case directly.
+     * for y small, positive root is k = abs(y)/sqrt(1-x^2) */
+    k = 0;
+  }
+  return k;
+}
+
+real InverseStart(const struct Geodesic* g,
+                  real sbet1, real cbet1, real dn1,
+                  real sbet2, real cbet2, real dn2,
+                  real lam12,
+                  real* psalp1, real* pcalp1,
+                  /* Only updated if return val >= 0 */
+                  real* psalp2, real* pcalp2,
+                  /* Scratch areas of the right size */
+                  real C1a[], real C2a[]) {
+  real salp1 = 0, calp1 = 0, salp2 = 0, calp2 = 0;
+
+  /* Return a starting point for Newton's method in salp1 and calp1 (function
+   * value is -1).  If Newton's method doesn't need to be used, return also
+   * salp2 and calp2 and function value is sig12. */
+  real
+    sig12 = -1,               /* Return value */
+    /* bet12 = bet2 - bet1 in [0, pi); bet12a = bet2 + bet1 in (-pi, 0] */
+    sbet12 = sbet2 * cbet1 - cbet2 * sbet1,
+    cbet12 = cbet2 * cbet1 + sbet2 * sbet1;
+#if defined(__GNUC__) && __GNUC__ == 4 &&       \
+  (__GNUC_MINOR__ < 6 || defined(__MINGW32__))
+  /* Volatile declaration needed to fix inverse cases
+   * 88.202499451857 0 -88.202499451857 179.981022032992859592
+   * 89.262080389218 0 -89.262080389218 179.992207982775375662
+   * 89.333123580033 0 -89.333123580032997687 179.99295812360148422
+   * which otherwise fail with g++ 4.4.4 x86 -O3 (Linux)
+   * and g++ 4.4.0 (mingw) and g++ 4.6.1 (tdm mingw). */
+  real sbet12a;
+  {
+    volatile real xx1 = sbet2 * cbet1;
+    volatile real xx2 = cbet2 * sbet1;
+    sbet12a = xx1 + xx2;
+  }
+#else
+  real sbet12a = sbet2 * cbet1 + cbet2 * sbet1;
+#endif
+  boolx shortline = cbet12 >= 0 && sbet12 < (real)(0.5) &&
+    lam12 <= pi / 6;
+  real
+    omg12 = !shortline ? lam12 : lam12 / (g->f1 * (dn1 + dn2) / 2),
+    somg12 = sin(omg12), comg12 = cos(omg12);
+  real ssig12, csig12;
+
+  salp1 = cbet2 * somg12;
+  calp1 = comg12 >= 0 ?
+    sbet12 + cbet2 * sbet1 * sq(somg12) / (1 + comg12) :
+    sbet12a - cbet2 * sbet1 * sq(somg12) / (1 - comg12);
+
+  ssig12 = hypotx(salp1, calp1);
+  csig12 = sbet1 * sbet2 + cbet1 * cbet2 * comg12;
+
+  if (shortline && ssig12 < g->etol2) {
+    /* really short lines */
+    salp2 = cbet1 * somg12;
+    calp2 = sbet12 - cbet1 * sbet2 * sq(somg12) / (1 + comg12);
+    SinCosNorm(&salp2, &calp2);
+    /* Set return value */
+    sig12 = atan2(ssig12, csig12);
+  } else if (fabs(g->n) > (real)(0.1) || /* No astroid calc if too eccentric */
+             csig12 >= 0 ||
+             ssig12 >= 6 * fabs(g->n) * pi * sq(cbet1)) {
+    /* Nothing to do, zeroth order spherical approximation is OK */
+  } else {
+    /* Scale lam12 and bet2 to x, y coordinate system where antipodal point
+     * is at origin and singular point is at y = 0, x = -1. */
+    real y, lamscale, betscale;
+    /* Volatile declaration needed to fix inverse case
+     * 56.320923501171 0 -56.320923501171 179.664747671772880215
+     * which otherwise fails with g++ 4.4.4 x86 -O3 */
+    volatile real x;
+    if (g->f >= 0) {            /* In fact f == 0 does not get here */
+      /* x = dlong, y = dlat */
+      {
+        real
+          k2 = sq(sbet1) * g->ep2,
+          eps = k2 / (2 * (1 + sqrt(1 + k2)) + k2);
+        lamscale = g->f * cbet1 * A3f(g, eps) * pi;
+      }
+      betscale = lamscale * cbet1;
+
+      x = (lam12 - pi) / lamscale;
+      y = sbet12a / betscale;
+    } else {                    /* f < 0 */
+      /* x = dlat, y = dlong */
+      real
+        cbet12a = cbet2 * cbet1 - sbet2 * sbet1,
+        bet12a = atan2(sbet12a, cbet12a);
+      real m12b, m0, dummy;
+      /* In the case of lon12 = 180, this repeats a calculation made in
+       * Inverse. */
+      Lengths(g, g->n, pi + bet12a,
+              sbet1, -cbet1, dn1, sbet2, cbet2, dn2,
+              cbet1, cbet2, &dummy, &m12b, &m0, FALSE,
+              &dummy, &dummy, C1a, C2a);
+      x = -1 + m12b / (cbet1 * cbet2 * m0 * pi);
+      betscale = x < -(real)(0.01) ? sbet12a / x :
+        -g->f * sq(cbet1) * pi;
+      lamscale = betscale / cbet1;
+      y = (lam12 - pi) / lamscale;
+    }
+
+    if (y > -tol1 && x > -1 - xthresh) {
+      /* strip near cut */
+      if (g->f >= 0) {
+        salp1 = minx((real)(1), -(real)(x)); calp1 = - sqrt(1 - sq(salp1));
+      } else {
+        calp1 = maxx((real)(x > -tol1 ? 0 : -1), (real)(x));
+        salp1 = sqrt(1 - sq(calp1));
+      }
+    } else {
+      /* Estimate alp1, by solving the astroid problem.
+       *
+       * Could estimate alpha1 = theta + pi/2, directly, i.e.,
+       *   calp1 = y/k; salp1 = -x/(1+k);  for f >= 0
+       *   calp1 = x/(1+k); salp1 = -y/k;  for f < 0 (need to check)
+       *
+       * However, it's better to estimate omg12 from astroid and use
+       * spherical formula to compute alp1.  This reduces the mean number of
+       * Newton iterations for astroid cases from 2.24 (min 0, max 6) to 2.12
+       * (min 0 max 5).  The changes in the number of iterations are as
+       * follows:
+       *
+       * change percent
+       *    1       5
+       *    0      78
+       *   -1      16
+       *   -2       0.6
+       *   -3       0.04
+       *   -4       0.002
+       *
+       * The histogram of iterations is (m = number of iterations estimating
+       * alp1 directly, n = number of iterations estimating via omg12, total
+       * number of trials = 148605):
+       *
+       *  iter    m      n
+       *    0   148    186
+       *    1 13046  13845
+       *    2 93315 102225
+       *    3 36189  32341
+       *    4  5396      7
+       *    5   455      1
+       *    6    56      0
+       *
+       * Because omg12 is near pi, estimate work with omg12a = pi - omg12 */
+      real k = Astroid(x, y);
+      real
+        omg12a = lamscale * ( g->f >= 0 ? -x * k/(1 + k) : -y * (1 + k)/k );
+      somg12 = sin(omg12a); comg12 = -cos(omg12a);
+      /* Update spherical estimate of alp1 using omg12 instead of lam12 */
+      salp1 = cbet2 * somg12;
+      calp1 = sbet12a - cbet2 * sbet1 * sq(somg12) / (1 - comg12);
+    }
+  }
+  if (salp1 > 0)              /* Sanity check on starting guess */
+    SinCosNorm(&salp1, &calp1);
+  else {
+    salp1 = 1; calp1 = 0;
+  }
+
+  *psalp1 = salp1;
+  *pcalp1 = calp1;
+  if (sig12 >= 0) {
+    *psalp2 = salp2;
+    *pcalp2 = calp2;
+  }
+  return sig12;
+}
+
+real Lambda12(const struct Geodesic* g,
+              real sbet1, real cbet1, real dn1,
+              real sbet2, real cbet2, real dn2,
+              real salp1, real calp1,
+              real* psalp2, real* pcalp2,
+              real* psig12,
+              real* pssig1, real* pcsig1,
+              real* pssig2, real* pcsig2,
+              real* peps, real* pdomg12,
+              boolx diffp, real* pdlam12,
+              /* Scratch areas of the right size */
+              real C1a[], real C2a[], real C3a[]) {
+  real salp2 = 0, calp2 = 0, sig12 = 0,
+    ssig1 = 0, csig1 = 0, ssig2 = 0, csig2 = 0, eps = 0, domg12 = 0, dlam12 = 0;
+  real salp0, calp0;
+  real somg1, comg1, somg2, comg2, omg12, lam12;
+  real B312, h0, k2;
+
+  if (sbet1 == 0 && calp1 == 0)
+    /* Break degeneracy of equatorial line.  This case has already been
+     * handled. */
+    calp1 = -tiny;
+
+  /* sin(alp1) * cos(bet1) = sin(alp0) */
+  salp0 = salp1 * cbet1;
+  calp0 = hypotx(calp1, salp1 * sbet1); /* calp0 > 0 */
+
+  /* tan(bet1) = tan(sig1) * cos(alp1)
+   * tan(omg1) = sin(alp0) * tan(sig1) = tan(omg1)=tan(alp1)*sin(bet1) */
+  ssig1 = sbet1; somg1 = salp0 * sbet1;
+  csig1 = comg1 = calp1 * cbet1;
+  SinCosNorm(&ssig1, &csig1);
+  /* SinCosNorm(&somg1, &comg1); -- don't need to normalize! */
+
+  /* Enforce symmetries in the case abs(bet2) = -bet1.  Need to be careful
+   * about this case, since this can yield singularities in the Newton
+   * iteration.
+   * sin(alp2) * cos(bet2) = sin(alp0) */
+  salp2 = cbet2 != cbet1 ? salp0 / cbet2 : salp1;
+  /* calp2 = sqrt(1 - sq(salp2))
+   *       = sqrt(sq(calp0) - sq(sbet2)) / cbet2
+   * and subst for calp0 and rearrange to give (choose positive sqrt
+   * to give alp2 in [0, pi/2]). */
+  calp2 = cbet2 != cbet1 || fabs(sbet2) != -sbet1 ?
+    sqrt(sq(calp1 * cbet1) +
+         (cbet1 < -sbet1 ?
+          (cbet2 - cbet1) * (cbet1 + cbet2) :
+          (sbet1 - sbet2) * (sbet1 + sbet2))) / cbet2 :
+    fabs(calp1);
+  /* tan(bet2) = tan(sig2) * cos(alp2)
+   * tan(omg2) = sin(alp0) * tan(sig2). */
+  ssig2 = sbet2; somg2 = salp0 * sbet2;
+  csig2 = comg2 = calp2 * cbet2;
+  SinCosNorm(&ssig2, &csig2);
+  /* SinCosNorm(&somg2, &comg2); -- don't need to normalize! */
+
+  /* sig12 = sig2 - sig1, limit to [0, pi] */
+  sig12 = atan2(maxx(csig1 * ssig2 - ssig1 * csig2, (real)(0)),
+                csig1 * csig2 + ssig1 * ssig2);
+
+  /* omg12 = omg2 - omg1, limit to [0, pi] */
+  omg12 = atan2(maxx(comg1 * somg2 - somg1 * comg2, (real)(0)),
+                comg1 * comg2 + somg1 * somg2);
+  k2 = sq(calp0) * g->ep2;
+  eps = k2 / (2 * (1 + sqrt(1 + k2)) + k2);
+  C3f(g, eps, C3a);
+  B312 = (SinCosSeries(TRUE, ssig2, csig2, C3a, nC3-1) -
+          SinCosSeries(TRUE, ssig1, csig1, C3a, nC3-1));
+  h0 = -g->f * A3f(g, eps);
+  domg12 = salp0 * h0 * (sig12 + B312);
+  lam12 = omg12 + domg12;
+
+  if (diffp) {
+    if (calp2 == 0)
+      dlam12 = - 2 * g->f1 * dn1 / sbet1;
+    else {
+      real dummy;
+      Lengths(g, eps, sig12, ssig1, csig1, dn1, ssig2, csig2, dn2,
+              cbet1, cbet2, &dummy, &dlam12, &dummy,
+              FALSE, &dummy, &dummy, C1a, C2a);
+      dlam12 *= g->f1 / (calp2 * cbet2);
+    }
+  }
+
+  *psalp2 = salp2;
+  *pcalp2 = calp2;
+  *psig12 = sig12;
+  *pssig1 = ssig1;
+  *pcsig1 = csig1;
+  *pssig2 = ssig2;
+  *pcsig2 = csig2;
+  *peps = eps;
+  *pdomg12 = domg12;
+  if (diffp)
+    *pdlam12 = dlam12;
+
+  return lam12;
+}
+
+real A3f(const struct Geodesic* g, real eps) {
+  /* Evaluate sum(A3x[k] * eps^k, k, 0, nA3x-1) by Horner's method */
+  real v = 0;
+  int i;
+  for (i = nA3x; i; )
+    v = eps * v + g->A3x[--i];
+  return v;
+}
+
+void C3f(const struct Geodesic* g, real eps, real c[]) {
+  /* Evaluate C3 coeffs by Horner's method
+   * Elements c[1] thru c[nC3 - 1] are set */
+  int i, j, k;
+  real mult = 1;
+  for (j = nC3x, k = nC3 - 1; k; ) {
+    real t = 0;
+    for (i = nC3 - k; i; --i)
+      t = eps * t + g->C3x[--j];
+    c[k--] = t;
+  }
+
+  for (k = 1; k < nC3; ) {
+    mult *= eps;
+    c[k++] *= mult;
+  }
+}
+
+void C4f(const struct Geodesic* g, real eps, real c[]) {
+  /* Evaluate C4 coeffs by Horner's method
+   * Elements c[0] thru c[nC4 - 1] are set */
+  int i, j, k;
+  real mult = 1;
+  for (j = nC4x, k = nC4; k; ) {
+    real t = 0;
+    for (i = nC4 - k + 1; i; --i)
+      t = eps * t + g->C4x[--j];
+    c[--k] = t;
+  }
+
+  for (k = 1; k < nC4; ) {
+    mult *= eps;
+    c[k++] *= mult;
+  }
+}
+
+/* Generated by Maxima on 2010-09-04 10:26:17-04:00 */
+
+/* The scale factor A1-1 = mean value of (d/dsigma)I1 - 1 */
+real A1m1f(real eps)  {
+  real
+    eps2 = sq(eps),
+    t = eps2*(eps2*(eps2+4)+64)/256;
+  return (t + eps) / (1 - eps);
+}
+
+/* The coefficients C1[l] in the Fourier expansion of B1 */
+void C1f(real eps, real c[])  {
+  real
+    eps2 = sq(eps),
+    d = eps;
+  c[1] = d*((6-eps2)*eps2-16)/32;
+  d *= eps;
+  c[2] = d*((64-9*eps2)*eps2-128)/2048;
+  d *= eps;
+  c[3] = d*(9*eps2-16)/768;
+  d *= eps;
+  c[4] = d*(3*eps2-5)/512;
+  d *= eps;
+  c[5] = -7*d/1280;
+  d *= eps;
+  c[6] = -7*d/2048;
+}
+
+/* The coefficients C1p[l] in the Fourier expansion of B1p */
+void C1pf(real eps, real c[])  {
+  real
+    eps2 = sq(eps),
+    d = eps;
+  c[1] = d*(eps2*(205*eps2-432)+768)/1536;
+  d *= eps;
+  c[2] = d*(eps2*(4005*eps2-4736)+3840)/12288;
+  d *= eps;
+  c[3] = d*(116-225*eps2)/384;
+  d *= eps;
+  c[4] = d*(2695-7173*eps2)/7680;
+  d *= eps;
+  c[5] = 3467*d/7680;
+  d *= eps;
+  c[6] = 38081*d/61440;
+}
+
+/* The scale factor A2-1 = mean value of (d/dsigma)I2 - 1 */
+real A2m1f(real eps)  {
+  real
+    eps2 = sq(eps),
+    t = eps2*(eps2*(25*eps2+36)+64)/256;
+  return t * (1 - eps) - eps;
+}
+
+/* The coefficients C2[l] in the Fourier expansion of B2 */
+void C2f(real eps, real c[])  {
+  real
+    eps2 = sq(eps),
+    d = eps;
+  c[1] = d*(eps2*(eps2+2)+16)/32;
+  d *= eps;
+  c[2] = d*(eps2*(35*eps2+64)+384)/2048;
+  d *= eps;
+  c[3] = d*(15*eps2+80)/768;
+  d *= eps;
+  c[4] = d*(7*eps2+35)/512;
+  d *= eps;
+  c[5] = 63*d/1280;
+  d *= eps;
+  c[6] = 77*d/2048;
+}
+
+/* The scale factor A3 = mean value of (d/dsigma)I3 */
+void A3coeff(struct Geodesic* g) {
+  g->A3x[0] = 1;
+  g->A3x[1] = (g->n-1)/2;
+  g->A3x[2] = (g->n*(3*g->n-1)-2)/8;
+  g->A3x[3] = ((-g->n-3)*g->n-1)/16;
+  g->A3x[4] = (-2*g->n-3)/64;
+  g->A3x[5] = -3/(real)(128);
+}
+
+/* The coefficients C3[l] in the Fourier expansion of B3 */
+void C3coeff(struct Geodesic* g) {
+  g->C3x[0] = (1-g->n)/4;
+  g->C3x[1] = (1-g->n*g->n)/8;
+  g->C3x[2] = ((3-g->n)*g->n+3)/64;
+  g->C3x[3] = (2*g->n+5)/128;
+  g->C3x[4] = 3/(real)(128);
+  g->C3x[5] = ((g->n-3)*g->n+2)/32;
+  g->C3x[6] = ((-3*g->n-2)*g->n+3)/64;
+  g->C3x[7] = (g->n+3)/128;
+  g->C3x[8] = 5/(real)(256);
+  g->C3x[9] = (g->n*(5*g->n-9)+5)/192;
+  g->C3x[10] = (9-10*g->n)/384;
+  g->C3x[11] = 7/(real)(512);
+  g->C3x[12] = (7-14*g->n)/512;
+  g->C3x[13] = 7/(real)(512);
+  g->C3x[14] = 21/(real)(2560);
+}
+
+/* Generated by Maxima on 2012-10-19 08:02:34-04:00 */
+
+/* The coefficients C4[l] in the Fourier expansion of I4 */
+void C4coeff(struct Geodesic* g) {
+  g->C4x[0] = (g->n*(g->n*(g->n*(g->n*(100*g->n+208)+572)+3432)-12012)+30030)/
+    45045;
+  g->C4x[1] = (g->n*(g->n*(g->n*(64*g->n+624)-4576)+6864)-3003)/15015;
+  g->C4x[2] = (g->n*((14144-10656*g->n)*g->n-4576)-858)/45045;
+  g->C4x[3] = ((-224*g->n-4784)*g->n+1573)/45045;
+  g->C4x[4] = (1088*g->n+156)/45045;
+  g->C4x[5] = 97/(real)(15015);
+  g->C4x[6] = (g->n*(g->n*((-64*g->n-624)*g->n+4576)-6864)+3003)/135135;
+  g->C4x[7] = (g->n*(g->n*(5952*g->n-11648)+9152)-2574)/135135;
+  g->C4x[8] = (g->n*(5792*g->n+1040)-1287)/135135;
+  g->C4x[9] = (468-2944*g->n)/135135;
+  g->C4x[10] = 1/(real)(9009);
+  g->C4x[11] = (g->n*((4160-1440*g->n)*g->n-4576)+1716)/225225;
+  g->C4x[12] = ((4992-8448*g->n)*g->n-1144)/225225;
+  g->C4x[13] = (1856*g->n-936)/225225;
+  g->C4x[14] = 8/(real)(10725);
+  g->C4x[15] = (g->n*(3584*g->n-3328)+1144)/315315;
+  g->C4x[16] = (1024*g->n-208)/105105;
+  g->C4x[17] = -136/(real)(63063);
+  g->C4x[18] = (832-2560*g->n)/405405;
+  g->C4x[19] = -128/(real)(135135);
+  g->C4x[20] = 128/(real)(99099);
+}
diff --git a/src/geodesic.h b/src/geodesic.h
index 2a9ff60..acf5d87 100644
--- a/src/geodesic.h
+++ b/src/geodesic.h
@@ -1,53 +1,206 @@
-#ifndef __GEODESIC_H__
-#define __GEODESIC_H__
+/*
+ * This is a C implementation of the geodesic algorithms described in
+ *
+ *   C. F. F. Karney,
+ *   Algorithms for geodesics,
+ *   J. Geodesy (2012);
+ *   http://dx.doi.org/10.1007/s00190-012-0578-z
+ *   Addenda: http://geographiclib.sf.net/geod-addenda.html
+ *
+ * The principal advantages of these algorithms over previous ones (e.g.,
+ * Vincenty, 1975) are
+ *   * accurate to round off for abs(f) < 1/50;
+ *   * the solution of the inverse problem is always found;
+ *   * differential and integral properties of geodesics are computed.
+ *
+ * The shortest path between two points on the ellipsoid at (lat1, lon1) and
+ * (lat2, lon2) is called the geodesic.  Its length is s12 and the geodesic
+ * from point 1 to point 2 has forward azimuths azi1 and azi2 at the two end
+ * points.
+ *
+ * Traditionally two geodesic problems are considered:
+ *   * the direct problem -- given lat1, lon1, s12, and azi1, determine
+ *     lat2, lon2, and azi2.
+ *   * the inverse problem -- given lat1, lon1, lat2, lon2, determine
+ *     s12, azi1, and azi2.
+ *
+ * The ellipsoid is specified by its equatorial radius a (typically in meters)
+ * and flattening f.  The routines are accurate to round off with double
+ * precision arithmetic provided that abs(f) < 1/50; for the WGS84 ellipsoid,
+ * the errors are less than 15 nanometers.  (Reasonably accurate results are
+ * obtained for abs(f) < 1/5.)  Latitudes, longitudes, and azimuths are in
+ * degrees.  Latitudes must lie in [-90,90] and longitudes and azimuths must
+ * lie in [-540,540).  The returned values for longitude and azimuths are in
+ * [-180,180).  The distance s12 is measured in meters (more precisely the same
+ * units as a).
+ *
+ * The routines also calculate several other quantities of interest
+ *   * SS12 is the area between the geodesic from point 1 to point 2 and the
+ *     equator; i.e., it is the area, measured counter-clockwise, of the
+ *     quadrilateral with corners (lat1,lon1), (0,lon1), (0,lon2), and
+ *     (lat2,lon2).  It is given in meters^2.
+ *   * m12, the reduced length of the geodesic is defined such that if the
+ *     initial azimuth is perturbed by dazi1 (radians) then the second point is
+ *     displaced by m12 dazi1 in the direction perpendicular to the geodesic.
+ *     m12 is given in meters.  On a curved surface the reduced length obeys a
+ *     symmetry relation, m12 + m21 = 0.  On a flat surface, we have m12 = s12.
+ *   * MM12 and MM21 are geodesic scales.  If two geodesics are parallel at
+ *     point 1 and separated by a small distance dt, then they are separated by
+ *     a distance MM12 dt at point 2.  MM21 is defined similarly (with the
+ *     geodesics being parallel to one another at point 2).  MM12 and MM21 are
+ *     dimensionless quantities.  On a flat surface, we have MM12 = MM21 = 1.
+ *   * a12 is the arc length on the auxiliary sphere.  This is a construct for
+ *     converting the problem to one in spherical trigonometry.  a12 is
+ *     measured in degrees.  The spherical arc length from one equator crossing
+ *     to the next is always 180 degrees.
+ *
+ * Simple interface
+ *
+ *    #include "geodesic.h"
+ *
+ *    double a, f, lat1, lon1, azi1, lat2, lon2, azi2, s12;
+ *    struct Geodesic g;
+ *
+ *    GeodesicInit(&g, a, f);
+ *    Direct(&g, lat1, lon1, azi1, s12, &lat2, &lon2, &azi2);
+ *    Inverse(&g, lat1, lon1, lat2, lon2, &s12, &azi1, &azi2);
+ *
+ * GeodesicInit initalizes g for the ellipsoid.  Subsequent calls to Direct and
+ * Inverse solve the direct and inverse geodesic problems.
+ *
+ * Returning auxiliary quantities (continued from the previous example):
+ *
+ *    double a12, s12_a12, m12, M12, M21, S12;
+ *    a12 = GenDirect(&g, lat1, lon1, azi1, 0, s12,
+ *                    &lat1, &lat2, &azi2, 0, &m12, &M12, &M21, &S21);
+ *    GenDirect(&g, lat1, lon1, azi1, 1, a12,
+ *              &lat1, &lat2, &azi2, &s12, &m12, &M12, &M21, &S21);
+ *    a12 = GenInverse(&g, lat1, lon1, lat2, lon2, &s12, &azi1, &azi2,
+ *                     &m12, &M12, &M21, &S12);
+ *
+ * GenDirect is a generalized version of Direct allowing the return of the
+ * auxiliary quantities.  With the first variant (arcmode = 0), the length of
+ * the geodesic is specified by the true length s12 and the arc length a12 is
+ * returned as the function value.  In the second variant (arcmode = 1), the
+ * length is specified by the arc length a12 (in degrees), and the true length
+ * is returned via &s12.
+ *
+ *    a12 = GenInverse(&g, lat1, lon1, lat2, lon2, &s12, &azi1, &azi2,
+ *                     &m12, &M12, &M21, &S12);
+ *
+ * GenInverse is a generalized version of Inverse allowing the return of the
+ * auxiliary quantities.
+ *
+ * Any of the "return" arguments &s12, etc. in these routines may be replaced
+ * by 0, if you do not need some quantities computed.
+ *
+ * Computing multiple points on a geodesic.  This may be accomplished by
+ * repeated invocations of Direct varying s12.  However, it is more efficient
+ * to create a GeodesicLine object, as follows.
+ *
+ *    struct GeodesicLine l;
+ *    int caps = 0;
+ *
+ *    GeodesicLineInit(&l, &g, a, f, lat1, lon1, azi1, caps);
+ *    Position(l, s12, &lat2, &lon2, &azi2)
+ *
+ * caps is a bit mask specifying the capabilities of the GeodesicLine object.
+ * It should be an or'ed combination of
+ *
+ *    LATITUDE        compute lat2 (in effect this is always set)
+ *    LONGITUDE       compute lon2
+ *    AZIMUTH         compute azi2 (in effect this is always set)
+ *    DISTANCE        compute s12
+ *    DISTANCE_IN     allow the length to be specified in terms of distance
+ *    REDUCEDLENGTH   compute m12
+ *    GEODESICSCALE   compute M12 and M21
+ *    AREA            compute S12
+ *    ALL             all of the above
+ *
+ * caps = 0 is treated as LATITUDE | LONGITUDE | AZIMUTH | DISTANCE_IN (to
+ * support the solution "standard" direct problem).
+ *
+ * There's also a generalized version of Position
+ *
+ *    a12 = GenPosition(&l, arcmode, s12_a12,
+ *                      &lat2, &lon2, &azi2, &s12, &m12, &M12, &M21, &S12);
+ *
+ * See the documentation on GenDirect for the meaning of arcmode.
+ *
+ * Copyright (c) Charles Karney (2012) <charles at karney.com> and licensed
+ * under the MIT/X11 License.  For more information, see
+ * http://geographiclib.sourceforge.net/
+ *
+ * This file was distributed with GeographicLib 1.27.
+ */
 
-#include "projects.h"
+#if !defined(GEODESIC_H)
+#define GEODESIC_H 1
 
-#ifndef lint
-static char GEODESIC_H_ID[] = "@(#)geodesic.h	4.3	95/08/19	GIE	REL";
-#endif
-
-#ifdef __cplusplus
+#if defined(__cplusplus)
 extern "C" {
 #endif
 
-#ifndef _IN_GEOD_SET
-#  define GEOD_EXTERN extern
-#else
-#  define GEOD_EXTERN
-#endif
-
-typedef struct geodesic {
-	double	A;
+  struct Geodesic {
+    double a, f, f1, e2, ep2, n, b, c2, etol2;
+    double A3x[6], C3x[15], C4x[21];
+  };
 
-  projUV p1, p2;
+  struct GeodesicLine {
+    double lat1, lon1, azi1;
+    double a, f, b, c2, f1, salp0, calp0, k2,
+      salp1, calp1, ssig1, csig1, dn1, stau1, ctau1, somg1, comg1,
+      A1m1, A2m1, A3c, B11, B21, B31, A4, B41;
+    double C1a[6+1], C1pa[6+1], C2a[6+1], C3a[6], C4a[6];
+    unsigned caps;
+  };
 
-  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;
+  void GeodesicInit(struct Geodesic* g, double a, double f);
+  void GeodesicLineInit(struct GeodesicLine* l,
+                        const struct Geodesic* g,
+                        double lat1, double lon1, double azi1, unsigned caps);
 
+  void Direct(const struct Geodesic* g,
+              double lat1, double lon1, double azi1, double s12,
+              double* plat2, double* plon2, double* pazi2);
+  void Inverse(const struct Geodesic* g,
+               double lat1, double lon1, double lat2, double lon2,
+               double* ps12, double* pazi1, double* pazi2);
+  void Position(const struct GeodesicLine* l, double s12,
+                double* plat2, double* plon2, double* pazi2);
 
-  double th1,costh1,sinth1,sina12,cosa12,M,N,c1,c2,D,P,s1;
-  int merid, signS;
-} GEODESIC_T;
+  double GenDirect(const struct Geodesic* g,
+                   double lat1, double lon1, double azi1,
+                   int arcmode, double s12_a12,
+                   double* plat2, double* plon2, double* pazi2,
+                   double* ps12, double* pm12, double* pM12, double* pM21,
+                   double* pS12);
+  double GenInverse(const struct Geodesic* g,
+                    double lat1, double lon1, double lat2, double lon2,
+                    double* ps12, double* pazi1, double* pazi2,
+                    double* pm12, double* pM12, double* pM21, double* pS12);
+  double GenPosition(const struct GeodesicLine* l,
+                     int arcmode, double s12_a12,
+                     double* plat2, double* plon2, double* pazi2,
+                     double* ps12, double* pm12,
+                     double* pM12, double* pM21,
+                     double* pS12);
 
-	
-  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);
+  enum mask {
+    NONE          = 0U,
+    LATITUDE      = 1U<<7  | 0U,
+    LONGITUDE     = 1U<<8  | 1U<<3,
+    AZIMUTH       = 1U<<9  | 0U,
+    DISTANCE      = 1U<<10 | 1U<<0,
+    DISTANCE_IN   = 1U<<11 | 1U<<0 | 1U<<1,
+    REDUCEDLENGTH = 1U<<12 | 1U<<0 | 1U<<2,
+    GEODESICSCALE = 1U<<13 | 1U<<0 | 1U<<2,
+    AREA          = 1U<<14 | 1U<<4,
+    ALL           = 0x7F80U| 0x1FU
+  };
 
-  
-  
-#ifdef __cplusplus
+#if defined(__cplusplus)
 }
 #endif
 
-#endif // __GEODESIC_H__
-
+#endif
diff --git a/src/hypot.c b/src/hypot.c
new file mode 100644
index 0000000..822c459
--- /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 b301900..57ca092 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 ec74a9c..70c47fb 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 2142 2012-01-25 19:23:31Z warmerdam $
  *
  * Project:  PROJ.4
  * Purpose:  Load datum shift files into memory.
@@ -45,12 +45,44 @@
 #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;
@@ -66,13 +98,9 @@ int nad_ctable_load( struct CTABLE *ct, FILE *fid )
         pj_dalloc( ct->cvs );
         ct->cvs = NULL;
 
-        if( getenv("PROJ_DEBUG") != NULL )
-        {
-            fprintf( stderr, 
-            "ctable loading failed on fread() - binary incompatible?\n" );
-        }
-
-        pj_errno = -38;
+        pj_log( ctx, PJ_LOG_ERROR, 
+                "ctable loading failed on fread() - binary incompatible?\n" );
+        pj_ctx_set_errno( ctx, -38 );
         return 0;
     }
 
@@ -85,7 +113,7 @@ int nad_ctable_load( struct CTABLE *ct, FILE *fid )
 /*      Read the header portion of a "ctable" format grid.              */
 /************************************************************************/
 
-struct CTABLE *nad_ctable_init( FILE * fid )
+struct CTABLE *nad_ctable_init( projCtx ctx, FILE * fid )
 {
     struct CTABLE *ct;
     int		id_end;
@@ -95,15 +123,124 @@ struct CTABLE *nad_ctable_init( FILE * fid )
     if( ct == NULL 
         || fread( ct, sizeof(struct CTABLE), 1, fid ) != 1 )
     {
-        pj_errno = -38;
+        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);
+    if( ct->cvs == NULL 
+        || fread(ct->cvs, sizeof(FLP), a_size, fid) != a_size )
+    {
+        pj_dalloc( ct->cvs );
+        ct->cvs = NULL;
+
+        if( getenv("PROJ_DEBUG") != NULL )
+        {
+            fprintf( stderr,
+            "ctable2 loading failed on fread() - binary incompatible?\n" );
+        }
+
+        pj_ctx_set_errno( ctx, -38 );
+        return 0;
+    }
+
+    if( !IS_LSB )
+    {
+        swap_words( ct->cvs, 4, a_size * 2 );
+    }
+
+    return 1;
+} 
+
+/************************************************************************/
+/*                          nad_ctable2_init()                          */
+/*                                                                      */
+/*      Read the header portion of a "ctable2" format grid.             */
+/************************************************************************/
+
+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 )
+    {
+        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/org_proj4_PJ.h b/src/org_proj4_PJ.h
new file mode 100644
index 0000000..7e690e7
--- /dev/null
+++ b/src/org_proj4_PJ.h
@@ -0,0 +1,135 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_proj4_PJ */
+
+#ifndef _Included_org_proj4_PJ
+#define _Included_org_proj4_PJ
+#ifdef __cplusplus
+extern "C" {
+#endif
+#undef org_proj4_PJ_DIMENSION_MAX
+#define org_proj4_PJ_DIMENSION_MAX 100L
+/*
+ * Class:     org_proj4_PJ
+ * Method:    allocatePJ
+ * Signature: (Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_proj4_PJ_allocatePJ
+  (JNIEnv *, jclass, jstring);
+
+/*
+ * Class:     org_proj4_PJ
+ * Method:    allocateGeoPJ
+ * Signature: (Lorg/proj4/PJ;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_proj4_PJ_allocateGeoPJ
+  (JNIEnv *, jclass, jobject);
+
+/*
+ * Class:     org_proj4_PJ
+ * Method:    getVersion
+ * Signature: ()Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_proj4_PJ_getVersion
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_proj4_PJ
+ * Method:    getDefinition
+ * Signature: ()Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_proj4_PJ_getDefinition
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     org_proj4_PJ
+ * Method:    getType
+ * Signature: ()Lorg/proj4/PJ$Type;
+ */
+JNIEXPORT jobject JNICALL Java_org_proj4_PJ_getType
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     org_proj4_PJ
+ * Method:    getSemiMajorAxis
+ * Signature: ()D
+ */
+JNIEXPORT jdouble JNICALL Java_org_proj4_PJ_getSemiMajorAxis
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     org_proj4_PJ
+ * Method:    getSemiMinorAxis
+ * Signature: ()D
+ */
+JNIEXPORT jdouble JNICALL Java_org_proj4_PJ_getSemiMinorAxis
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     org_proj4_PJ
+ * Method:    getEccentricitySquared
+ * Signature: ()D
+ */
+JNIEXPORT jdouble JNICALL Java_org_proj4_PJ_getEccentricitySquared
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     org_proj4_PJ
+ * Method:    getAxisDirections
+ * Signature: ()[C
+ */
+JNIEXPORT jcharArray JNICALL Java_org_proj4_PJ_getAxisDirections
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     org_proj4_PJ
+ * Method:    getGreenwichLongitude
+ * Signature: ()D
+ */
+JNIEXPORT jdouble JNICALL Java_org_proj4_PJ_getGreenwichLongitude
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     org_proj4_PJ
+ * Method:    getLinearUnitToMetre
+ * Signature: (Z)D
+ */
+JNIEXPORT jdouble JNICALL Java_org_proj4_PJ_getLinearUnitToMetre
+  (JNIEnv *, jobject, jboolean);
+
+/*
+ * Class:     org_proj4_PJ
+ * Method:    transform
+ * Signature: (Lorg/proj4/PJ;I[DII)V
+ */
+JNIEXPORT void JNICALL Java_org_proj4_PJ_transform
+  (JNIEnv *, jobject, jobject, jint, jdoubleArray, jint, jint);
+
+/*
+ * Class:     org_proj4_PJ
+ * Method:    getLastError
+ * Signature: ()Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_proj4_PJ_getLastError
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     org_proj4_PJ
+ * Method:    toString
+ * Signature: ()Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_proj4_PJ_toString
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     org_proj4_PJ
+ * Method:    finalize
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_proj4_PJ_finalize
+  (JNIEnv *, jobject);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/pj_apply_gridshift.c b/src/pj_apply_gridshift.c
index 9ccfee3..bd0f254 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 2219 2012-06-19 04:18:00Z warmerdam $
  *
  * Project:  PROJ.4
  * Purpose:  Apply datum shifts based on grid shift files (normally NAD27 to
@@ -38,24 +38,95 @@
 
 /************************************************************************/
 /*                         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->catalog_name != NULL )
+        return pj_gc_apply_gridshift( defn, inverse, point_count, point_offset,
+                                      x, y, 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++ )
     {
@@ -73,11 +144,15 @@ int pj_apply_gridshift( const char *nadgrids, int inverse,
         {
             PJ_GRIDINFO *gi = tables[itable];
             struct CTABLE *ct = gi->ct;
+            double epsilon = (fabs(ct->del.phi)+fabs(ct->del.lam))/10000.0;
 
             /* 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 )
+            if( ct->ll.phi - epsilon > input.phi 
+                || ct->ll.lam - epsilon > input.lam
+                || (ct->ll.phi + (ct->lim.phi-1) * ct->del.phi + epsilon 
+                    < input.phi)
+                || (ct->ll.lam + (ct->lim.lam-1) * ct->del.lam + epsilon 
+                    < input.lam) )
                 continue;
 
             /* If we have child nodes, check to see if any of them apply. */
@@ -88,10 +163,15 @@ int pj_apply_gridshift( const char *nadgrids, int inverse,
                 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)
+                    double epsilon = 
+                        (fabs(ct1->del.phi)+fabs(ct1->del.lam))/10000.0;
+
+                    if( ct1->ll.phi - epsilon > input.phi 
+                        || ct1->ll.lam - epsilon > input.lam
+                        || (ct1->ll.phi+(ct1->lim.phi-1)*ct1->del.phi + epsilon 
+                            < input.phi)
+                        || (ct1->ll.lam+(ct1->lim.lam-1)*ct1->del.lam + epsilon 
+                            < input.lam) )
                         continue;
 
                     break;
@@ -106,38 +186,60 @@ 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;
+
+            /* 
+             * We don't actually have any machinery currently to set the 
+             * following macro, so this is mostly kept here to make it clear 
+             * how we ought to operate if we wanted to make it super clear 
+             * that an error has occured when points are outside our available
+             * datum shift areas.  But if this is on, we will find that "low 
+             * value" points on the fringes of some datasets will completely 
+             * fail causing lots of problems when it is more or less ok to 
+             * just not apply a datum shift.  So rather than deal with
+             * that we just fallback to no shift. (see also bug #45).
+             */
+#ifdef ERR_GRID_AREA_TRANSIENT_SEVERE
+            y[io] = HUGE_VAL;
+            x[io] = HUGE_VAL;
+#else
+            /* leave x/y unshifted. */
+#endif
         }
         else
         {
diff --git a/src/pj_apply_vgridshift.c b/src/pj_apply_vgridshift.c
new file mode 100644
index 0000000..1570d7f
--- /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 at pobox.com
+ *
+ ******************************************************************************
+ * Copyright (c) 2010, Frank Warmerdam <warmerdam at pobox.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 PJ_LIB__
+
+#include <projects.h>
+#include <string.h>
+#include <math.h>
+
+/************************************************************************/
+/*                        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 599b8f7..3517841 100644
--- a/src/pj_auth.c
+++ b/src/pj_auth.c
@@ -1,17 +1,17 @@
 /* determine latitude from authalic latitude */
 #include <projects.h>
-# 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 0000000..a9dc7ab
--- /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 at 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 <projects.h>
+#include <string.h>
+
+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 c2b8e1b..b47e469 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 2219 2012-06-19 04:18:00Z warmerdam $
  *
  * Project:  PROJ.4
  * Purpose:  Apply datum definition to PJ structure from initialization string.
@@ -37,10 +37,10 @@
 /*                            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;
+    const char *name, *towgs84, *nadgrids, *catalog;
 
     projdef->datum_type = PJD_UNKNOWN;
 
@@ -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 */
@@ -93,9 +93,24 @@ int pj_datum_set(paralist *pl, PJ *projdef)
     }
 
 /* -------------------------------------------------------------------- */
+/*      Check for grid catalog parameter, and optional date.            */
+/* -------------------------------------------------------------------- */
+    else if( (catalog = pj_param(ctx, pl,"scatalog").s) != NULL )
+    {
+        const char *date;
+
+        projdef->datum_type = PJD_GRIDSHIFT;
+        projdef->catalog_name = strdup(catalog);
+
+        date = pj_param(ctx, pl, "sdate").s;
+        if( date != NULL) 
+            projdef->datum_date = pj_gc_parsedate( ctx, date);
+    }
+
+/* -------------------------------------------------------------------- */
 /*      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 be0bb8b..973cc05 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, at alaska, at ntv2_0.gsb, at 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 989701e..c0d4adc 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 @@ bomb:
 			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 ee48cfb..6a4db92 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 880a931..b70b424 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 ac794f2..1d2e2ab 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_gc_reader.c b/src/pj_gc_reader.c
new file mode 100644
index 0000000..e22aa99
--- /dev/null
+++ b/src/pj_gc_reader.c
@@ -0,0 +1,221 @@
+/******************************************************************************
+ * $Id$
+ *
+ * Project:  PROJ.4
+ * Purpose:  Code to read a grid catalog from a .cvs file.
+ * Author:   Frank Warmerdam, warmerdam at pobox.com
+ *
+ ******************************************************************************
+ * Copyright (c) 2012, Frank Warmerdam <warmerdam at pobox.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 PJ_LIB__
+
+#include <projects.h>
+#include <string.h>
+
+static int pj_gc_readentry( projCtx ctx, FILE *fp, PJ_GridCatalogEntry *entry );
+static void pj_gc_sortcatalog( projCtx ctx, PJ_GridCatalog *catalog );
+
+/************************************************************************/
+/*                         pj_gc_readcatalog()                          */
+/*                                                                      */
+/*      Read a grid catalog from a .csv file.                           */
+/************************************************************************/
+
+PJ_GridCatalog *pj_gc_readcatalog( projCtx ctx, const char *catalog_name )
+{
+    FILE *fp;
+    PJ_GridCatalog *catalog;
+    int entry_max, err;
+    char line[302];
+    
+    fp = pj_open_lib( ctx, (char *) catalog_name, "r" );
+    if (fp == NULL) 
+        return NULL;
+
+    /* discard title line */
+    fgets(line, sizeof(line)-1, fp);
+
+    catalog = (PJ_GridCatalog *) calloc(1,sizeof(PJ_GridCatalog));
+    if( !catalog )
+        return NULL;
+    
+    catalog->catalog_name = strdup(catalog_name);
+    
+    entry_max = 10;
+    catalog->entries = (PJ_GridCatalogEntry *) 
+        malloc(entry_max * sizeof(PJ_GridCatalogEntry));
+    
+    while( pj_gc_readentry( ctx, fp, 
+                            catalog->entries+catalog->entry_count) == 0)
+    {
+        catalog->entry_count++;
+        
+        if( catalog->entry_count == entry_max ) 
+        {
+            entry_max = entry_max * 2;
+            catalog->entries = (PJ_GridCatalogEntry *) 
+                realloc(catalog->entries, 
+                        entry_max * sizeof(PJ_GridCatalogEntry));
+            if (catalog->entries == NULL )
+                return NULL;
+        }
+    }
+
+    pj_gc_sortcatalog( ctx, catalog );
+
+    return catalog;
+}
+
+/************************************************************************/
+/*                         pj_gc_sortcatalog()                          */
+/*                                                                      */
+/*      Sort all the entries in ascending date and within a date in     */
+/*      descending priority order.                                      */
+/************************************************************************/
+
+static void pj_gc_sortcatalog( projCtx ctx, PJ_GridCatalog *catalog )
+
+{
+}
+
+/************************************************************************/
+/*                        pj_gc_read_csv_line()                         */
+/*                                                                      */
+/*      Simple csv line splitter with fixed maximum line size and       */
+/*      token count.                                                    */
+/************************************************************************/
+
+static int pj_gc_read_csv_line( projCtx ctx, FILE *fp, 
+                                char **tokens, int max_tokens ) 
+{
+    char line[302];
+   
+    while( fgets(line, sizeof(line)-1, fp) != NULL )
+    {
+        char *next = line;
+        int token_count = 0;
+        
+        while( isspace(*next) ) 
+            next++;
+        
+        /* skip blank and comment lines */
+        if( next[0] == '#' || next[0] == '\0' )
+            continue;
+        
+        while( token_count < max_tokens && *next != '\0' ) 
+        {
+            const char *start = next;
+            
+            while( *next != '\0' && *next != ',' ) 
+                next++;
+            
+            if( *next == ',' )
+            {
+                *next = '\0';
+                next++;
+            }
+            
+            tokens[token_count++] = strdup(start);
+        }
+
+        return token_count;
+    }
+    
+    return 0; 
+}
+
+/************************************************************************/
+/*                          pj_gc_parsedate()                           */
+/*                                                                      */
+/*      Parse a date into a floating point year value.  Acceptable      */
+/*      values are "yyyy.fraction" and "yyyy-mm-dd".  Anything else     */
+/*      returns 0.0.                                                    */
+/************************************************************************/
+
+double pj_gc_parsedate( projCtx ctx, const char *date_string )
+{
+    if( strlen(date_string) == 10 
+        && date_string[4] == '-' && date_string[7] == '-' ) 
+    {
+        int year = atoi(date_string);
+        int month = atoi(date_string+5);
+        int day = atoi(date_string+8);
+
+        /* simplified calculation so we don't need to know all about months */
+        return year + ((month-1) * 31 + (day-1)) / 372.0;
+    }
+    else 
+    {
+        return atof(date_string);
+    }
+}
+
+
+/************************************************************************/
+/*                          pj_gc_readentry()                           */
+/*                                                                      */
+/*      Read one catalog entry from the file                            */
+/*                                                                      */
+/*      Format:                                                         */
+/*        gridname,ll_long,ll_lat,ur_long,ur_lat,priority,date          */
+/************************************************************************/
+
+static int pj_gc_readentry( projCtx ctx, FILE *fp, PJ_GridCatalogEntry *entry ) 
+{
+#define MAX_TOKENS 30
+    char *tokens[MAX_TOKENS];
+    int token_count, i;
+    int error = 0;
+
+    memset( entry, 0, sizeof(PJ_GridCatalogEntry) );
+    
+    token_count = pj_gc_read_csv_line( ctx, fp, tokens, MAX_TOKENS );
+    if( token_count < 5 )
+    {
+        error = 1; /* TODO: need real error codes */
+        if( token_count != 0 )
+            pj_log( ctx, PJ_LOG_ERROR, "Short line in grid catalog." );
+    }
+    else
+    {
+        memset( entry, 0, sizeof(PJ_GridCatalogEntry));
+        
+        entry->definition = strdup( tokens[0] );
+        entry->region.ll_long = dmstor_ctx( ctx, tokens[1], NULL );
+        entry->region.ll_lat = dmstor_ctx( ctx, tokens[2], NULL );
+        entry->region.ur_long = dmstor_ctx( ctx, tokens[3], NULL );
+        entry->region.ur_lat = dmstor_ctx( ctx, tokens[4], NULL );
+        if( token_count > 5 )
+            entry->priority = atoi( tokens[5] ); /* defaults to zero */
+        if( token_count > 6 )
+            entry->date = pj_gc_parsedate( ctx, tokens[6] );
+    }
+
+    for( i = 0; i < token_count; i++ )
+        free( tokens[i] );
+
+    return error;
+}
+
+
+
diff --git a/src/pj_gridcatalog.c b/src/pj_gridcatalog.c
new file mode 100644
index 0000000..359e9fa
--- /dev/null
+++ b/src/pj_gridcatalog.c
@@ -0,0 +1,282 @@
+/******************************************************************************
+ * $Id$
+ *
+ * Project:  PROJ.4
+ * Purpose:  Code in support of grid catalogs
+ * Author:   Frank Warmerdam, warmerdam at pobox.com
+ *
+ ******************************************************************************
+ * Copyright (c) 2012, Frank Warmerdam <warmerdam at pobox.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 PJ_LIB__
+
+#include <projects.h>
+#include <string.h>
+#include <assert.h>
+
+static PJ_GridCatalog *grid_catalog_list = NULL;
+
+/************************************************************************/
+/*                          pj_gc_unloadall()                           */
+/*                                                                      */
+/*      Deallocate all the grid catalogs (but not the referenced        */
+/*      grids).                                                         */
+/************************************************************************/
+
+void pj_gc_unloadall( projCtx ctx )
+
+{
+    while( grid_catalog_list != NULL )
+    {
+        int i;
+        PJ_GridCatalog *catalog = grid_catalog_list;
+        grid_catalog_list = grid_catalog_list->next;
+
+        for( i = 0; i < catalog->entry_count; i++ )
+        {
+            /* we don't own gridinfo - do not free here */
+            free( catalog->entries[i].definition );
+        }
+        free( catalog->entries );
+        free( catalog );
+    }
+}
+
+/************************************************************************/
+/*                         pj_gc_findcatalog()                          */
+/************************************************************************/
+
+PJ_GridCatalog *pj_gc_findcatalog( projCtx ctx, const char *name )
+
+{
+    PJ_GridCatalog *catalog;
+
+    pj_acquire_lock();
+
+    for( catalog=grid_catalog_list; catalog != NULL; catalog = catalog->next ) 
+    {
+        if( strcmp(catalog->catalog_name, name) == 0 )
+        {
+            pj_release_lock();
+            return catalog;
+        }
+    }
+
+    pj_release_lock();
+
+    catalog = pj_gc_readcatalog( ctx, name );
+    if( catalog == NULL )
+        return NULL;
+
+    pj_acquire_lock();
+    catalog->next = grid_catalog_list;
+    grid_catalog_list = catalog;
+    pj_release_lock();
+
+    return catalog;
+}
+
+/************************************************************************/
+/*                       pj_gc_apply_gridshift()                        */
+/************************************************************************/
+
+int pj_gc_apply_gridshift( PJ *defn, int inverse, 
+                           long point_count, int point_offset, 
+                           double *x, double *y, double *z )
+
+{
+    int i;
+
+    if( defn->catalog == NULL ) 
+    {
+        defn->catalog = pj_gc_findcatalog( defn->ctx, defn->catalog_name );
+        if( defn->catalog == NULL )
+            return defn->ctx->last_errno;
+    }
+
+    defn->ctx->last_errno = 0;
+
+    for( i = 0; i < point_count; i++ )
+    {
+        long io = i * point_offset;
+        LP   input, output_after, output_before;
+        int  itable;
+        double mix_ratio;
+        PJ_GRIDINFO *gi;
+
+        input.phi = y[io];
+        input.lam = x[io];
+
+        /* make sure we have appropriate "after" shift file available */
+        if( defn->last_after_grid == NULL
+            || input.lam < defn->last_after_region.ll_long
+            || input.lam > defn->last_after_region.ur_long
+            || input.phi < defn->last_after_region.ll_lat
+            || input.phi > defn->last_after_region.ll_lat ) {
+            defn->last_after_grid = 
+                pj_gc_findgrid( defn->ctx, defn->catalog, 
+                                1, input, defn->datum_date, 
+                                &(defn->last_after_region), 
+                                &(defn->last_after_date));
+        }
+        gi = defn->last_after_grid;
+        assert( gi->child == NULL );
+
+        /* load the grid shift info if we don't have it. */
+        if( gi->ct->cvs == NULL && !pj_gridinfo_load( defn->ctx, gi ) )
+        {
+            pj_ctx_set_errno( defn->ctx, -38 );
+            return -38;
+        }
+            
+        output_after = nad_cvt( input, inverse, gi->ct );
+        if( output_after.lam == HUGE_VAL )
+        {
+            if( defn->ctx->debug_level >= PJ_LOG_DEBUG_MAJOR )
+            {
+                pj_log( defn->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 );
+            }
+            continue;
+        }
+
+        if( defn->datum_date == 0.0 ) 
+        {
+            y[io] = output_after.phi;
+            x[io] = output_after.lam;
+            continue;
+        }
+
+        /* make sure we have appropriate "before" shift file available */
+        if( defn->last_before_grid == NULL
+            || input.lam < defn->last_before_region.ll_long
+            || input.lam > defn->last_before_region.ur_long
+            || input.phi < defn->last_before_region.ll_lat
+            || input.phi > defn->last_before_region.ll_lat ) {
+            defn->last_before_grid = 
+                pj_gc_findgrid( defn->ctx, defn->catalog, 
+                                0, input, defn->datum_date, 
+                                &(defn->last_before_region), 
+                                &(defn->last_before_date));
+        }
+
+        gi = defn->last_before_grid;
+        assert( gi->child == NULL );
+
+        /* load the grid shift info if we don't have it. */
+        if( gi->ct->cvs == NULL && !pj_gridinfo_load( defn->ctx, gi ) )
+        {
+            pj_ctx_set_errno( defn->ctx, -38 );
+            return -38;
+        }
+            
+        output_before = nad_cvt( input, inverse, gi->ct );
+        if( output_before.lam == HUGE_VAL )
+        {
+            if( defn->ctx->debug_level >= PJ_LOG_DEBUG_MAJOR )
+            {
+                pj_log( defn->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 );
+            }
+            continue;
+        }
+
+        mix_ratio = (defn->datum_date - defn->last_before_date) 
+            / (defn->last_after_date - defn->last_before_date);
+
+        y[io] = mix_ratio * output_after.phi 
+            + (1.0-mix_ratio) * output_before.phi;
+        x[io] = mix_ratio * output_after.lam 
+            + (1.0-mix_ratio) * output_before.lam;
+    }
+
+    return 0;
+}
+
+/************************************************************************/
+/*                           pj_c_findgrid()                            */
+/************************************************************************/
+
+PJ_GRIDINFO *pj_gc_findgrid( projCtx ctx, PJ_GridCatalog *catalog, int after,
+                             LP location, double date,
+                             PJ_Region *optimal_region,
+                             double *grid_date ) 
+{
+    int iEntry;
+    PJ_GridCatalogEntry *entry = NULL;
+
+    for( iEntry = 0; iEntry < catalog->entry_count; iEntry++ ) 
+    {
+        entry = catalog->entries + iEntry;
+
+        if( (after && entry->date < date) 
+            || (!after && entry->date > date) )
+            continue;
+
+        if( location.lam < entry->region.ll_long
+            || location.lam > entry->region.ur_long
+            || location.phi < entry->region.ll_lat
+            || location.phi > entry->region.ur_lat )
+            continue;
+
+        if( entry->available == -1 )
+            continue;
+
+        break;
+    }
+
+    if( iEntry == catalog->entry_count )
+    {
+        if( grid_date )
+            *grid_date = 0.0;
+        if( optimal_region != NULL )
+            memset( optimal_region, 0, sizeof(PJ_Region));
+        return NULL;
+    }
+
+    if( grid_date )
+        *grid_date = entry->date;
+
+    if( optimal_region )
+    {
+        
+    }
+
+    if( entry->gridinfo == NULL )
+    {
+        PJ_GRIDINFO **gridlist = NULL;
+        int grid_count = 0;
+        gridlist = pj_gridlist_from_nadgrids( ctx, entry->definition, 
+                                              &grid_count);
+        if( grid_count == 1 )
+            entry->gridinfo = gridlist[0];
+    }
+    
+    return entry->gridinfo;
+}
+                             
diff --git a/src/pj_gridinfo.c b/src/pj_gridinfo.c
index 7a4612f..a91cfc9 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 2142 2012-01-25 19:23:31Z 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;
@@ -592,6 +650,109 @@ static int pj_gridinfo_init_ntv1( FILE * fid, PJ_GRIDINFO *gi )
 }
 
 /************************************************************************/
+/*                       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()                          */
 /*                                                                      */
 /*      Open and parse header details from a datum gridshift file       */
@@ -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 1d14164..dae859a 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 4c284b0..a129061 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 2305 2012-12-18 00:31:55Z 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 <projects.h>
 #include <stdio.h>
 #include <string.h>
 #include <errno.h>
+#include <locale.h>
 
-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 2305 2012-12-18 00:31:55Z 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;
 }
 
 /************************************************************************/
@@ -180,11 +162,17 @@ 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;
+    int		argc = 0, i, blank_count = 0;
+    PJ	    *result;
     
     /* make a copy that we can manipulate */
     defn_copy = (char *) pj_malloc( strlen(definition)+1 );
@@ -197,11 +185,18 @@ pj_init_plus( const char *definition )
         switch( defn_copy[i] )
         {
           case '+':
-            if( i == 0 || defn_copy[i-1] == '\0' )
+            if( i == 0 || defn_copy[i-1] == '\0' || blank_count > 0 )
             {
+                /* trim trailing spaces from the previous param */
+                if( blank_count > 0 )
+                {
+                    defn_copy[i - blank_count] = '\0';
+                    blank_count = 0;
+                }
+                
                 if( argc+1 == MAX_ARG )
                 {
-                    pj_errno = -44;
+                    pj_ctx_set_errno( ctx, -44 );
                     return NULL;
                 }
                 
@@ -212,16 +207,23 @@ pj_init_plus( const char *definition )
           case ' ':
           case '\t':
           case '\n':
-            defn_copy[i] = '\0';
+            /* trim leading spaces from the current param */
+            if( i == 0 || defn_copy[i-1] == '\0' || argc == 0 || argv[argc-1] == defn_copy + i )
+                defn_copy[i] = '\0';
+            else
+                blank_count++;
             break;
 
           default:
-            /* do nothing */;
+            /* reset blank_count */
+            blank_count = 0;
         }
     }
+    /* trim trailing spaces from the last param */
+    defn_copy[i - blank_count] = '\0';
 
     /* perform actual initialization */
-    result = pj_init( argc, argv );
+    result = pj_init_ctx( ctx, argc, argv );
 
     pj_dalloc( defn_copy );
 
@@ -239,165 +241,244 @@ 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 = setlocale(LC_NUMERIC, NULL);
+    if (old_locale != NULL) {
+       if (strcmp(old_locale,"C") != 0) {
+	  setlocale(LC_NUMERIC,"C");
+	  old_locale = strdup(old_locale);
+       }else
+	  old_locale = NULL;
+    }
+
+    /* 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 (old_locale != NULL) {
+       setlocale(LC_NUMERIC,old_locale);
+       free( (char*)old_locale );
+    }
+
+    return PIN;
 }
 
 /************************************************************************/
@@ -412,18 +493,26 @@ bum_call: /* cleanup error return */
 
 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 );
+
+        if( P->vgridlist_geoid != NULL )
+            pj_dalloc( P->vgridlist_geoid );
 
+        if( P->catalog != NULL )
+            pj_dalloc( P->catalog );
 
+        /* free projection parameters */
+        P->pfree(P);
+    }
+}
diff --git a/src/pj_initcache.c b/src/pj_initcache.c
index 5dd46fa..71036f2 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 ee2b44f..a418ccd 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.c b/src/pj_list.c
index 7d35811..bb56ade 100644
--- a/src/pj_list.c
+++ b/src/pj_list.c
@@ -1,7 +1,7 @@
 /* Projection System: default list of projections
 ** Use local definition of PJ_LIST_H for subset.
 */
-#define PJ_LIST_H "pj_list.h"
+#define USE_PJ_LIST_H 1
 #include "projects.h"
 
 struct PJ_LIST  *pj_get_list_ref()
diff --git a/src/pj_list.h b/src/pj_list.h
index b965cc7..8230f92 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,7 +47,11 @@ 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(isea, "Icosahedral Snyder Equal Area")
 PROJ_HEAD(kav5, "Kavraisky V")
 PROJ_HEAD(kav7, "Kavraisky VII")
 PROJ_HEAD(krovak, "Krovak")
@@ -77,6 +82,7 @@ PROJ_HEAD(moll, "Mollweide")
 PROJ_HEAD(murd1, "Murdoch I")
 PROJ_HEAD(murd2, "Murdoch II")
 PROJ_HEAD(murd3, "Murdoch III")
+PROJ_HEAD(natearth, "Natural Earth")
 PROJ_HEAD(nell, "Nell")
 PROJ_HEAD(nell_h, "Nell-Hammer")
 PROJ_HEAD(nicol, "Nicolosi Globular")
diff --git a/src/PJ_aitoff.c b/src/pj_log.c
similarity index 52%
copy from src/PJ_aitoff.c
copy to src/pj_log.c
index a49b30b..630a3cf 100644
--- a/src/PJ_aitoff.c
+++ b/src/pj_log.c
@@ -1,13 +1,12 @@
 /******************************************************************************
- * $Id: PJ_aitoff.c 1504 2009-01-06 02:11:57Z warmerdam $
+ * $Id$
  *
  * Project:  PROJ.4
- * Purpose:  Implementation of the aitoff (Aitoff) and wintri (Winkel Tripel)
- *           projections.
- * Author:   Gerald Evenden
+ * Purpose:  Implementation of pj_log() function.
+ * Author:   Frank Warmerdam, warmerdam at pobox.com
  *
  ******************************************************************************
- * Copyright (c) 1995, Gerald Evenden
+ * 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"),
@@ -28,49 +27,47 @@
  * DEALINGS IN THE SOFTWARE.
  *****************************************************************************/
 
-#define PROJ_PARMS__ \
-	double	cosphi1; \
-	int		mode;
-#define PJ_LIB__
 #include <projects.h>
+#include <string.h>
+#include <stdarg.h>
 
-PJ_CVSID("$Id: PJ_aitoff.c 1504 2009-01-06 02:11:57Z warmerdam $");
+PJ_CVSID("$Id$");
 
-PROJ_HEAD(aitoff, "Aitoff") "\n\tMisc Sph";
-PROJ_HEAD(wintri, "Winkel Tripel") "\n\tMisc Sph\n\tlat_1";
+/************************************************************************/
+/*                          pj_stderr_logger()                          */
+/************************************************************************/
 
-FORWARD(s_forward); /* spheroid */
-	double c, d;
+void pj_stderr_logger( void *app_data, int level, const char *msg )
 
-	if((d = acos(cos(lp.phi) * cos(c = 0.5 * lp.lam)))) {/* basic Aitoff */
-		xy.x = 2. * d * cos(lp.phi) * sin(c) * (xy.y = 1. / sin(d));
-		xy.y *= d * sin(lp.phi);
-	} else
-		xy.x = xy.y = 0.;
-	if (P->mode) { /* Winkel Tripel */
-		xy.x = (xy.x + lp.lam * P->cosphi1) * 0.5;
-		xy.y = (xy.y + lp.phi) * 0.5;
-	}
-	return (xy);
+{
+    fprintf( stderr, "%s\n", msg );
 }
-FREEUP; if (P) pj_dalloc(P); }
-	static PJ *
-setup(PJ *P) {
-	P->inv = 0;
-	P->fwd = s_forward;
-	P->es = 0.;
-	return P;
+
+/************************************************************************/
+/*                               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 );
 }
-ENTRY0(aitoff)
-	P->mode = 0;
-ENDENTRY(setup(P))
-ENTRY0(wintri)
-	P->mode = 1;
-	if (pj_param(P->params, "tlat_1").i)
-        {
-		if ((P->cosphi1 = cos(pj_param(P->params, "rlat_1").f)) == 0.)
-			E_ERROR(-22)
-        }
-	else /* 50d28' or acos(2/pi) */
-		P->cosphi1 = 0.636619772367581343;
-ENDENTRY(setup(P))
diff --git a/src/pj_malloc.c b/src/pj_malloc.c
index b6400eb..80443a2 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 afd18b1..aeab611 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 3399ac1..39cedbc 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 <proj_api.h>
 #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 157efba..23e1427 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 <string.h>
 #include <errno.h>
 
-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 4dce136..119006e 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 0900350..5c81da4 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 d4a908c..e14b20d 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_release.c b/src/pj_release.c
index d1e2209..1b6e54a 100644
--- a/src/pj_release.c
+++ b/src/pj_release.c
@@ -2,7 +2,7 @@
 
 #include <projects.h>
 
-char const pj_release[]="Rel. 4.7.1, 23 September 2009";
+char const pj_release[]="Rel. 4.8.0, 6 March 2012";
 
 const char *pj_get_release()
 
diff --git a/src/pj_strerrno.c b/src/pj_strerrno.c
index 4db1fb9..9d23703 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,9 @@ 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 */
+	"invalid sweep axis, choose x or y",            /* -49 */
 };
 	char *
 pj_strerrno(int err) 
diff --git a/src/pj_transform.c b/src/pj_transform.c
index 7aacbd4..afd3db3 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 <math.h>
 #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,21 +89,45 @@ 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.            */
 /* -------------------------------------------------------------------- */
     if( srcdefn->is_geocent )
     {
         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;
@@ -181,13 +209,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 f9f6684..c485de9 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 2160 2012-02-15 23:51:45Z warmerdam $
  *
  * Project:  PROJ.4
  * Purpose:  Some utility functions we don't want to bother putting in
@@ -77,80 +77,97 @@ 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 );
 }
 
+/************************************************************************/
+/*                        pj_get_spheroid_defn()                        */
+/*                                                                      */
+/*      Fetch the internal definition of the spheroid.  Note that       */
+/*      you can compute "b" from eccentricity_squared as:               */
+/*                                                                      */
+/*      b = a * sqrt(1 - es)                                            */
+/************************************************************************/
+
+void pj_get_spheroid_defn(projPJ defn, double *major_axis, double *eccentricity_squared)
+{
+	if ( major_axis )
+		*major_axis = defn->a;
+		
+	if ( eccentricity_squared )
+		*eccentricity_squared = defn->es;
+};
diff --git a/src/proj_api.h b/src/proj_api.h
index f4ee46b..8367776 100644
--- a/src/proj_api.h
+++ b/src/proj_api.h
@@ -1,5 +1,5 @@
 /******************************************************************************
- * $Id: proj_api.h 1631 2009-09-24 02:26:05Z warmerdam $
+ * $Id: proj_api.h 2160 2012-02-15 23:51:45Z 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,18 +79,22 @@ 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_get_spheroid_defn(projPJ defn, double *major_axis, double *eccentricity_squared);
 void pj_pr_list(projPJ);
 void pj_free(projPJ);
 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 +106,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 0000000..3a38960
--- /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 <projects.h>
+
+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 9edde83..465ebeb 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 594c237..f2c49e2 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 297de0a..d8690c9 100644
--- a/src/projects.h
+++ b/src/projects.h
@@ -1,5 +1,5 @@
 /******************************************************************************
- * $Id: projects.h 1625 2009-09-23 18:58:15Z warmerdam $
+ * $Id: projects.h 2219 2012-06-19 04:18:00Z warmerdam $
  *
  * Project:  PROJ.4
  * Purpose:  Primary (private) include file for PROJ.4 library.
@@ -44,6 +44,7 @@
 #include <math.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 
 #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,11 @@ 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 PJD_ERR_CATALOG             -49
 
 #define USE_PROJUV 
 
@@ -179,6 +191,13 @@ struct PJ_PRIME_MERIDIANS {
     char    *defn;   /* offset from greenwich in DMS format. */
 };
 
+typedef struct {
+    double ll_long;      /* lower left corner coordinates (radians) */
+    double ll_lat;
+    double ur_long;      /* upper right corner coordinates (radians) */
+    double ur_lat; 
+} PJ_Region;
+
 struct DERIVS {
     double x_l, x_p; /* derivatives of x for lambda-phi */
     double y_l, y_p; /* derivatives of y for lambda-phi */
@@ -206,6 +225,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,9 +252,33 @@ 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];
+
+        /* New Datum Shift Grid Catalogs */
+        char   *catalog_name;
+        struct _PJ_GridCatalog *catalog;
+    
+        double   datum_date;
+    
+        struct _pj_gi *last_before_grid;
+        PJ_Region     last_before_region;
+        double        last_before_date;
+
+        struct _pj_gi *last_after_grid;
+        PJ_Region     last_after_region;
+        double        last_after_date;
+
 #ifdef PROJ_PARMS__
 PROJ_PARMS__
 #endif /* end of optional extensions */
@@ -244,24 +288,18 @@ PROJ_PARMS__
 #include "proj_api.h"
 
 /* Generate pj_list external or make list from include file */
-#ifndef PJ_LIST_H
+#ifndef USE_PJ_LIST_H
 extern struct PJ_LIST pj_list[];
 #else
 #define PROJ_HEAD(id, name) \
     struct PJconsts *pj_##id(struct PJconsts*); extern char * const pj_s_##id;
     
-#ifndef lint
-#define DO_PJ_LIST_ID
-#endif
-#include PJ_LIST_H
-#ifndef lint
-#undef DO_PJ_LIST_ID
-#endif
+#include "pj_list.h"
 #undef PROJ_HEAD
 #define PROJ_HEAD(id, name) {#id, pj_##id, &pj_s_##id},
 	struct PJ_LIST
 pj_list[] = {
-#include PJ_LIST_H
+#include "pj_list.h"
 		{0,     0,  0},
 	};
 #undef PROJ_HEAD
@@ -287,6 +325,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 +333,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) {
@@ -330,37 +369,59 @@ typedef struct _pj_gi {
     struct _pj_gi *child;
 } PJ_GRIDINFO;
 
+typedef struct {
+    PJ_Region region;
+    int  priority; /* higher used before lower */
+    double date; /* year.fraction */
+    char *definition; /* usually the gridname */
+
+    PJ_GRIDINFO  *gridinfo;
+    int available; /* 0=unknown, 1=true, -1=false */
+} PJ_GridCatalogEntry;
+
+typedef struct _PJ_GridCatalog {
+    char *catalog_name;
+
+    PJ_Region region; /* maximum extent of catalog data */
+
+    int entry_count;
+    PJ_GridCatalogEntry *entries;
+
+    struct _PJ_GridCatalog *next;
+} PJ_GridCatalog;
+
+
 /* 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 +451,60 @@ 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 * );
+
+PJ_GridCatalog *pj_gc_findcatalog( projCtx, const char * );
+PJ_GridCatalog *pj_gc_readcatalog( projCtx, const char * );
+void pj_gc_unloadall( projCtx );
+int pj_gc_apply_gridshift( PJ *defn, int inverse, 
+                           long point_count, int point_offset,
+                           double *x, double *y, double *z );
+int pj_gc_apply_gridshift( PJ *defn, int inverse, 
+                           long point_count, int point_offset,
+                           double *x, double *y, double *z );
+
+PJ_GRIDINFO *pj_gc_findgrid( projCtx ctx, 
+                             PJ_GridCatalog *catalog, int after, 
+                             LP location, double date,
+                             PJ_Region *optional_region,
+                             double *grid_date );
+
+double pj_gc_parsedate( projCtx, const char * );
 
 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 +515,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/vector1.c b/src/vector1.c
index 30fca1c..b3023ee 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;
diff --git a/test/geodtest.py b/test/geodtest.py
index bf4d4d1..06b5c83 100644
--- a/test/geodtest.py
+++ b/test/geodtest.py
@@ -9,21 +9,21 @@ print lat1pt,lon1pt,lat2pt,lon2pt
 print 'inverse transform'
 print 'from proj.4 invgeod:'
 print commands.getoutput('echo "42d15\'N 71d07\'W 45d31\'N 123d41\'W" | geod +ellps=clrk66 -I -f "%.3f"')
-print 'from pyproj._Geod._inv:'
+print 'from pyproj.Geod.inv:'
 az12,az21,dist = g.inv(lon1pt,lat1pt,lon2pt,lat2pt)
 print "%7.3f %6.3f %12.3f" % (az12,az21,dist)
 print 'forward transform'
 print 'from proj.4 geod:'
 print commands.getoutput('echo "42d15\'N 71d07\'W -66d31\'50.141 4164192.708" | geod +ellps=clrk66 -f "%.3f"')
 endlon,endlat,backaz = g.fwd(lon1pt,lat1pt,az12,dist)
-print 'from pyproj._Geod._fwd:'
+print 'from pyproj.Geod.fwd:'
 print "%6.3f  %6.3f %13.3f" % (endlat,endlon,backaz)
 print 'intermediate points:'
 print 'from geod with +lat_1,+lon_1,+lat_2,+lon_2,+n_S:'
 points = '+lon_1=%s +lat_1=%s +lon_2=%s +lat_2=%s' % (lon1pt,lat1pt,lon2pt,lat2pt,)
 print points
 print commands.getoutput('geod +ellps=clrk66 -f "%.3f" +n_S=5 '+points)
-print 'from pyproj._Geod._npts:'
+print 'from pyproj.Geod.npts:'
 npts = 4
 lonlats = g.npts(lon1pt,lat1pt,lon2pt,lat2pt,npts)
 lonprev = lon1pt
@@ -37,25 +37,6 @@ for lon, lat in lonlats:
 az12,az21,dist = g.inv(lonprev,latprev,lon2pt,lat2pt)
 print '%6.3f  %7.3f %11.3f' % (lat2pt, lon2pt, dist)
 
-# should raise exception (antipodal point)
-try:
-    print 'testing antipodal point, should raise exception ...'
-    az12,az21,dist = g.inv(0.,90.,0.,-90.,0.)
-except ValueError:
-    print 'OK'
-else:
-    print 'not OK, no exception raised!'
-
-# should raise exception (equatorial arc)
-try:
-    print 'testing equatorial arc, should raise execption ...'
-    az12,az21,dist = g.inv(180.,0.0,200.,0.)
-    endlon,endlat,backaz = g.fwd(180.,0.0,az12,0.)
-except ValueError:
-    print 'OK'
-else:
-    print 'not OK, no exception raised!'
-
 # specify the lat/lons of some cities.
 boston_lat = 42.+(15./60.); boston_lon = -71.-(7./60.)
 portland_lat = 45.+(31./60.); portland_lon = -123.-(41./60.)
@@ -84,6 +65,6 @@ g3 = Geod('+ellps=clrk66') # proj4 style init string
 print 'inverse transform'
 print 'from proj.4 invgeod:'
 print commands.getoutput('echo "42d15\'N 71d07\'W 45d31\'N 123d41\'W" | geod +ellps=clrk66 -I -f "%.3f"')
-print 'from pyproj._Geod._inv:'
+print 'from pyproj.Geod.inv:'
 az12,az21,dist = g3.inv(lon1pt,lat1pt,lon2pt,lat2pt)
 print "%7.3f %6.3f %12.3f" % (az12,az21,dist)
diff --git a/test/test_datum.py b/test/test_datum.py
index d428657..2f69d38 100644
--- a/test/test_datum.py
+++ b/test/test_datum.py
@@ -1,4 +1,4 @@
-import commands
+import subprocess, sys
 from pyproj import Proj, transform
 p1 = Proj(proj='latlong',datum='WGS84')
 s_1 = -111.5
@@ -6,8 +6,11 @@ s_2 = 45.25919444444
 p2 = Proj(proj="utm",zone=10,datum='NAD27')
 cstr='echo "-111.5 45.25919444444" | cs2cs +proj=latlong +datum=WGS84 +to '+\
      '+proj=utm +zone=10 +datum=NAD27 -f "%.12f"'
-print 'test datum shift (requires cs2cs proj4 command line tool)'
-x1,y1,z1 = tuple( [float(x) for x in commands.getoutput(cstr).split()] )
+sys.stdout.write('test datum shift (requires cs2cs proj4 command line tool)\n')
+p = subprocess.Popen(cstr, shell=True, stdout=subprocess.PIPE,\
+        stderr=subprocess.STDOUT)
+pout = p.stdout.readlines()[0].decode('ascii')
+x1,y1,z1 = tuple( [float(x) for x in pout.split()] )
 x2,y2 = transform(p1, p2, s_1, s_2)
-print 'is',(x1,y1),'=',(x2,y2),'?'
-print "%12.3f %12.3f" % (x1,y1) == '%12.3f %12.3f' % (x2,y2)
+sys.stdout.write('is (%s,%s) = (%s,%s)?\n' % (x1,y1,x2,y2))
+print("%12.3f %12.3f" % (x1,y1) == '%12.3f %12.3f' % (x2,y2))

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/python-pyproj.git



More information about the Pkg-grass-devel mailing list